--- 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).