Commit Graph

18 Commits

Author SHA1 Message Date
1cdfaa5035 otel: reliable bar tooltips (<title> inside <rect>, label pointer-events:none) 2026-07-02 11:56:34 +00:00
47a88ea158 otel: waterfall prefers newest multi-span trace (real page render) 2026-07-02 11:49:52 +00:00
6c2a6ccf07 otel: waterfall shows latest REAL trace (skip dashboard's own poll routes) 2026-07-02 11:48:05 +00:00
ca80df9ade otel: hover tooltips on waterfall bars (SVG <title>) 2026-07-02 11:00:40 +00:00
4f17a40187 otel: relative 'Ns ago' timestamp on recent traces 2026-07-02 10:53:02 +00:00
e49229c20b otel: sustained SPA poll via a hidden ticker sibling (browser-verified) 2026-07-02 09:34:20 +00:00
2785a14ece otel: robust SPA poll — stable #otel-body polls /otel/fragment (innerHTML) 2026-07-01 20:48:15 +00:00
44d29866e7 otel: wire /otel into the SPA (dual-mode SX + sx-trigger poll refresh) 2026-07-01 20:31:44 +00:00
7754666de1 otel: waterfall time ruler + recent-traces show actual target path & duration 2026-07-01 20:18:40 +00:00
322ff4f691 otel: funky dashboard (latency bar chart + status-colored waterfall) + boot self-warm
Dashboard gains a per-route latency bar chart (nested p50/p95/p99 bars, tail
visible) + status-colored waterfall with ms duration labels + a real 3s
auto-refresh (replacing the non-functional data-on-load SSE attr). serve.sh
self-warms the serving JIT over /dev/tcp so the first visitor after a restart
gets ~78ms not the one-time ~2.5s compile. otel suite 125/125.
2026-07-01 19:41:40 +00:00
3d9dc832fc otel P8: W3C traceparent propagation + error spans
otel/format-traceparent + otel/current-traceparent emit '00-<32hex>-<16hex>-01';
otel/parse-traceparent round-trips it (nil on malformed/bad-width). otel/-timed
now guards the thunk: success spans get :status ok, a raised error records a
span with :status error + an exception event then propagates. Error propagation
uses a false-returning guard clause test (an explicit (raise e) in a guard
handler re-enters the guard and hangs).
2026-07-01 18:20:46 +00:00
84285d23e9 otel P7: OTLP-JSON export + injected transport
otel/export-otlp folds spans → OTLP/JSON envelope (resourceSpans → scopeSpans →
spans) with hex traceId(32)/spanId(16)/parentSpanId, uint64-as-string nano
timestamps, typed attributes (stringValue/intValue), and span kind
(SERVER/INTERNAL). otel/export-otlp-json encodes via dream-json-encode;
otel/post-otlp POSTs through an injected transport (testable without a live
collector).
2026-07-01 18:20:46 +00:00
4400870abe otel P6: live dashboard — GET /otel SSR + /otel/stream SSE
otel/dashboard SSRs the metrics strip + latest-trace waterfall + recent-traces
list as HTML carrying Datastar-style data-on-load subscribing to /otel/stream,
the SSE feed of SXTP otel.span events. Routes otel/dashboard-route +
otel/stream-route (otel/routes) mount via make-app. recent-traces/latest-trace
+ otel/span-event helpers.
2026-07-01 18:20:46 +00:00
c273467929 otel P5: metrics aggregate-fold (per-route counts + p50/p95/p99)
otel/metrics folds spans → {:total-requests :routes}; each route carries a
request count and nearest-rank latency percentiles over its durations. Route
key is the http.route attr (falls back to span name). Includes a small
insertion sort (no sort primitive) and order-preserving distinct.
2026-07-01 18:20:46 +00:00
5f06b5e8e0 otel P4: render-fold → SVG waterfall
otel/waterfall-rects folds a trace's spans into rect geometry (x by start
offset, width by duration, y by depth via parent-link ancestor count);
otel/waterfall folds those into an inline <svg> (one <rect>+<text> per span).
Renders to real SVG markup via the html tag registry.
2026-07-01 18:20:46 +00:00
c2def0ea16 otel P3: auto-instrument handlers at the make-app seam
otel/instrument-routes wraps each flattened Dream route's handler in a timed
span named METHOD /route with {:http.method :http.route :http.status} attrs;
host/make-app applies it so every matched request becomes a trace. Refactored
with-span onto a shared otel/-timed core that takes a finalize fn for
result-derived attrs (the http.status only known post-handler).
2026-07-01 18:20:46 +00:00
51d4224a55 otel P2: now-ns wraps host clock-milliseconds as epoch nanoseconds
Clamp against a high-water mark so the clock never steps backwards; span
durations stay non-negative. Real ns-scale timestamps replace the P1
placeholder counter.
2026-07-01 18:20:46 +00:00
087c01e890 otel P1: span model + API (with-span, parent stack, ring buffer)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 18:20:46 +00:00