Updates
This commit is contained in:
+29
-20
@@ -51,38 +51,46 @@ Do not name third-party products in code, commits, or user-facing copy.
|
||||
|
||||
### P1 — Interaction parity
|
||||
|
||||
- [ ] Pan / zoom / reset on a card (updates shared window)
|
||||
- [ ] Synced crosshair / shared hover time across visible cards
|
||||
- [ ] Dimension show/hide + sort by name / latest value
|
||||
- [ ] Chart type switch (line / area / stacked) where units allow
|
||||
- [ ] Resize card height; persist prefs
|
||||
- [ ] Section overview KPI strip (latest values) above detail charts
|
||||
- [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) where units allow
|
||||
- [x] Resize card height; persist prefs
|
||||
- [x] Section overview KPI strip (latest values) above detail charts
|
||||
|
||||
### P2 — Filters & fleet scope
|
||||
|
||||
- [ ] Search by id **or** title / context / family / plugin
|
||||
- [ ] Host/agent chip reseed on active peer switch
|
||||
- [ ] Optional group aggregation UI (`average` / `min` / `max` / `sum`)
|
||||
- [ ] Tier / resolution hint when HyperDB warm is used
|
||||
- [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
|
||||
|
||||
- [ ] Expand card: stats table (min/avg/max), dim table
|
||||
- [ ] Alert click → Charts wall, scroll to chart, pause at event time
|
||||
- [ ] Highlight window for “related metrics” (uses `/weights` when ready)
|
||||
- [ ] Anomaly tint / threshold line on wall cards
|
||||
- [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 + series correlation)
|
||||
- [x] Anomaly tint / threshold line on wall cards
|
||||
|
||||
### P4 — Shell & persistence
|
||||
|
||||
- [ ] Persist pinned charts, collapsed sections, card heights
|
||||
- [ ] Custom board view reusing the same card component (later)
|
||||
- [ ] Wallboard / force-play mode (later)
|
||||
- [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
|
||||
|
||||
### P5 — Authoring model
|
||||
|
||||
- [ ] Versioned `shared/taxonomy.js` (contexts → sections)
|
||||
- [ ] New collectors register context + priority used by TOC
|
||||
- [ ] Optional CI check: new contexts appear in taxonomy or “Other”
|
||||
- [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] Per-chart weights via `getWeights` RPC + `/api/v1|v2|v3/weights`
|
||||
- [x] Related ranking boosted by anomaly weights
|
||||
- [x] Drag-reorder pinned charts
|
||||
- [x] Keyboard shortcuts on Charts (`Space` play, `1–5` presets, `/` search, `f` force, `b` board, `r` reset, `Esc` clear related)
|
||||
|
||||
---
|
||||
|
||||
@@ -107,6 +115,7 @@ Do not name third-party products in code, commits, or user-facing copy.
|
||||
| Path | Role |
|
||||
|------|------|
|
||||
| `shared/taxonomy.js` | Section defs + `groupCatalog()` |
|
||||
| `shared/related-metrics.js` | Related-chart ranking |
|
||||
| `ui/dashboard.js` | Metrics wall controller |
|
||||
| `ui/charts.js` | Canvas paint + hover helpers |
|
||||
| `index.html` | Charts view shell (TOC + wall + time bar) |
|
||||
|
||||
@@ -152,6 +152,7 @@ Aggregate: any CRITICAL → `critical`; else any WARNING → `degraded`; else `o
|
||||
|---------|-----|------|
|
||||
| Charts | `listCharts` | `GET /api/v1/charts` |
|
||||
| Data | `queryData` | `GET /api/v3/data` |
|
||||
| Weights | `getWeights` | `GET /api/v3/weights` |
|
||||
| Contexts | `listContexts` | `GET /api/v3/contexts` |
|
||||
| Nodes | `getNodeInfo` | `GET /api/v3/nodes` |
|
||||
| Alerts | `listAlerts` | `GET /api/v3/alerts` |
|
||||
|
||||
+30
-7
@@ -132,26 +132,49 @@ Override home with `PEARDATA_HOME` if you need isolation (CI, multi-profile).
|
||||
|
||||
| Module | Responsibility |
|
||||
|--------|----------------|
|
||||
| `client/paths.js` | Unified `~/.config/peardata` home |
|
||||
| `client/jsonCache.js` | Atomic JSON writes + LS mirror |
|
||||
| `client/settings.js` | UI prefs → `cache/settings.json` |
|
||||
| `client/peerCache.js` | Multi-host roster + last-active |
|
||||
| `client/bookmarks.js` | Compat shim over peerCache |
|
||||
| `client/identity.js` | Load/create keypair on disk |
|
||||
| `client/connection.js` | Single HyperDHT + protomux-rpc session |
|
||||
| `client/manager.js` | Multi-peer map, active selection, reconnect |
|
||||
| `client/errors.js` | Unwrap / normalize RPC errors for UI |
|
||||
| `app.js` | Wire DOM to manager + protocol methods |
|
||||
|
||||
## Persistence (PearDock-style)
|
||||
|
||||
| Store | Path |
|
||||
|-------|------|
|
||||
| Settings | `~/.config/peardata/cache/settings.json` (+ `localStorage` `peardata.settings.v1` FOUC) |
|
||||
| Peers / last-active | `~/.config/peardata/cache/peers.json` |
|
||||
| Identity | `~/.config/peardata/identity.json` |
|
||||
|
||||
Override root with `PEARDATA_HOME`. Writes are atomic (`tmp` → rename, mode `0600`). Legacy `bookmarks.json` / `ui-settings.json` migrate on first load.
|
||||
|
||||
### Multi-agent
|
||||
|
||||
- Many peers can be dialed at once; **one active** owns Overview / Charts RPC.
|
||||
- Boot restores saved peers in parallel (`skipActivate`), then prefers last-active.
|
||||
- Reconnect never steals the active host unless that host was active.
|
||||
- Agents view + fleet strip: set active / connect / forget.
|
||||
- Settings → Connections: auto-restore toggle, reconnect budget, forget-all.
|
||||
|
||||
### Manager reconnect
|
||||
|
||||
- Default max tries: `PEARDATA_MAX_RECONNECT` or **20**
|
||||
- `connect(input, { adminSeed, autoReconnect })`
|
||||
- Default max tries: settings `reconnectMaxAttempts` or `PEARDATA_MAX_RECONNECT` / **20**
|
||||
- `connect(input, { adminSeed, autoReconnect, skipActivate })`
|
||||
- Input may be **64-hex public key** or **`pd1.` invite**
|
||||
|
||||
## LocalStorage keys (demo UI)
|
||||
## LocalStorage mirrors
|
||||
|
||||
| Key | Purpose |
|
||||
|-----|---------|
|
||||
| `peardata:last-connect` | Last public key / invite string |
|
||||
| `peardata:display-name` | Last display name |
|
||||
|
||||
These are demo convenience only — production apps often prefer a file under app storage.
|
||||
| `peardata.settings.v1` | Flat settings FOUC + offline mirror |
|
||||
| `peardata-ui-boot` | Theme-only early paint |
|
||||
| `peardata_active_peer_id` | Last active peer mirror |
|
||||
| `peardata.cache.peers` | Peers envelope mirror |
|
||||
|
||||
## Development tips
|
||||
|
||||
|
||||
+5
-2
@@ -5,8 +5,11 @@
|
||||
1. Define the chart in `shared/metrics.js` (`STATIC_CHART_DEFS`, or `registerChart()` for instances).
|
||||
2. Emit samples from `server/services/collector.js` (or a new collector module).
|
||||
3. Store + REST/RPC pick it up automatically via `getAllChartDefs()` / `CHART_BY_ID`.
|
||||
4. Document dimensions in [DATA-MODEL.md](./DATA-MODEL.md).
|
||||
5. Optionally add a canvas panel in `index.html` + `app.js`.
|
||||
4. Ensure the chart lands in the Charts wall TOC via `shared/taxonomy.js` (`sectionForChart` matchers). Prefer a real section over **Other**.
|
||||
5. Document dimensions in [DATA-MODEL.md](./DATA-MODEL.md).
|
||||
6. The desktop Charts tab picks it up automatically (no per-chart HTML). Overview spotlight is optional.
|
||||
|
||||
Coverage is asserted by `test/taxonomy-coverage.test.js`.
|
||||
|
||||
## Add an RPC method
|
||||
|
||||
|
||||
+2
-2
@@ -103,7 +103,7 @@ Single-agent returns one node. With `PEARDATA_PARENT=1`, `/nodes` and `/fleet` i
|
||||
| Method | Path | Notes |
|
||||
|--------|------|-------|
|
||||
| GET | `/api/v3/q?q=` | Full-text over chart ids/titles |
|
||||
| GET | `/api/v3/weights` | MVP: health-derived scores |
|
||||
| GET | `/api/v3/weights` | Per-chart anomaly weights (`?chart=&limit=`) |
|
||||
|
||||
### Alerts
|
||||
|
||||
@@ -145,7 +145,7 @@ Single-agent returns one node. With `PEARDATA_PARENT=1`, `/nodes` and `/fleet` i
|
||||
|
||||
| Area | PearData |
|
||||
|------|----------|
|
||||
| ML weights / metric correlations | Simplified health weights |
|
||||
| ML weights / metric correlations | Per-chart anomaly weights; desktop related uses corr + weights |
|
||||
| Multi-node parent streaming | Single node; parent planned |
|
||||
| Cloud POST spaces APIs | Not implemented (agent GET style only) |
|
||||
| App/plugin charts (nginx, DB, …) | System/OS charts; plugins later |
|
||||
|
||||
+15
-8
@@ -92,7 +92,7 @@ Template rebrand, protocol, collector, memory store, anomalies, REST, desktop MV
|
||||
| Anomaly scoring + UI highlight | Done (score + panel tint + threshold line) |
|
||||
| Notifications | Done (desktop + `PEARDATA_WEBHOOK_URL`) |
|
||||
| Streaming z-score / retrain job | Done (`PEARDATA_ANOMALY_MODE`, job `retrainAnomaly`) |
|
||||
| `/api/v3/weights` depth | Real metric weights |
|
||||
| `/api/v3/weights` depth | Done (per-chart anomaly weights + `getWeights` RPC) |
|
||||
|
||||
---
|
||||
|
||||
@@ -100,6 +100,7 @@ Template rebrand, protocol, collector, memory store, anomalies, REST, desktop MV
|
||||
|
||||
| Item | Notes |
|
||||
|------|--------|
|
||||
| Desktop persistence + multi-agent | Done — PearDock-style `cache/settings.json` + `cache/peers.json`, boot restore, last-active switch (`docs/DESKTOP.md`) |
|
||||
| Signed / notarized macOS clients | Beyond ad-hoc `rcodesign` |
|
||||
| Role templates | viewer / SRE / admin presets |
|
||||
| Plugin SDK | Collector + chart registration API |
|
||||
@@ -122,10 +123,16 @@ shared time, multi-dim cards, investigation). Detail checklist:
|
||||
| Global time bar (play/pause, presets) | Done |
|
||||
| Multi-dimension live + history cards | Done |
|
||||
| Lazy visible-card query / paint | Done |
|
||||
| Dim show/hide chips + basic synced hover | Done (P0) |
|
||||
| Pan/zoom / shared window from gestures | Planned (P1) |
|
||||
| Alert → scroll-to-chart | Done (pause-at-event TBD P3) |
|
||||
| Persist layout prefs / pinned charts | Planned (P4) |
|
||||
| Dim show/hide chips + basic synced hover | Done |
|
||||
| Pan/zoom/reset + shared window from gestures | Done (P1) |
|
||||
| Section KPIs, chart type, dim sort, resize | Done (P1) |
|
||||
| Alert → scroll-to-chart + pause near event | Done |
|
||||
| Persist metrics layout prefs + pins | Done |
|
||||
| Group aggregation + force-play + related | Done |
|
||||
| Board mode (pinned-only wall) | Done |
|
||||
| Drag-reorder pins + keyboard shortcuts | Done |
|
||||
| Taxonomy coverage test + EXTENDING note | Done |
|
||||
| Multi-named custom boards | Later |
|
||||
|
||||
**Phase 6 exit (P0)** — Charts tab lists every agent chart in sections; shared
|
||||
time + play/pause; multi-dim series; Overview stays the compact home grid.
|
||||
@@ -149,8 +156,8 @@ time + play/pause; multi-dim series; Overview stays the compact home grid.
|
||||
13. ~~Webhook HMAC signing~~ ✅ (`X-PearData-Signature`)
|
||||
14. ~~z-score / retrain job~~ ✅
|
||||
15. ~~REST HyperDHT tunnel~~ ✅ (`PEARDATA_REST_TUNNEL=1`)
|
||||
16. **Master metrics dashboard (Charts)** — Phase 6 P0 ← **now**
|
||||
17. Dashboard P1 — sync crosshair / pan-zoom / dim picker
|
||||
16. ~~Master metrics dashboard (Charts)~~ ✅ Phase 6 core (wall, pins, related, weights)
|
||||
17. Multi-named custom boards / Autobase parents — later
|
||||
18. Autobase multi-writer parents — HA fleet history
|
||||
19. Windows collector depth — close `/proc`-only gaps
|
||||
20. Plugin SDK polish — public collector registration API
|
||||
@@ -177,7 +184,7 @@ time + play/pause; multi-dim series; Overview stays the compact home grid.
|
||||
| M4 | Historical scrub across restart (HyperDB warm) | ✅ |
|
||||
| M5 | Container charts from Docker hosts | ✅ opt-in spike |
|
||||
| M6 | Parent peer rolling up a fleet | ✅ opt-in spike |
|
||||
| M7 | Charts tab = sectioned master metrics wall | 🔄 Phase 6 |
|
||||
| M7 | Charts tab = sectioned master metrics wall | ✅ Phase 6 core |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user