feat(mappa-ntfy-monitor): deploy health monitor mappa → ntfy (#1013)

- /root/mappa-ntfy-monitor/monitor.py (python3 stdlib): GET /health (200 + ok:true + service:mappa), алерт после 3 подряд фейлов раз за эпизод + recovery
- cron */5 в /etc/cron.d/mappa-ntfy-monitor, env 600 (NTFY_* из pass), топик mappa-alerts
- тесты: dry-run OK / негатив 3× → DOWN-алерт / recovery; стек 26 не тронут
- ранбук §Мониторинг живости; источник скрипта в scripts/
This commit is contained in:
2026-08-23 19:38:08 +03:00
parent 56c1cb597c
commit 171ee2e9e6
4 changed files with 203 additions and 22 deletions

View File

@@ -73,6 +73,17 @@ ssh vds.kzntsv.site 'docker ps --filter name=mappa --format "{{.Status}}"'
entities/edges/leases/logs, owner=mappa) — `docker logs mappa` + `\dt` в БД.
5. **Пинг mappa**: письмо в `mappa/.agents/inbox/` (event: mappa-deployed) — импорт и остальное за ними.
## Мониторинг живости (монитор → ntfy)
Остаток #985 (решение 15/18: алерт при падении сервиса) — реализован #1013 (2026-08-23).
- **Скрипт:** `/root/mappa-ntfy-monitor/monitor.py` (python3 stdlib; источник: `admin/scripts/mappa-ntfy-monitor/monitor.py`).
- **Проверка:** GET `https://mappa.vds.kzntsv.site/health` — HTTP 200 + JSON `{"ok":true,"service":"mappa"}` (таймаут 15s).
- **Алерт:** ntfy топик `mappa-alerts` (basic-auth vitya, admin-role → rw все топики), после 3 подряд фейлов (~15 мин), раз за эпизод (dedupe); recovery-сообщение при возврате.
- **Крон:** `/etc/cron.d/mappa-ntfy-monitor``*/5 * * * *` (root, лог `/var/log/mappa-ntfy-monitor.log`).
- **Конфиг:** `/root/.mappa-ntfy-monitor.env` (600; NTFY_* из `pass vds-kzntsv/full-env`). State: `/root/.mappa-ntfy-monitor.state`.
- ⚠️ Монитор НЕ трогает стек 26 — только наблюдение; редеплой/рестарт — отдельной задачей.
## Gotchas (из первых деплоев)
1. **schema.sql в dist** — tsc компилирует только .ts; `migrate()` ищет `.sql` рядом с