64 lines
4.7 KiB
Markdown
64 lines
4.7 KiB
Markdown
---
|
||
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>
|