github Institut-du-Numerique-Responsable/perf-sentinel v0.31.2

latest release: chart-v0.31.2
2 hours ago

What's new in v0.31.2

v0.31.2 is about where a daemon loses history once PerfSentinelHub keeps it. Without a Hub, the daemon's findings ring is the history, and a ring that turns over forgets. With a Hub, the ring is a cache over a history the Hub holds, and what can still be lost is what never reaches the Hub. The daemon said nothing about that: the counters existed, but no advice and no alert read them. This release makes the daemon name what its Hub export dropped, gives a polling Hub the count it needs to say what it missed, and stops the monitor from presenting a full ring as a loss.

The advisor names what the Hub export dropped

With [daemon.hub_export] on, a finding, an incident or a correlation episode can miss the Hub for four reasons: evicted from a full pending table while the Hub was slow or away, too large for one payload, rejected by the Hub, or held for a Hub without the incident or correlation route. The daemon cannot send any of them again, so the Hub's history has a gap. The tuning advisor of /api/export/report now names the three counts, max_pending and request_timeout_secs with their values, the Hub upgrade a missing route calls for, and the daemon log to read for rejected batches. It stays silent while the export is off.

An alert that fires on one drop

The chart's PrometheusRule gains PerfSentinelHubExportDropping, on the three perf_sentinel_hub_export*_dropped_total counters, among the rules that fire on data the daemon lost and cannot recover. Its rate spans 30 minutes against a 15-minute for, so a single drop fires. Writing it showed that PerfSentinelArchiveDropping could not do that: its 15-minute rate fell back to zero before its 15-minute for elapsed, so a single dropped archive window, the case its description names, never fired. Its rate now spans 30 minutes too.

A count a polling Hub can read

/api/status reports findings_stored_total, every finding pushed into the ring since the daemon started, evicted ones included, back to zero on a restart. Between two reads by one reader, the pushes beyond stored_findings left the ring before that reader saw them. PerfSentinelHub 0.7.1 reads it to count what its polls missed from a daemon that does not push. stored_findings, the total and oldest_finding_ms now come from one read of the ring, so a status body no longer mixes two states of it.

The monitor says where the evictions go

/api/config reports hub_export_enabled. query monitor shows it on the Config tab and, with the export on, says on the max_retained_findings row and on the findings_store line of the headroom chart that an eviction from the ring loses nothing the export delivered. What the export drops shows on the Advisor tab.

In the simulation lab, a daemon image built from this release passed validate-findings 12/12, query-monitor-api, chart-prometheusrule-pdb, hub-ingestion, the hybrid daemon-to-HTML scenario, output-formats-coverage and the SIGTERM drain.

Upgrade impact

  • PerfSentinelArchiveDropping can now fire on a single dropped window, where it stayed silent. A deployment that had drops it never saw may get its first alert after the upgrade.
  • /api/status and /api/config gain one field each, findings_stored_total and hub_export_enabled. A client that rejects unknown fields needs to accept them.
  • No finding appears, disappears or changes signature, no configuration key is added or removed, no metric changes, the public API of perf-sentinel-core does not change shape, the embedded reference data keeps its vintages, and MSRV stays 1.99.0.

Full detail in CHANGELOG.md.

Verifying this release

# Binary integrity via SLSA build provenance attestation (Build Level 2)
gh attestation verify perf-sentinel-linux-amd64 \
  --repo Institut-du-Numerique-Responsable/perf-sentinel

# A periodic disclosure produced by this binary, with its attestation and bundle
perf-sentinel verify-hash --report perf-sentinel-report.json \
  --attestation perf-sentinel-report.intoto.jsonl --bundle perf-sentinel-report.sig \
  --expected-identity "https://github.com/Institut-du-Numerique-Responsable/perf-sentinel/.github/workflows/release.yml@refs/tags/v0.31.2" \
  --expected-issuer "https://token.actions.githubusercontent.com" \
  --verify-binary ./perf-sentinel-linux-amd64

gh CLI 2.49 or newer required for gh attestation verify. Releases up to v0.26.2 were attested under robintra/perf-sentinel and keep their own --repo and identity.

Don't miss a new perf-sentinel release

NewReleases is sending notifications on new releases.