virsh guestinfo calls (one per VM) took ~4s on cold cache, exceeding
the dashboard's 3s fetch timeout. Disk stats now refresh in a background
thread and return stale/empty data immediately. Also raised dashboard
fetch timeout to 8s for cold-cache dominfo calls.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Don't fall back to allocated RAM for memory_total_mb when there's no
guest-side data. Keeps both used and total at 0 so the frontend shows
just the allocated amount instead of "0 MB / 16.0 GB".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Windows VMs only report balloon current/max/rss, not available/unused.
Previously this fell through to RSS which showed ~100% usage.
Now VMs without balloon.available show allocated RAM without a usage bar.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Query each running VM's filesystem stats through the guest agent.
Show root filesystem used/total GB with color-coded bar in VM table.
Cached at 30s TTL since disk usage changes slowly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Parse domstats --cpu-total --balloon for all VMs in a single call.
Track CPU time deltas between samples to compute per-VM CPU %.
Compute guest memory usage from balloon stats (available - unused).
Split VM caching: base info (dominfo) 30s TTL, live stats 5s TTL.
UI shows CPU % column (color-coded) and memory used/total with bars.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rearchitect to pure aggregator dashboard (no /proc) with bare agents
on each host. Agents report VM data via sudo virsh (cached 10s).
UI rewritten with hash-based routing: summary card grid and per-server
detail view with CPU grid, memory, load, uptime, and VM table.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Single Flask codebase runs in agent mode (serves /api/stats from local
/proc) or dashboard mode (aggregates local + remote agents). Currently
monitors compute1 (64-core, podman container) and console (16-core,
bare systemd service).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>