Merge pull request 'fix(ops/metrics): тема «метрики» задаётся дефолтом, а не ручным заведением секрета' (#3167) from fix/3163-infra-topic-default into main
All checks were successful
Deploy / changes (push) Successful in 9s
Deploy / build-frontend (push) Has been skipped
Deploy / deploy-caddy (push) Has been skipped
Deploy Metrics / server (push) Successful in 15s
Deploy Metrics / agent-apps (push) Successful in 22s
Deploy Metrics / agent-infra (push) Successful in 22s
Deploy / build-backend (push) Successful in 35s
Deploy / build-worker (push) Successful in 38s
Deploy / deploy (push) Successful in 1m2s
Deploy / deploy-status (push) Successful in 1s
Deploy / perimeter-smoke (push) Successful in 10s
All checks were successful
Deploy / changes (push) Successful in 9s
Deploy / build-frontend (push) Has been skipped
Deploy / deploy-caddy (push) Has been skipped
Deploy Metrics / server (push) Successful in 15s
Deploy Metrics / agent-apps (push) Successful in 22s
Deploy Metrics / agent-infra (push) Successful in 22s
Deploy / build-backend (push) Successful in 35s
Deploy / build-worker (push) Successful in 38s
Deploy / deploy (push) Successful in 1m2s
Deploy / deploy-status (push) Successful in 1s
Deploy / perimeter-smoke (push) Successful in 10s
This commit is contained in:
commit
ba57cf7c05
2 changed files with 36 additions and 29 deletions
|
|
@ -164,26 +164,28 @@ jobs:
|
|||
# бы вовсе — то есть алертинг исчез бы целиком, а не «ушёл не в
|
||||
# ту тему».
|
||||
#
|
||||
# Откат обязателен: пока METRICS_TELEGRAM_INFRA_TOPIC_ID не
|
||||
# прописана на хосте, берём METRICS_TELEGRAM_TOPIC_ID — тогда
|
||||
# поведение остаётся ровно прежним, а не ломается молча.
|
||||
# Значение по умолчанию стоит ЗДЕСЬ, а не в секрете. Номер темы
|
||||
# форума секретом не является: в репозитории уже лежат домены,
|
||||
# пути на хостах, имена контейнеров и внешние адреса. Зато шаг
|
||||
# «завести секрет руками» — это отказ, который уже случился:
|
||||
# 27.08 два прогона подряд молча откатились на тему клиентских
|
||||
# инцидентов, и тема «метрики» осталась пустой при полностью
|
||||
# зелёном деплое.
|
||||
#
|
||||
# Прежний откат на METRICS_TELEGRAM_TOPIC_ID убран намеренно: он
|
||||
# давал ровно то состояние, ради ухода от которого всё и
|
||||
# затевалось — весь инфраструктурный поток в теме клиентских
|
||||
# инцидентов, — и сообщал об этом строкой в логе, которую никто
|
||||
# не читает. Молчаливое «почти правильно» хуже явной поломки.
|
||||
#
|
||||
# Переменная окружения по-прежнему перекрывает значение: переезд
|
||||
# темы или другой чат решается ею, без правки кода.
|
||||
INFRA_TOPIC_ID="${METRICS_TELEGRAM_INFRA_TOPIC_ID:-245}"
|
||||
METRICS_TELEGRAM_INFRA_TOPIC_LINE=" message_thread_id: ${INFRA_TOPIC_ID}"
|
||||
if [ -n "${METRICS_TELEGRAM_INFRA_TOPIC_ID:-}" ]; then
|
||||
INFRA_TOPIC_ID="${METRICS_TELEGRAM_INFRA_TOPIC_ID}"
|
||||
INFRA_TOPIC_IS_FALLBACK=0
|
||||
echo "Инфраструктура: тема ${INFRA_TOPIC_ID} из окружения."
|
||||
else
|
||||
INFRA_TOPIC_ID="${METRICS_TELEGRAM_TOPIC_ID:-}"
|
||||
INFRA_TOPIC_IS_FALLBACK=1
|
||||
fi
|
||||
if [ -n "${INFRA_TOPIC_ID}" ]; then
|
||||
METRICS_TELEGRAM_INFRA_TOPIC_LINE=" message_thread_id: ${INFRA_TOPIC_ID}"
|
||||
if [ "${INFRA_TOPIC_IS_FALLBACK}" = "1" ]; then
|
||||
echo "Инфраструктура: METRICS_TELEGRAM_INFRA_TOPIC_ID не задана — откат на METRICS_TELEGRAM_TOPIC_ID, топик ${INFRA_TOPIC_ID}."
|
||||
else
|
||||
echo "Инфраструктура: адресуются в топик ${INFRA_TOPIC_ID}."
|
||||
fi
|
||||
else
|
||||
METRICS_TELEGRAM_INFRA_TOPIC_LINE=""
|
||||
echo "Инфраструктура: топик не задан — уйдут в общую тему чата."
|
||||
echo "Инфраструктура: тема ${INFRA_TOPIC_ID} по умолчанию (METRICS_TELEGRAM_INFRA_TOPIC_ID не задана)."
|
||||
fi
|
||||
|
||||
if [ -n "${METRICS_TELEGRAM_ONCALL:-}" ]; then
|
||||
|
|
|
|||
|
|
@ -133,22 +133,27 @@ def test_deploy_computes_whole_line_and_passes_it_to_envsubst() -> None:
|
|||
)
|
||||
|
||||
|
||||
def test_infra_topic_falls_back_to_client_topic_when_unset() -> None:
|
||||
"""Без METRICS_TELEGRAM_INFRA_TOPIC_ID — откат на METRICS_TELEGRAM_TOPIC_ID (#3163).
|
||||
def test_infra_topic_has_working_default_and_never_falls_back_to_client_topic() -> None:
|
||||
"""Тема по умолчанию задана в самом деплое и НЕ откатывается на клиентскую (#3163).
|
||||
|
||||
Разделение тем не должно ломать деплой у тех, кто ещё не прописал новую
|
||||
переменную на хосте: пока её нет, поведение обязано остаться ровно
|
||||
прежним (топик из METRICS_TELEGRAM_TOPIC_ID), а не откатиться в общую тему
|
||||
чата или сломать рендер конфига.
|
||||
Первая половина: без значения по умолчанию разделение тем зависело бы от
|
||||
ручного шага «завести секрет». Этот шаг уже отказал — 27.08 два прогона
|
||||
подряд отработали зелёными, а тема «метрики» осталась пустой.
|
||||
|
||||
Вторая половина важнее: откат на METRICS_TELEGRAM_TOPIC_ID запрещён явно.
|
||||
Он возвращал ровно то состояние, ради ухода от которого всё затевалось —
|
||||
весь инфраструктурный поток в теме клиентских инцидентов, — и сообщал об
|
||||
этом строкой в логе прогона, которую никто не читает.
|
||||
"""
|
||||
text = WORKFLOW.read_text(encoding="utf-8")
|
||||
assert re.search(
|
||||
r'if \[ -n "\$\{METRICS_TELEGRAM_INFRA_TOPIC_ID:-\}" \]; then'
|
||||
r'[\s\S]*?INFRA_TOPIC_ID="\$\{METRICS_TELEGRAM_INFRA_TOPIC_ID\}"'
|
||||
r'[\s\S]*?else'
|
||||
r'[\s\S]*?INFRA_TOPIC_ID="\$\{METRICS_TELEGRAM_TOPIC_ID:-\}"',
|
||||
r'INFRA_TOPIC_ID="\$\{METRICS_TELEGRAM_INFRA_TOPIC_ID:-\d+\}"',
|
||||
text,
|
||||
), "нет отката на METRICS_TELEGRAM_TOPIC_ID при незаданной METRICS_TELEGRAM_INFRA_TOPIC_ID"
|
||||
), "у инфраструктурной темы нет значения по умолчанию — разделение зависит от ручного шага"
|
||||
assert not re.search(
|
||||
r'INFRA_TOPIC_ID="\$\{METRICS_TELEGRAM_TOPIC_ID',
|
||||
text,
|
||||
), "вернулся откат на тему клиентских инцидентов — это и есть исходный дефект"
|
||||
|
||||
|
||||
def test_config_is_validated_before_stack_comes_up() -> None:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue