server-monitor-dash/README.md
2026-07-21 02:11:49 +02:00

3.8 KiB

server-monitor-dash

A case-mounted touchscreen monitoring dashboard for self-hosted AI/inference servers, built with Textual. CPU, GPU, and memory telemetry rendered "supercar dash" style — dense, glanceable, colour thresholded — rather than a plain systems-monitoring readout.

Runs directly under a TTY autologin session. No X, no display server, and no GPU vendor lock-in for the interface itself (though GPU telemetry currently assumes nvidia-smi — see Status below).


Why

Most server monitoring tools are built for a terminal you're SSH'd into, not a small screen physically mounted in a case that someone actually looks at. This project is the opposite bet: build something that's genuinely nice to glance at from across a room, on a 5" panel, on hardware that's otherwise running unattended.

Features

  • Live telemetry: per-core CPU utilization, memory usage, GPU temperature/utilization/power/fan speed
  • Threshold-driven colour (green → amber → red) on key gauges, rather than flat, undifferentiated numbers
  • Rolling history sparkline for GPU temperature trend
  • Idle-blank behaviour: screen goes solid black after 15 minutes with no touch/key input, to protect the physical panel from always-on burn-in over years of continuous operation — any input wakes it immediately
  • Tabbed layout: Dashboard (functional), Request Assistance and Switch to X (stubs — see Roadmap)

Requirements

  • Python 3.9+
  • Textual (pip install textual --break-system-packages, or via pipx)
  • nvidia-smi on PATH for GPU telemetry (CPU/memory panels work without it — GPU panel degrades gracefully to zero rather than crashing if nvidia-smi is unavailable or fails)

Running

python3 server_dash.py

Intended to run under a dedicated, unprivileged monitoring user's autologin TTY session — not as root, and not as the account used for anything else on the box.

Status

This is an early, working prototype — the CPU/memory/GPU telemetry panel is functional and tested; the two additional tabs are placeholders, not yet implemented:

Tab Status
Dashboard Working — live CPU/mem/GPU telemetry
Request Assistance Stub — will send a scripted notification email
Switch to X Stub — will invoke a narrowly-scoped, sudoers-gated VT switch to a separate login, for on-demand GPU tuning access via a real X session

Not yet fully compliant with CE OS script conventions (no test gates, no cleanup trap) — this is explicitly a prototype for iterating the interface design, not a hardened production deployment. See the script's own header comment for current detail.

Design notes

  • GPU vendor: currently NVIDIA-only via nvidia-smi. AMD/Intel GPU support would need an equivalent backend behind the same read_gpu_stats() interface — contributions welcome.
  • Colour thresholds (TEMP_THRESHOLDS, UTIL_THRESHOLDS in-script) are currently fixed defaults, not yet configurable per-deployment. Worth externalizing to a config file if this is deployed across multiple machines with different thermal profiles.
  • No hard dependency on a specific display size — built for a 5" case-mounted touchscreen, but Textual's layout should adapt reasonably to other terminal sizes; untested on anything else so far.

Roadmap

  • Wire up Request Assistance (scripted outbound email, hostname in body)
  • Wire up Switch to X (sudoers-scoped chvt wrapper, see script comment)
  • Externalize colour thresholds to a config file
  • Bring up to full CE OS script compliance (test gates, cleanup trap)
  • Consider a non-NVIDIA GPU backend

License

See LICENSE.


Built standing on the shoulders of billions of dwarves. Created by John A. Hoeven with the ethical assistance of Claude AI.