feat: add Dashboard tab with live GPU overview #5

Merged
Pakobbix merged 1 commits from feat/dashboard-tab into main 2026-09-02 14:57:54 +00:00
Collaborator

Adds a new Dashboard tab as the default/first tab (Dashboard → Curve → Performance → Fans) showing a full GPU overview.

What's new

Critical top row — Throttling (green "No" / amber with reason), GPU Voltage, Temperature (GPU + VRAM, live).

Live Monitor — all stats with sparklines: Core Clock, Mem Clock, Voltage, Power Draw, GPU Util, Mem Util, Fan Speed, P-State, VRAM Used.

GPU Information — static specs: Driver, VBIOS, CUDA Cores, CUDA Compute, ROP Count, VRAM Type, VRAM Total, Bus Width, CPU Accessible VRAM (BAR1), Resizable BAR, PCIe Link (live) + PCIe Max, Max Core/Mem Clock, Power Limit + Range, Temp Slowdown/Shutdown, Persistence Mode, Fans, Serial, Board Part No., UUID. Unavailable fields are omitted.

Backend

  • New hal/dashboard.py: one-shot static GPU info via NVML. ROP count and VRAM type are best-effort from a per-model table (NVML doesn't expose them).
  • New /api/dashboard endpoint.
  • MonitoringSample gains live throttle_reasons (+label), PCIe link width/generation (downclocks when idle → read per poll), and VRAM temp (from the MEMORY thermal sensor, if the GPU exposes it).

Frontend

  • New Dashboard component + useDashboard hook + DashboardInfo type + api.client.dashboard().

Also included

  • CORS restricted to localhost origins (end-anchored regex) — SPA is served same-origin.
  • _int_key_deltas now fails closed on a non-numeric profile key (no partial hardware writes).
  • Lint cleanup in server.py / monitoring.py.

Notes

  • Hotspot temp is not exposed by NVML (no such sensor/target), so it's omitted.
  • Verified end-to-end on an RTX 5090 (driver 610.x): all fields populate; PCIe link tracks load (Gen4 → Gen1/2 when idle).
Adds a new **Dashboard** tab as the default/first tab (Dashboard → Curve → Performance → Fans) showing a full GPU overview. ## What's new **Critical top row** — Throttling (green "No" / amber with reason), GPU Voltage, Temperature (GPU + VRAM, live). **Live Monitor** — all stats with sparklines: Core Clock, Mem Clock, Voltage, Power Draw, GPU Util, Mem Util, Fan Speed, P-State, VRAM Used. **GPU Information** — static specs: Driver, VBIOS, CUDA Cores, CUDA Compute, ROP Count, VRAM Type, VRAM Total, Bus Width, CPU Accessible VRAM (BAR1), Resizable BAR, PCIe Link (live) + PCIe Max, Max Core/Mem Clock, Power Limit + Range, Temp Slowdown/Shutdown, Persistence Mode, Fans, Serial, Board Part No., UUID. Unavailable fields are omitted. ## Backend - New `hal/dashboard.py`: one-shot static GPU info via NVML. ROP count and VRAM type are best-effort from a per-model table (NVML doesn't expose them). - New `/api/dashboard` endpoint. - `MonitoringSample` gains **live** `throttle_reasons` (+label), PCIe link width/generation (downclocks when idle → read per poll), and VRAM temp (from the MEMORY thermal sensor, if the GPU exposes it). ## Frontend - New `Dashboard` component + `useDashboard` hook + `DashboardInfo` type + `api.client.dashboard()`. ## Also included - CORS restricted to localhost origins (end-anchored regex) — SPA is served same-origin. - `_int_key_deltas` now fails closed on a non-numeric profile key (no partial hardware writes). - Lint cleanup in `server.py` / `monitoring.py`. ## Notes - Hotspot temp is not exposed by NVML (no such sensor/target), so it's omitted. - Verified end-to-end on an RTX 5090 (driver 610.x): all fields populate; PCIe link tracks load (Gen4 → Gen1/2 when idle).
ARIA added 1 commit 2026-09-02 14:57:01 +00:00
Add a new Dashboard tab as the default/first tab (Dashboard - Curve -
Performance - Fans) showing a full GPU overview.

Backend:
- New hal/dashboard.py: one-shot static GPU info via NVML (VBIOS, CUDA
  cores, compute capability, bus width, BAR1/CPU-accessible VRAM,
  Resizable BAR, PCIe max, max clocks, power limits, temp thresholds,
  persistence mode, fan count, serial, board part number, UUID).
  ROP count and VRAM type are best-effort from a per-model table since
  NVML does not expose them.
- New /api/dashboard endpoint.
- MonitoringSample gains live throttle_reasons (+label), PCIe link
  width/generation (downclocks when idle, so read per poll), and VRAM
  temp (from the MEMORY thermal sensor, if exposed).

Frontend:
- New Dashboard component: critical top row (throttling, voltage,
  GPU/VRAM temps), full live-monitor grid with sparklines, and a static
  GPU-information grid. Unavailable fields are omitted.
- useDashboard hook + DashboardInfo type + api.client dashboard().

Also: restrict CORS to localhost origins (end-anchored), make
_int_key_deltas fail closed on bad keys, and clean up lint blockers in
server.py/monitoring.py.
Collaborator

✅ No issues found — changes look consistent with the stated intent. Ready to be merged.

✅ No issues found — changes look consistent with the stated intent. Ready to be merged.
Pakobbix merged commit 0320cea895 into main 2026-09-02 14:57:54 +00:00
Sign in to join this conversation.