Anthropic Statuspage webhook → ntfy forwarder + dashboard (bunko.me/claude-status)
- Python 98.4%
- Dockerfile 1.6%
A single outage fans out to one component webhook per affected service (~4 within seconds), which meant ~4 separate ntfy notifications. Now component updates are debounced into per-new_status groups: GROUP_WINDOW seconds (default 10) after the first update of a status arrives, one combined push is sent, e.g. "4 components — degraded performance" listing the services + overall status. A group of one falls back to the normal single-component format; different statuses in the same window flush as separate groups. Set GROUP_WINDOW=0 to disable. - grouper.py: in-memory debounce buffer keyed by new_status; flush task detaches from its registry before the publish await so a late update starts a fresh group rather than being dropped; strong refs held so the loop can't GC a flush mid-await. - notify.py: format_component_batch() builds the combined message (reuses the single formatter for batches of one). - main.py: webhook routes component payloads through grouper.add() (incidents and everything else still push instantly); /health + dashboard show the window. - .env.example: GROUP_WINDOW. Verified live: 3 component webhooks within the window produced exactly one flush and one ntfy publish; single + mixed-status cases behave correctly. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| app | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||