5.5 KiB
CM Dashboard
CM Dashboard is a Rust-powered terminal UI for real-time monitoring of CMTEC infrastructure hosts. It aggregates SMART, service, and backup metrics from the existing CMTEC APIs and presents them in an efficient, keyboard-driven interface built with ratatui.
┌──────────────────────────────────────────────────────────────────────────────┐
│ CM Dashboard │
├────────────────────────────┬────────────────────────────┬────────────────────┤
│ NVMe Health │ Services │ Memory Optimization │
│ Host: srv01 │ Host: srv01 │ Host: srv01 │
│ Status: Healthy │ Services healthy: 5 │ Memory used: 2048 / │
│ Drives healthy/warn/crit: │ Degraded: 1 Failed: 0 │ 4096 MiB (50.0%) │
│ 4/0/0 │ CPU top service: 71.3% │ Last update: 12:34: │
│ Capacity used: 512.0 / │ Total memory: 1536 / 2048 │ 56 │
│ 2048.0 GiB │ MiB │ │
├────────────────────────────┴────────────┬───────────────┴────────────────────┤
│ Backups │ Alerts │
│ Host: srv01 │ srv01: OK │
│ Status: Healthy │ labbox: smart warning │
│ Last success: 2024-02-01 03:12:45 │ │
│ Snapshots: 17 • Size: 512.0 GiB │ │
│ Pending jobs: 0 (enabled: true) │ │
└──────────────────────────────┬───────────────────────────────────────────────┘
│ Status │ │
│ Active host: srv01 (1/3) │ History retention ≈ 3600s │
│ Config: config/dashboard.toml│ Default host: labbox │
└──────────────────────────────┴───────────────────────────────────────────────┘
Requirements
- Rust toolchain 1.75+ (install via
rustup) - Access to CMTEC monitoring APIs on ports 6127, 6128, and 6129 from the machine running the dashboard
- Configuration files under
config/describing hosts and dashboard preferences
Installation
Clone the repository and build with Cargo:
git clone https://github.com/cmtec/cm-dashboard.git
cd cm-dashboard
cargo build --release
The optimized binary is available at target/release/cm-dashboard. To install into your Cargo bin directory:
cargo install --path .
Configuration
On first launch, the dashboard will create config/dashboard.toml and config/hosts.toml automatically if they do not exist.
You can also generate starter configuration files manually with the built-in helper:
cargo run -- init-config
# or, once installed
cm-dashboard init-config --dir ./config --force
This produces config/dashboard.toml and config/hosts.toml. The primary dashboard config looks like:
[hosts]
default_host = "srv01"
[[hosts.hosts]]
name = "srv01"
enabled = true
[[hosts.hosts]]
name = "labbox"
enabled = true
[dashboard]
tick_rate_ms = 250
history_duration_minutes = 60
[[dashboard.widgets]]
id = "nvme"
enabled = true
[[dashboard.widgets]]
id = "alerts"
enabled = true
[data_source]
kind = "zmq"
[data_source.zmq]
endpoints = ["tcp://127.0.0.1:6130"]
Adjust the host list and data_source.zmq.endpoints to match your CMTEC gossip network. If you prefer to manage hosts separately, edit the generated hosts.toml file.
Features
- Rotating host selection with left/right arrows (
←,→,h,l,Tab) - Live NVMe, service, memory, backup, and alert summaries per active host
- Structured logging with
tracing(-v/-vvto increase verbosity) - Help overlay (
?) outlining keyboard shortcuts - Config-driven host discovery via
config/dashboard.toml
Getting Started
cargo run -- --config config/dashboard.toml
# specify a single host
cargo run -- --host srv01
# override ZMQ endpoints at runtime
cargo run -- --zmq-endpoint tcp://srv01:6130,tcp://labbox:6130
# increase logging verbosity
cargo run -- -v
Keyboard Shortcuts
| Key | Action |
|---|---|
← / h |
Previous host |
→ / l / Tab |
Next host |
? |
Toggle help overlay |
r |
Update status message |
q / Esc |
Quit |
Development
- Format:
cargo fmt - Check:
cargo check - Run:
cargo run
The dashboard subscribes to the CMTEC ZMQ gossip network (default tcp://127.0.0.1:6130). Received metrics are cached per host and retained in an in-memory ring buffer for future trend analysis.