Skip to content

v0.3.0

Choose a tag to compare

@sylvesterdamgaard sylvesterdamgaard released this 07 Jul 06:28

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 setting protected ?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 everywhere from/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/update is 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
    on span.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 to increase()
    (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 — the queue_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 the span 2 on 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
    direction label carries up / 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_ratio and
    queue_autoscale_sla_predicted_pickup_seconds.
  • Environment scope now works on every log-based card. The scope put
    deployment_environment_name in the Loki stream selector, but backends that
    index only service_name as 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.