Files
peardata/docs/DASHBOARD.md
T
Raven Scott c541c27ad8
CI / test (push) Successful in 1m17s
Release rolling / release (push) Successful in 8m15s
Prune work
2026-07-30 12:38:17 -04:00

171 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Master metrics dashboard (Charts tab)
Product plan for turning the Charts tab into a full host/fleet metrics wall:
sectioned TOC, every collected chart, synchronized time, and investigation controls.
Related: [ROADMAP.md](./ROADMAP.md) Phase 6 · [DESKTOP.md](./DESKTOP.md) · [DATA-MODEL.md](./DATA-MODEL.md) · **[User guide](../user-guide/README.md)** (operator walkthroughs)
---
## Current state
| Surface | Today |
|---------|--------|
| Overview | Compact 6-panel live grid + KPIs (auto-scaled RAM/net units); sparks + KPIs sync from history seed |
| Charts | Sectioned metrics wall (TOC + cards), shared time bar, multi-dim series |
| Processes | Live `/proc` table, KPIs, tree, detail drawer, CSV ([user-guide/processes.md](../user-guide/processes.md)) |
| Containers | Docker/cgroup cards use **human names** (e.g. `dozzle · CPU`); ids stay `docker.cpu.<shortId>` |
| Time | Charts presets (1m6h) + play/pause; UI thin-history advisory; agent retention via Settings → Data |
| Dimensions | Legend chips show/hide; chart type cycle (line/area/stacked/bar/pie) |
| Alerts → chart | Charts wall scroll-to-card + pause near event |
Backend `listCharts` / `queryData` / live subscribe power the wall over HyperDHT RPC.
---
## Guiding UX principles
1. **Algorithmic coverage** — every chart the agent emits appears automatically.
2. **Taxonomy over dump** — sections → families → charts ordered by priority/context.
3. **One shared time window** — play/pause + presets apply to the whole wall.
4. **Visible-first** — lazy query / paint only cards in (or near) the viewport.
5. **Multi-dimension first** — legends show/hide series; stacked when chart type says so.
6. **P2P desktop** — data via RPC (`listCharts` / `queryData` / subscribe), not REST.
Do not name third-party products in code, commits, or user-facing copy.
---
## Phase 6 checklist
### P0 — Foundation
- [x] Roadmap + this doc
- [x] Long-scroll **metrics wall** (not one-chart-at-a-time)
- [x] **Section TOC** (rail) with jump-to-section + search
- [x] Charts ordered by **taxonomy section** + catalog priority/context
- [x] **Global time bar**: play/pause, presets (1m / 5m / 15m / 1h / 6h)
- [x] Per-card: title, units, loading/error/empty, multi-dim legend
- [x] Lazy-load history for **visible** cards; live push into watched set
- [x] Query uses `after` / `points` from the shared window
- [x] Synced hover crosshair across visible cards (basic)
- [x] Alert click → Charts wall + scroll-to-card
### P1 — Interaction parity
- [x] Pan / zoom / reset on a card (updates shared window)
- [x] Synced crosshair / shared hover time across visible cards
- [x] Dimension show/hide + sort by name / latest value
- [x] Chart type switch (line / area / stacked / bar / multibar / pie) — catalog default + sensible cycle
- [x] Resize card height; persist prefs
- [x] Section overview KPI strip (latest values) above detail charts
### P2 — Filters & fleet scope
- [x] Search by id **or** title / context / family / plugin
- [x] Host/agent chip reseed on active peer switch
- [x] Optional group aggregation UI (`average` / `min` / `max` / `sum`)
- [x] Tier / resolution hint when HyperDB warm is used (card status)
### P3 — Investigation
- [x] Expand card: stats table (min/avg/max), dim table (click title)
- [x] Alert click → Charts wall, scroll to chart, pause near event time
- [x] Related metrics panel (context/family + Pearson — separate from MC)
- [x] Metric Correlations (highlight brush → `volume`/`ks2`/`anomaly-rate`/`value` → filtered wall)
- [x] Anomaly tint / threshold line on wall cards
- [x] Alert → Correlate around event timestamp
### P4 — Shell & persistence
- [x] Persist collapsed sections, card heights, dim sort, chart types
- [x] Persist pinned charts
- [x] Board mode (pinned-only wall reusing the same cards)
- [x] Wallboard / force-play mode
- [x] Stale-while-revalidate paint (no refetch flicker)
- [x] Retention-aware time presets (advisory `thin-history` hint; presets stay selectable)
- [x] Live / Paused / Force indicator on Charts toolbar
- [x] Dedicated Fleet tab (multi-host cards, set active / reconnect)
### P5 — Authoring model
- [x] Versioned `shared/taxonomy.js` (contexts → sections)
- [x] EXTENDING.md documents taxonomy placement for new charts
- [x] Taxonomy coverage test (`test/taxonomy-coverage.test.js`)
### Also shipped
- [x] Weights / MC engine via `getWeights` RPC + `/api/v1|v2|v3/weights` (`server/services/weights.js`)
- [x] Related ranking boosted by alert weights when no MC window
- [x] Drag-reorder pinned charts
- [x] Keyboard shortcuts on Charts (`Space` play, `15` presets, `/` search, `f` force, `b` board, `c` correlate, `r` reset, `Esc` clear)
- [x] Fullscreen chart focus (Charts wall + Overview) — double-click / ⛶, `Esc` / `←` `→`
---
## Taxonomy sections (v1)
| Section | Match (chart id / context / plugin prefixes) |
|---------|-----------------------------------------------|
| System | `system.*`, `cpu.*`, `mem.*`, `disk_*`, `net.*`, `ip.*`, `ipv*`, `system.*pressure*` |
| Containers | `docker.*`, `cgroup.*`, `peardock.*` — titles/families from Docker socket names ([user-guide/containers.md](../user-guide/containers.md)) |
| Storage | `zfs.*`, `bcache.*`, `dmcache.*`, `md.*`, `smart.*`, `fs.*` |
| Hardware | `sensors.*`, `gpu.*`, `ipmi.*`, `power*` |
| Applications | `nginx.*`, `apache.*`, `redis.*`, `mysql.*`, `postgres.*`, `memcached.*`, `mongodb.*`, `rabbitmq.*`, `kafka.*`, `nats.*`, `unbound.*` |
| Network services | `sockets.*`, conntrack / softnet deep charts |
| Observability | `ebpf.*`, `statsd.*`, `prometheus.*`, `peardata.*`, self-monitor |
| Fleet | `fleet.*`, parent aggregates |
| Other | unmatched |
---
## File map (implementation)
| Path | Role |
|------|------|
| `shared/taxonomy.js` | Section defs + `groupCatalog()` |
| `shared/related-metrics.js` | Related-chart ranking (taxonomy + Pearson) |
| `server/services/weights.js` | Metric Correlations scoring (ks2 / volume / AR / value) |
| `ui/dashboard.js` | Metrics wall controller + Correlate mode |
| `ui/chart-focus.js` | Fullscreen chart overlay (shared) |
| `ui/charts.js` | Canvas paint + hover helpers |
| `ui/data-manager.js` | Settings → Data (retention / prune / usage) |
| `ui/logs.js` | System Log tab (journal default) |
| `shared/container-names.js` | Docker/cgroup display names + card subtitles |
| `shared/format.js` | KPI unit scaling (MiB, kb/s, …) |
| `index.html` | Charts / Logs / Settings shells |
| `ui/styles.css` | Metrics shell layout |
| `app.js` | Wire catalog / samples / view switch |
---
## Exit criteria (P0) — met
1. Charts tab shows **all** catalog charts in collapsible sections.
2. TOC jumps scroll the wall; search filters TOC + wall.
3. Play/pause + time preset change refetch visible cards.
4. Multi-dimension charts draw every series (not a single scalar).
5. Overview remains the compact home grid.
## Desktop polish (post Phase 6)
- Full-width metrics grid (`auto-fit`), single wall scrollbar, capped related panel
- Series fill plot width (X domain on series length); light X time ticks
- Legacy single-chart detail panel removed; dblclick expands stats + related
- Hover pad shared with Y-axis; hero-aware resize; hover paint batched via rAF
- Fleet cards show CPU/RAM chips when available; empty → Connect CTA
- Charts **Filters** menu (TOC / search / group / sort collapsed by default)
- **Logs** tab: journal (default) / anomaly / audit stream, Follow, search highlight
- **Settings → Data**: agent Data Manager (3m warm + 1 GiB budget default, auto-prune + GC, usage)
- Container cards: human names via Docker socket; subtitle hides bare hashes
## Metric Correlations vs Related
| | **Correlate** | **Related (⇢)** |
|--|---------------|-----------------|
| Goal | Find metrics that **changed** vs a baseline around a highlight | Find charts **related** to a seed chart |
| Engine | Server `weights.js` (`volume` / `ks2` / …) | Client taxonomy + Pearson |
| UX | Toolbar Correlate → brush ≥15s → Find Correlations → filtered wall | Per-card ⇢ / dblclick → related panel |
Full operator docs: [metric-correlations.md](../user-guide/metric-correlations.md) · [related-metrics.md](../user-guide/related-metrics.md) · [weights-api.md](../user-guide/weights-api.md) · [logs.md](../user-guide/logs.md) · [charts.md](../user-guide/charts.md) (Filters menu).