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

@ -96,6 +96,7 @@ interface WorkerSnapshot {
lastActivity: string | null;
inFlight: number;
oneHour: { success: number; failure: number };
activity24h?: Array<{ hour: string; success: number; failure: number }>;
}
interface WorkersResponse {