ditdash U-I4a/b: the metrics client + traffic charts (app, tenant, host, edge) #5

Merged
jsutter merged 2 commits from ditdash-u-i4-traffic into main 2026-10-10 17:32:04 +00:00
Owner

U-I4a: server-built scope-filtered Prometheus client (slug-validated labels, no raw passthrough), the app page #traffic panel (stacked series, KPI tiles, destination diagram, range picker URL-held, 30d cap naming the ledger, Grafana link). U-I4b: tenant share bars + top-talkers, host throughput graph, edge counters gap stanza. U-R3N5d degraded variant for destination labels (documented). Critic: approve (2 CLEAN); dispatcher-run suite + clippy green.

U-I4a: server-built scope-filtered Prometheus client (slug-validated labels, no raw passthrough), the app page #traffic panel (stacked series, KPI tiles, destination diagram, range picker URL-held, 30d cap naming the ledger, Grafana link). U-I4b: tenant share bars + top-talkers, host throughput graph, edge counters gap stanza. U-R3N5d degraded variant for destination labels (documented). Critic: approve (2 CLEAN); dispatcher-run suite + clippy green.
The observed plane read (FR-7/FR-22): a Prometheus HTTP client with
server-built, slug-validated, tenant-scope-filtered exprs only (no
request parameter reaches a query); the app page gains #traffic —
stacked per-channel served-bytes + requests SVG (server-side, theme
token colours), KPI tiles (requests/s, served/day, outbound/day, peak,
p95), the egress destination diagram with the documented degraded
metadata gap (U-R3N5d's connections row not landed), the denied-attempt
row in the bad-status colour, the URL-held range state (absolute
from/to + 24h/7d/30d presets, ≤ 30 days with the named ledger refusal),
and the honest unconfigured/no-series/unavailable states, never a zero.
AppState gains the shared metrics client; manifest gains the metrics
secret refs + the query host under PREC-I4-1; tests/traffic.rs pins the
received exprs, the scope filter, the cap, and the client-script ban
against a loopback stub.

Assisted-by: worker:synthetic/hf:deepseek-ai/DeepSeek-V4.1-Flash
The tenant page's app list gains the traffic share bar + sparkline cell
(server-side SVG, theme tokens) and a #traffic section with the
top-talkers table (served + outbound over the window, share = app/sum)
and the 7-day baseline line; the host page gains the netdev
receive/transmit throughput graph (physical devices only — loopback and
virtual bridges filtered server-side; an unrelayed host renders the
named gap); the edge page's #traffic lands as the named appliance
counters gap on page and twin. The preemptive seam carries the app
page's 7-day baseline line and the Grafana explore row here (the same
expr + range; DITDASH_GRAFANA_BASE unset renders the plain text naming
U-I6a's display default). Tenant + host page/twin handlers take the raw
query so the range state rides the URL; tests/traffic.rs pins the share
math, the per-scope stub fixtures, and the edge stanza; page snapshots
refreshed via the suites' digest mechanism.

Assisted-by: worker:synthetic/hf:deepseek-ai/DeepSeek-V4.1-Flash
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
deepnet/ditdash!5
No description provided.