Деплой метрик перечитывает конфигурацию, а не только кладёт её на диск (#3467) #3475

Closed
bot-backend wants to merge 2 commits from fix/metrics-deploy-reloads-prometheus into main

2 commits

Author SHA1 Message Date
3aef5c3631 Гейт #3467 больше не слеп к || true и к маунту без :ro (ревью PR #3475)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 14s
CI / changes (pull_request) Successful in 15s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m51s
CI / backend-tests (pull_request) Successful in 18m17s
Мутации ревьюера проходили гейт насквозь:

- к шагу `POST /-/reload` дописано `|| true` — все 7 тестов зелёные. Regex
  заканчивался на URL и хвост строки не смотрел; сегодня спасает `set -e`, но
  именно так («зелёная сводка ≠ зелёный выход») в этом репозитории уже ломали
  гейты. Добавлен отрицательный lookahead на `||` в той же строке;
- новый одиночный файловый маунт БЕЗ суффикса `:ro` — тест зелёный, потому что
  распознавание маунта требовало `:ro`. Права к типу маунта отношения не имеют:
  инод он держит одинаково. Требование снято.

Проверка promtool переехала ВЫШЕ `docker compose up -d`: прежнее место (между
подъёмом и перезагрузкой) не спасало от битого конфига, потому что `up -d`
пересоздаёт контейнер при смене образа. Новый тест сторожит и это.

Якоря границ серверной джобы и блока триггеров читаются через find с внятным
assert: при переименовании шага гейт скажет, что сломалось, а не даст ValueError.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 16:18:45 +05:00
c31aff68a9 Деплой метрик перечитывает конфигурацию, а не только кладёт её на диск (#3467)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 11s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 13s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m48s
CI / backend-tests (pull_request) Successful in 18m46s
Правки ops/metrics/prometheus/** доезжали до диска и не вступали в силу:
контейнер Prometheus не перезапускался с 2026-08-27, а деплой перезагружал
один Caddy. Правила из #3464 лежали и на диске, и внутри контейнера, а
/api/v1/rules отдавал прежние — при зелёном деплое и без единого
отрицательного признака.

- проверка promtool (check config + check rules) одноразовым контейнером того
  же образа по файлам с диска, затем POST /-/reload; провал проверки роняет
  шаг и перезагрузки не делает — работающий Prometheus остаётся на прежней
  конфигурации;
- сверка инода у одиночных файловых маунтов (prometheus.yml, loki-config.yml,
  alert-ack/app.py) с пересозданием контейнера: маунт ОДНОГО файла держит
  старый инод, а у Loki ручки перезагрузки нет вовсе (404 на /reload);
- датасорсы Grafana перечитываются штатной ручкой: их провиженинг применяется
  только при старте, дашборды же провайдер пересканирует сам;
- гейт backend/tests/ops/test_3467_prometheus_reload.py краснеет, если
  перезагрузка исчезла, оторвалась от проверки конфигурации или у нового
  файлового маунта нет пути доезда.

Closes #3467

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 15:51:20 +05:00