A simple dashboard I made for my homelab.
-
View RAM, CPU, and Disk usage
-
Customizable tabs with log streaming and custom command output
-
Install it on your server
-
Since it's TUI, you can access from anywhere via SSH
-
QuickDash uses
watchfilesto see changes in the config file, and applies them instantly.
quickdashDemo.mp4
pipx, uvx (TODO)
Installation Script
curl -s https://raw.githubusercontent.com/khr519/QuickDash/main/install.sh | bashOR, clone the repo, install deps, and run main.py!
The configuration file can be found in
- a)
settings.tomlinside the folder you installed QuickDash in, if you installed via cloning the repo or using the installation script. - b)
<-- WIP~/.config/quickdash/settings.tomlif you installed using pipx or uvx
The settings.toml contains an example configuration. You can edit that to customize your setup.
[[disks]]
name = "ROOT"
path = "/"
[[disks]]
name = "HOME"
path = "/home"The disks section is where the disk usage shown in the top bar is configured.
nameis the displayed name of each disk.pathis the path to check disk usage
Note: The python code snippet insideparse is executed using eval().
[tabs."Tab Name"]
container = "container name"
command = { exec = "command to run", parse = "parsing code" }
log = { command = "log command", ignore = ["strings to ignore"], parse = "parsing code" }The tabs section is where tabs containing log viewers and custom command outputs are configured.
-
Set
containerto your docker container name. (or, for some reason you don't want to, follow this) -
If you want to see a custom command output, set
command.-
command.execis the disired command to run inside the container.(because the container is specified, the actual command will look like
docker exec {container} {command.exec}) -
command.parseis optional. It parses the command output using the given python code snippet. The variableoutputcontains the command output. -
ex)
command = { exec = "date", parse = "f'The current date and time is: {output}'" }
-
-
The log is fetched using
docker logs -f {container}by default.- The command to use can be specified by setting
log.command = "your command" log.ignore = []is optional. It can be set to ignore lines containing the strings specified.log.parseis optional. It parses each line of log using the given python code snippet. The variablelinecontains one line of log.
- The command to use can be specified by setting
# Example using docker container (itzg/docker-minecraft-server)
[tabs."Minecraft Server"]
container = "minecraft-mc-1"
command = { exec = "rcon-cli list", parse = "f'online: {output.split(' ')[2]}/{output.split(' ')[7]}'" }
# ^^^^ This will execute "docker exec minecraft-mc-1 rcon-cli list"
log = { ignore = ["RCON","villager"], parse = "f'the server says: {line}'" }LXC, VM, some service on host, etc...
-
Do not specify
container(which is ment for docker) -
If you want to see a custom command output, set
command.command.execis the disired command to run.command.parseis optional. it parses the command output using the given python code snippet. the variableoutputcontains the command output.- ex)
command = { exec = "date", parse = "f'The current date and time is: {output}'" }
-
You can fetch logs by setting
log- Set
log.commandto fetch logs. Use the-fflag if available. log.ignore = []is optional. It can be set to ignore lines containing the strings specified.log.parseis optional. It parses each line of log using the given python code snippet. The variablelinecontains one line of log.
- Set
# Example using journalctl and date
[tabs."System Journal"]
command = { exec = "date", parse = "f'The current date and time is: {output}'" }
log = { command = "journalctl -f", ignore = ["CRON","ACPI"], parse = "f'[System Journal] ==> {line}'" }