Skip to content

Unify the collector-health ROW banding (NEVER_RUN/FAILING/STALE/WARNING/HEALTHY) — currently defined in three places #1573

Closed

Description

@erikdarlingdata

Surfaced during the #1562 data-layer build. The per-server CARD banding (CPU/threads/memory/blocking/deadlocks/collectors + freshness) is now unified in PerformanceMonitor.Common/ServerHealthBands.cs (ServerHealthClassifier) and consumed by the WPF viewer, the web fleet reader, and the new get_fleet_overview MCP tool — one set of thresholds, drift closed.

The collector-health row banding is a different, larger classifier that still exists in three independent copies: Lite's collection-health surface, the Darling WPF viewer's, and the service's DarlingDataReader.CollectorHealth (NEVER_RUN / FAILING / STALE / WARNING / HEALTHY per collector row). They agree today; nothing pins them together, so they can drift exactly the way the card thresholds could before unification.

Scope of the fix: extract one row classifier (Common, brush/display-free), refactor all three consumers onto it, keep each surface's display formatting local, pin with a shared decision-table test. Entangled with WPF display-string formatting on both viewer sides, which is why it was consciously not folded into #1562's build.

Activity

  1. erikdarlingdata commented on Jul 18, 2026

    @erikdarlingdata
    OwnerAuthor

    Scope addition from the #1574 merge gate: the cross-app MCP inventory pin caught get_fleet_overview (born from the web dashboard's DarlingFleetReader) with no Lite twin — it is now on the KnownLiteMissingMcpTools ratchet with a pointer here. The Lite port belongs to this issue's unification work: a DuckDB fleet reader over the SAME shared ServerHealthClassifier in Common, which is also the moment to move Lite's own overview-card banding onto that classifier (currently Lite-side thresholds — the same pre-unification drift the Darling viewer had). Port the tool, remove the ratchet entry (it only shrinks).

  2. erikdarlingdata commented on Jul 18, 2026

    @erikdarlingdata
    OwnerAuthor

    Shipped to dev in #1578. Collector-health ROW banding is unified into one PerformanceMonitor.Common classifier (CollectorHealthClassifier) that Lite, the Darling viewer, and the service all delegate to — no more three-way drift. Thresholds are now frequency-relative: FAILING at max(24h, 2x cadence), STALE at max(4h, 1.5x cadence), so a healthy daily collector (index_object_stats, 1440-min) reads HEALTHY at 27h instead of FAILING, and the Overview 'N failing' count (which reuses this banding) stops showing phantom failures. Floors keep every frequent collector's banding byte-for-byte identical. 40 decision-table tests mirrored in both apps. NOTE: a 4th, SQL-side copy exists in the deprecated Dashboard (install/47) with different semantics and can't consume the C# classifier - out of scope, flagged in the PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions