feat(status): 24-hour activity sparklines on worker pulse cards

Each worker card on /status now renders a stacked-bar histogram of the
last 24 hourly buckets — successes from the bottom up in primary blue,
failures from the top down in destructive red, idle hours as a thin
baseline.  Heights normalise to the loudest hour in the series so quiet
workers still show shape.

- /api/status/workers: extended the response with activity24h per
  worker, computed via a generate_series CTE joined to analyzer_jobs /
  rmm_executions / sync_history (zero-fill so the 24-bucket shape is
  consistent regardless of activity).
- ActivitySparkline (components/status/activity-sparkline.tsx) — pure
  flex-end bar strip, no recharts dependency, 32px tall by default.
- WorkerPulse renders the strip below the in-flight / 1h tiles with
  "24h ago" / "now" labels.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
lorentz 2026-05-03 10:03:54 -04:00
parent e1427b62d7
commit 3fa41c25a3
5 changed files with 197 additions and 20 deletions

View file

@ -363,6 +363,10 @@ below is the working backlog; expand as we go.
logged, ticket touch count).
- [x] ~~Worker pulse section on `/status`~~ — analyzer / RMM / sync
scheduler heartbeats via `/api/status/workers` and `WorkerPulse`.
- [x] ~~Worker activity sparklines~~`ActivitySparkline` shows 24
hourly buckets per worker (success bottom-up in primary, failure
top-down in destructive). Backed by zero-filled hour series
generated in the `/api/status/workers` query.
### Tokens & theming
- [-] Hard-coded Tailwind palette colors are extensive (~770 references)