Refactor services widget with unified system metrics display

- Rename alerts widget to hosts widget for clarity
- Add sub_service field to ServiceInfo for display differentiation
- Integrate system metrics (CPU load, memory, temperature, disk) as service rows
- Convert nginx sites to individual sub-service rows with tree structure
- Remove nginx site checkmarks - status now shown via row indicators
- Update dashboard layout to display system and service data together
- Maintain description lines for connection counts and service details

Services widget now shows:
- System metrics as regular service rows with status
- Nginx sites as sub-services with ├─/└─ tree formatting
- Regular services with full resource data and descriptions
- Unified status indication across all row types
This commit is contained in:
2025-10-13 08:10:38 +02:00
parent c68ccf023e
commit bab387c74d
7 changed files with 419 additions and 89 deletions

104
README.md
View File

@@ -3,28 +3,39 @@
A high-performance Rust-based TUI dashboard for monitoring CMTEC infrastructure. Built to replace Glance with a custom solution tailored for specific monitoring needs and API integrations. Features real-time monitoring of all infrastructure components with intelligent email notifications and automatic status calculation.
```
┌─────────────────────────────────────────────────────────────────────┐
│ CM Dashboard • cmbox │
├─────────────────────────────────────────────────────────────────────┤
│ Storage • ok:1 warn:0 crit:0 │ Services • ok:1 warn:0 fail:0
┌─────────────────────────────────┐ │ ┌─────────────────────────────── │
│ │Drive Temp Wear Spare Hours │ │ │Service memory: 7.1/23899.7 MiB│
nvme0n1 28°C 1% 100% 14489 │ │ │Disk usage:
Capacity Usage │ │ │ Service Memory Disk
954G 77G (8%) │ │ │✔ sshd 7.1 MiB —
└─────────────────────────────────┘ │ └─────────────────────────────── │
─────────────────────────────────────────────────────────────────────┤
CPU / Memory • warn │ Backups
│ System memory: 5251.7/23899.7 MiB │ Host cmbox awaiting backup │
CPU load (1/5/15): 2.18 2.66 2.56 │ metrics
CPU freq: 1100.1 MHz │
CPU temp: 47.0°C
├─────────────────────────────────────────────────────────────────────┤
│ Alerts • ok:0 warn:3 fail:0 │ Status • ZMQ connected
│ cmbox: warning: CPU load 2.18 │ Monitoring • hosts: 3
srv01: pending: awaiting metrics │ Data source: ZMQ connected │
│ labbox: pending: awaiting metrics │ Active host: cmbox (1/3)
└─────────────────────────────────────────────────────────────────────┘
CM Dashboard • srv01
┌System───────────────────────────────────────────────────────┐┌Services────────────────────────────────────────────────────┐
│ Memory usage ││ Service Memory (GB) CPU Disk │
│✔ 3.0 / 7.8 GB │✔ Service Memory 7.1/23899.7 MiB —
CPU load CPU temp ││✔ Disk Usage — — 45/100 GB
│✔ 1.05 • 0.96 • 0.58 64.0°C ││⚠ CPU Load — 2.18 —
C1E C3 C6 C8 C9 C10 ││✔ CPU Temperature — 47.0°C — │
✔ 0.5% 0.5% 10.4% 10.2% 0.4% 77.9% ││✔ docker-registry 0.0 GB 0.0% <1 MB
GPU load GPU temp ││✔ gitea 0.4/4.1 GB 0.2% 970 MB
└─────────────────────────────────────────────────────────────┘│ 1 active connections
┌Storage──────────────────────────────────────────────────────┐│✔ nginx 0.0/1.0 GB 0.0% <1 MB │
Drive Temp Wear Spare Hours Capacity Usage ││✔ ├─ docker.cmtec.se
│✔ nvme0n1 57°C 4% 100% 11463 932G 23G (2%) ││✔ ├─ git.cmtec.se
││✔ ├─ gitea.cmtec.se
││✔ ├─ haasp.cmtec.se
││✔ ├─ pages.cmtec.se
│ ││✔ ├─ photos.cmtec.se │
└─────────────────────────────────────────────────────────────┘│✔ └─ www.kryddorten.se
┌Backups──────────────────────────────────────────────────────┐│✔ postgresql 0.1 GB 0.0% 378 MB
Backup Status Details ││ 1 active connections
│✔ Latest 3h ago 1.4 GiB ││✔ redis-immich 0.0 GB 0.4% <1 MB
│ 8 archives, 2.4 GiB total ││✔ sshd 0.0 GB 0.0% <1 MB │
│✔ Disk ok 2.4/468 GB (1%) ││ 1 SSH connection │
│ ││✔ unifi 0.9/2.0 GB 0.4% 391 MB │
│ ││ │
└─────────────────────────────────────────────────────────────┘└────────────────────────────────────────────────────────────┘
┌Hosts────────────────────────────────────────────────────────┐
│ Host Status Timestamp │
│✔ cmbox ok 2025-10-13 05:45:28 │
│✔ srv01 ok 2025-10-13 05:45:28 │
│? labbox No data received — │
│ │
└─────────────────────────────────────────────────────────────┘
Keys: [←→] hosts [r]efresh [q]uit
```
@@ -176,6 +187,46 @@ sudo cm-dashboard-agent \
--interval 5000
```
## Widget Layout
### Services Widget Structure
The Services widget now displays both system metrics and services in a unified table:
```
┌Services────────────────────────────────────────────────────┐
│ Service Memory (GB) CPU Disk │
│✔ Service Memory 7.1/23899.7 MiB — │ ← System metric as service row
│✔ Disk Usage — — 45/100 GB │ ← System metric as service row
│⚠ CPU Load — 2.18 — │ ← System metric as service row
│✔ CPU Temperature — 47.0°C — │ ← System metric as service row
│✔ docker-registry 0.0 GB 0.0% <1 MB │ ← Regular service
│✔ nginx 0.0/1.0 GB 0.0% <1 MB │ ← Regular service
│✔ ├─ docker.cmtec.se │ ← Nginx site (sub-service)
│✔ ├─ git.cmtec.se │ ← Nginx site (sub-service)
│✔ └─ gitea.cmtec.se │ ← Nginx site (sub-service)
│✔ sshd 0.0 GB 0.0% <1 MB │ ← Regular service
│ 1 SSH connection │ ← Service description
└────────────────────────────────────────────────────────────┘
```
**Row Types:**
- **System Metrics**: CPU Load, Service Memory, Disk Usage, CPU Temperature with status indicators
- **Regular Services**: Full resource data (memory, CPU, disk) with optional description lines
- **Sub-services**: Nginx sites with tree structure, status indicators only (no resource columns)
- **Description Lines**: Connection counts and service-specific info without status indicators
### Hosts Widget (formerly Alerts)
The Hosts widget provides a summary view of all monitored hosts:
```
┌Hosts────────────────────────────────────────────────────────┐
│ Host Status Timestamp │
│✔ cmbox ok 2025-10-13 05:45:28 │
│✔ srv01 ok 2025-10-13 05:45:28 │
│? labbox No data received — │
└─────────────────────────────────────────────────────────────┘
```
## Monitoring Components
### System Collector
@@ -185,9 +236,12 @@ sudo cm-dashboard-agent \
- **C-States**: Power management state distribution (C0-C10)
### Service Collector
- **Systemd Services**: Auto-discovery of interesting services
- **Resource Usage**: Per-service memory and disk consumption
- **Service Health**: Running/stopped status with detailed failure info
- **System Metrics as Services**: CPU Load, Service Memory, Disk Usage, CPU Temperature displayed as individual service rows
- **Systemd Services**: Auto-discovery of interesting services with resource monitoring
- **Nginx Site Monitoring**: Individual rows for each nginx virtual host with tree structure (`├─` and `└─`)
- **Resource Usage**: Per-service memory, CPU, and disk consumption
- **Service Health**: Running/stopped/degraded status with detailed failure info
- **Connection Tracking**: SSH connections, database connections as description lines
### SMART Collector
- **NVMe Health**: Temperature, wear leveling, spare blocks