mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-24 12:42:49 +00:00
415c09dafc
The resources API rebuilds its registry from the monitor's unified seed, but built it with NewRegistry and plain ingests, so its stale pass used the registry defaults while the monitor judges each source by its configured polling cadence. A Proxmox node polled every two minutes read stale, with warning status, in /api/resources ninety seconds after its poll while the websocket called it online. Presentation coalescing had the same gap in both views. When it merges an agent row the registry kept apart into its Proxmox node by hostname, it picked each reading's source by the default thresholds, so the row showed a silent agent's readings over a poll the registry calls current. The seed now carries the thresholds its registry generation was judged by. The monitor adapter records them per generation: thresholds set since the last rebuild wait for the rebuild that applies them, and the read-state overlays and live supplemental refreshes of a generation are judged by its thresholds, since re-judging a listing cannot clear a stale verdict it already carries. The monitor lists a generation with its thresholds from one registry pointer, and a view built from mock fixtures or a bare snapshot reports none (the defaults it was judged by). The monitor hands seed, freshness and thresholds over from one view, per tenant too. The resources API builds its registry with them (NewRegistryWithStaleThresholds: ingests and stale passes that pass none use them) and keys its cache on its own copy. The coalesce judges metric freshness with metricSourceStale, the rule the stale pass and the merge already share, and both the broadcast and ListForPresentation pass their view's thresholds. The broadcast coalesce also honours the operator's merge exclusions, so the adapter's CoalesceForPresentation takes the listing's thresholds next to them. Patrol's scoped runtime state still rebuilds registries with the defaults.