Polls /summary on VPS over Tailscale every 60s; computes freshness locally from last_update epoch (never trusts self-reported status). Alerts via Telegram Bot API directly after 3 consecutive failures; sends recovery message on heal. State (fail_count, alerted) persisted to volume so debounce survives restarts. - services/brain-watchdog/: Python service, no external deps (stdlib only) - hosts/piha/runtime/brain-watchdog/: override with mem_limit 64m - hosts/piha/services.yaml + inventory/topology.yaml: manifest entries Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
11 lines
245 B
Bash
Executable file
11 lines
245 B
Bash
Executable file
#!/bin/sh
|
|
# Healthy if state.json was written within the last 5 minutes.
|
|
python -c "
|
|
import os, time, sys
|
|
p = '/data/state.json'
|
|
if not os.path.exists(p):
|
|
sys.exit(1)
|
|
age = time.time() - os.path.getmtime(p)
|
|
sys.exit(0 if age < 300 else 1)
|
|
"
|