Files
orchestrator/docs/work-items/ORCH-063/07-infra-requirements.md

64 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
work_item: ORCH-063
stage: architecture
author_agent: architect
status: proposed
created_at: 2026-06-09
model_used: claude-opus-4-8
---
# 07 — Инфра-требования: ORCH-063 — мониторинг диска mva154 + алерт при ≥85%
Work Item: **ORCH-063** · Repo: **orchestrator** (self-hosting) · Стадия: architecture
## I-1. Топология / окружения
Топология **не меняется**. Watchdog работает внутри существующего контейнера `orchestrator`
(8500, `network_mode: host`) и опирается на уже существующие bind-mount'ы host-разделов:
- `/home/slin/repos → /repos` (рабочие репозитории, git-worktree `/repos/_wt/...`);
- `./data → /app/data` (SQLite БД).
Именно эта host-ФС переполнилась 07.06. Замер ведётся по смонтированным путям `/repos`, `/app/data`
(`shutil.disk_usage`), что отражает **хост-раздел**, а не overlay `/` контейнера (NFR-3/AC-8). Новых
контейнеров/портов/томов/сетей не требуется. Тот же демон автоматически работает и в staging-инстансе
(8501) — на собственной Ф С/путях, без отдельной настройки.
## I-2. Переменные окружения / секреты
Новые env (дескрипторы — в `.env.example`; **без секретов**):
| Env | Дефолт | Назначение |
|-----|--------|------------|
| `ORCH_DISK_MONITOR_ENABLED` | `true` | kill-switch (false → демон не стартует, нулевая регрессия). |
| `ORCH_DISK_MONITOR_INTERVAL_S` | `300` | период heartbeat-замера, сек. |
| `ORCH_DISK_MONITOR_THRESHOLD_PCT` | `85` | порог заполнения для алерта. |
| `ORCH_DISK_MONITOR_REALERT_S` | `21600` | cooldown повторного алерта выше порога (~6 ч). |
| `ORCH_DISK_MONITOR_PATHS` | `/repos,/app/data` | CSV отслеживаемых host-путей. |
Telegram-доставка использует **существующие** секреты `send_telegram` (`ORCH_TELEGRAM_*` /
`.env`) — новых секретов не вводится. Дефолты пригодны для прода без обязательной правки `.env`
(env опциональны — все имеют значения по умолчанию в `config.py`).
## I-3. Деплой / рестарт
- Изменение **не требует** специальной инфра-процедуры сверх штатного self-hosting-деплоя
(staging 8501 → прод 8500 через `Confirm Deploy`, ORCH-059/036).
- **Self-hosting инвариант соблюдён:** watchdog только читает заполнение и шлёт уведомление — не
рестартит/не роняет прод-контейнер, не выполняет действий над диском (NFR-6). Безопасен для
enduro-trails в общем инстансе.
- Демон стартует/останавливается автоматически в `main.lifespan` (ручной запуск не нужен, AC-1/AC-8).
### Реакция оператора на алерт (runbook-минимум)
При получении Telegram-алерта «Диск mva154 ≥ порога»:
1. Зайти на хост (`slin@82.22.50.71`), проверить `df -h /home/slin/repos`.
2. Освободить место (кандидаты — порядок ручной очистки): прунинг старых git-worktree
`/home/slin/repos/_wt/*` завершённых задач; `docker image prune` / `docker builder prune`;
ротация/удаление старых логов. **Авто-очистка — вне объёма ORCH-063** (отдельная задача).
3. Дождаться recovery-сообщения «диск ниже порога» (приходит однократно при возврате под порог).
> Развёрнутый раздел про disk-watchdog (что мониторится, порог, как отключить
> `ORCH_DISK_MONITOR_ENABLED`, реакция на алерт) добавляется в `docs/operations/INFRA.md` на стадии
> development (TRZ §9, AC-9).
## I-4. CI/CD
Без изменений `.gitea/workflows/`. Новый код покрывается существующим `pytest tests/` (юнит-тесты
pure-логики `decide_action`/`measure_paths`/`format_*` + изоляция never-raise — TRZ/AC-3/AC-6).
</content>