v1.1.0 Phase 3: observability core #96
No reviewers
Labels
No labels
area:ai
area:ci-cd
area:notifications
area:observability
area:public-pages
backlog
bug
duplicate
enhancement
help wanted
invalid
question
type:decision
type:feature
type:infra
type:maintenance
type:security
v1.0.1
v1.1.0
v1.2.0
v1.3.0
v2.0.0
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
rbrooks/WeatherBot!96
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/v1.1.0-phase3-observability"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The observability wave — the milestone's core value: making the app's health visible and its failures loud.
Backend
/metrics: exports product freshness age, failure counts, up-state, and 24h event counts (NWS/SPC polls, notifier dispatch per channel, cache hit/miss) from existing observability data. Hand-rendered text format (no new dependency). Gated byMETRICS_ENABLED; optionalMETRICS_TOKENbearer.nws_alerts,spc_fetch) stays stale/failing pastSTALE_PRODUCT_ALERT_MINUTES, debounced on state transitions.HEARTBEAT_STALE_MINUTES, plus an optional external heartbeat ping (HEARTBEAT_PING_URL) after each good poll so an external monitor catches a fully-down app.admin_alerts.py: posts toADMIN_ALERT_WEBHOOKwhen set (else logs), with in-process debounce so alerts don't spam.UI
/diagnostics: 48h hourly-bucketed success-ratio sparklines per feed (dependency-free inline SVG) via a new admin-only/api/diagnostics/trends.Config (added to
.env.example)METRICS_ENABLED,METRICS_TOKEN,ADMIN_ALERT_WEBHOOK,HEARTBEAT_STALE_MINUTES,HEARTBEAT_PING_URL,STALE_PRODUCT_ALERT_MINUTES— all optional with safe defaults (admin alerting/ping disabled until configured; metrics on, unauthenticated for homelab scraping).Testing
Full suite green on the dev server: 458 passed (29 new tests) across metrics format/auth, heartbeat watchdog + debounce, stale-product alerting, admin-alert webhook/log fallback, degraded banner, and trend bucketing.
Notes
/metricsrather than emitting a misleading constant./metricsendpoint means external Alertmanager could also drive alerting; the in-app #8/#77 alerting is kept as the self-contained default.Closes #73, #8, #77, #74, #9
🤖 Generated with Claude Code