v0.3.0
Added
-
Dashboard cards drill into their pages. Cards that summarise a
dedicated page (Requests activity/duration, Exceptions, Jobs, queue and
autoscale cards) gain a "Requests →"-style header link when rendered on
the dashboard or as an embedded widget, carrying the active
period/service/env scope. On the card's own page the link is suppressed.
Package cards opt in by settingprotected ?string $drillPage = 'my-page'. -
Hide chart annotations per type. The header gains a ⚑ toggle listing
the configured marker types (Deploy, Incident, …) with a checkbox each,
plus a show/hide-all master switch — uncheck the noisy ones and every
chart drops those lines instantly. Purely client-side: cards always ship
the full annotation set and the charts filter marker lines by kind, so
toggling costs zero backend queries. The choice sits in the URL
(ann_off), so it survives navigation and deep links. -
Grafana-style relative time ranges.
?from=now-1h&to=now,
now-7d,now+30m… (units s/m/h/d/w/M/y) work everywherefrom/to
do — evaluated at view time, so a shared relative link always shows the
trailing window instead of a frozen one. Plain unix seconds still work,
and the header shows relative expressions verbatim. -
Livewire updates carry their component everywhere. With
cboxdk/laravel-telemetry≥ 0.2.1,POST /livewire/updateis named
livewire:{component}(batched updates:livewire:batch), so the routes
table groups per component instead of lumping thousands of opaque updates
into one row. The request log shows the component(s) behind each update
inline, and the Livewire page gains the Requests page's grouping/live-tail
pair: a per-component table and a scoped live request log. -
Collapsible sidebar navigation. The nav groups (Activity, Monitoring,
Statamic, …) collapse to chevrons so a long page list fits on one screen;
only the active group opens by default and the choice persists in
localStorage. Top-level items (Dashboard, Traces, Issues) stay visible. -
Frontend page rows drill into their traces. Core Web Vitals and Page
performance rows open the browser→backend traces for that URL path, matched
onspan.url.path, carrying the active scope.
Fixed
- Drill links no longer appear on a card's own page. Cards lazy-load in
a follow-up Livewire request where the page route param is gone, so every
card thought it was on the dashboard and grew a self-referencing
"Autoscale →" link. The page view now passes the page slug into each card
at mount. - Sparse counters no longer read as zero. Scaling actions and SLA
breaches born inside the selected window were invisible toincrease()
(Prometheus never sees the 0→first-value jump). Cards now count series
births too, so "Scale down: 1" shows up the moment the first scale-down
ever happens. - The Cluster card explains itself on single-host installs instead of
showing misleading "0 managers / 0%" stats — thequeue_autoscale_cluster_*
gauges only exist in cluster mode, and the card now says so. - Routes ⇄ Request log toggle no longer reloads the page. The toggle was
a plain link (full page load); it is now a Livewire event both sibling
cards listen to, so the swap is instant and keeps scroll/filter state. - Request log renders full-width. Its live-poll wrapper
<div>was the
card's grid item, so thespan 2on the inner card never reached the grid
and the log was squeezed into one column. The wrapper now uses
display: contents. - Live tail is on by default on the request log.
- Scaling actions card matched nothing on real data. The autoscaler's
directionlabel carriesup/down(the WorkersScaled action), not
scale_up/scale_down; the card now groups by the label instead of
filtering on guessed values. Verified against live production series —
as are the rest of the autoscale names, including
queue_autoscale_sla_breach_ratioand
queue_autoscale_sla_predicted_pickup_seconds. - Environment scope now works on every log-based card. The scope put
deployment_environment_namein the Loki stream selector, but backends that
index onlyservice_nameas a stream label (e.g. otel-lgtm) carry the
environment as structured metadata — so a selected environment silently
matched nothing and Analytics, the log viewer, unified errors and annotations
all returned zero. The environment is now a pipeline label filter
({service_name="…"} | deployment_environment_name="…"), correct whether the
backend indexes it as a stream label or not. The analytics Countries/Devices
empty states now name the emitter flags (TELEMETRY_ANALYTICS_GEO/
TELEMETRY_ANALYTICS_UA) that populate them. - Rootless traces no longer read as a perpetual "Loading…". An orphaned
browser page-view trace (no backend root span) showed "Loading…" forever in
the drawer; it is now labelled (the span name, "Unnamed trace" or "Trace not
found") since the fetch is already complete by render time.