CI / ruff · mypy · pytest (pull_request) Successful in 1m11s
- docker-socket-proxy в Compose (только GET /containers/*), сокет только у него - app/runtime/docker.py: read-only клиент; видны только контейнеры с меткой tgit.managed=true, чужие id отклоняются до запроса - app/runtime/checks.py: running, health, рестарты за окно, CPU/RAM, ошибки в логе, HTTP-проба; у каждой проверки свой таймаут, отчёт всегда полный - app/runtime/snapshots.py: снапшоты раз в 15 с в container_snapshots - бот: список с 🟢🟡🔴⚪, карточка, «🩺 Запустить проверки», «🔄 Обновить» - деплой ставит метки tgit.sha / tgit.deployed_at на контейнер бота - имя джоба CD без неотрисованного выражения Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
14 lines
946 B
YAML
14 lines
946 B
YAML
# Проверки раздела «🩺 Статус» (SPEC S-3). Читает app/runtime/checks.py; неизвестный ключ — ошибка при старте.
|
|
|
|
# Окно для «рестарты не растут» и «нет ошибок в логе», секунды
|
|
window: 300
|
|
# Пороги, % от лимита контейнера (CPU — от числа доступных ядер × 100)
|
|
cpu_pct: 90
|
|
mem_pct: 90
|
|
# Строка лога считается ошибкой, если совпала с шаблоном (синтаксис модуля regex)
|
|
error_pattern: '(?i)\b(error|exception|traceback|critical|fatal|panic)\b|"level":\s*"(ERROR|CRITICAL)"'
|
|
# HTTP-проба health_url (метка tgit.health_url): таймаут, секунды
|
|
http_timeout: 5
|
|
# Таймаут одной проверки — упавшая или зависшая проверка не роняет отчёт
|
|
check_timeout: 15
|