inference-bot 11ae968889 panel: Trends tab — members and usage over time, charted
Nathan asked to see a chart. The portal now owns a daily metrics series
(metrics_daily, written 03:15 UTC by the portal's own scheduler); this is the
first surface to read it.

- New route /api/metrics proxies the portal's /admin/metrics/series (admin
  token stays server-side, same pattern as /api/model-usage).
- New Trends tab, added to switchView in the same edit (every view toggled
  there must be shown/hidden there). Lazy: the series loads on first visit, so
  the panel's initial load is unchanged.
- Metric toggle (Members / Spend / Requests) and period toggle (30 / 90 / all
  time). Fetched once at the widest range and re-rendered client-side, so the
  toggles never refetch.
- Inline SVG, hand-rolled: no chart library, no CDN, no external dependency.
  Colours come from the panel's existing CSS vars, so it matches the rest.
- Gaps are drawn as gaps. A NULL metric means "not measured" and the line
  deliberately breaks rather than drawing through a day we never recorded
  (backfilled members_active is NULL every day, by design). The sub-line says
  how many days are unmeasured.
- Members shows the cumulative total; spend and requests are per-day bars.

Verified against the live 55-day series with a node harness running the real
page functions: 22 checks, including that a NULL breaks the line into two runs,
that no NaN reaches the markup, that the toggles do not refetch, and that the
SVG carries no hardcoded hex.
2026-10-28 04:01:52 +00:00
S
Description
Admin panel for the Inference Cooperative
340 KiB
0 Stars 2 Watchers 0 Forks
Languages
Python 99.5%
Dockerfile 0.5%