Skip to content

heartbeat: drop non-functional /start ping, document 20m grace - #49

Merged
cewert merged 1 commit into
mainfrom
fix/drop-nonfunctional-hc-start
Jul 11, 2026
Merged

heartbeat: drop non-functional /start ping, document 20m grace#49
cewert merged 1 commit into
mainfrom
fix/drop-nonfunctional-hc-start

Conversation

@cewert

@cewert cewert commented Jul 11, 2026

Copy link
Copy Markdown
Member

Context

Follow-up to #48. While investigating why the ~18h batcave outage (2026-07-10) didn't get acted on despite the Healthchecks.io heartbeat, two heartbeat issues surfaced:

1. The /start ping never worked

runner-entrypoint.sh pinged <HEALTHCHECKS_URL>/start at boot, but HC recorded 0 start pings across 71,724 total (last_start: null). It can't work by design — the runner is ephemeral, so the container dies before a run "completes" and a start signal never gets a matching success ping. It only added noise. Dropped it; alerting relies solely on the 60s success ping (unaffected).

2. grace=5m caused alert fatigue

The check flipped DOWN 20× in 50 days on grace=5m — almost all brief, self-recovered blips from ephemeral-runner restart gaps (many were the #48 token-race crash-loops). That trained the Gotify alert to be ignored, so the real 17.7h outage looked like just another blip.

Bumped the recommended grace to 20m in README.md + .env.example so a DOWN means a sustained outage. (The live batcave check has already been set to grace=1200s.)

Changes

  • runner-entrypoint.sh: remove the /start ping + explain why
  • README.md, .env.example: recommend grace=20m, drop /start references

Validation

  • shellcheck runner-entrypoint.sh
  • No behavior change to the success ping (the actual alerting signal)

Deploy

Cosmetic on the host (the /start line was a no-op), so no urgent redeploy — rides along on the next deliberate github_runner_ref bump.

The runner-entrypoint pinged <HEALTHCHECKS_URL>/start at container boot, but it
never registered on the HC side (0 start pings in 71k) and can't work by design:
the runner is ephemeral and the container dies before a run "completes", so a
start signal never gets a matching success ping. It only added noise. Alerting
relies solely on the plain 60s success ping, which is unaffected.

Also update the recommended HC grace from 5m to 20m in the README/.env.example.
A tight grace false-alerts on normal ephemeral-runner restart gaps: this check
flipped 20x in 50 days on grace=5m (mostly self-recovered blips), which trained
the Gotify alert to be ignored right before a real ~18h outage. A generous grace
makes a DOWN mean a sustained outage worth paging on.
@cewert
cewert merged commit 8c6cef5 into main Jul 11, 2026
3 checks passed
@cewert
cewert deleted the fix/drop-nonfunctional-hc-start branch July 11, 2026 21:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant