fix(ops): оповещения уходят в тему «алерты», а не в переговорку (#2203) #3129
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3129
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2203-notify-topic"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Замечено владельцем сразу после включения канала: «шлёт в чат переговорки».
Что происходило
В форуме Telegram адрес сообщения — пара «чат + тема». Без
message_thread_idсообщение попадает в General, и ошибки при этом нет:sendMessageвозвращает 200, доставка формально успешна, просто не туда.Тот же класс отказа, что и всё остальное сегодня: зелено везде, а человек, которому алерт адресован, его не видит.
Правка
Оба отправителя —
ops/lib-backup.sh(бэкапы и сторожа устаревания) иops/uptime-healthcheck.sh— получили условную подстановку:Условная намеренно. Пустой
message_thread_id=Telegram отвергает вместе со всем сообщением, а молчащий алерт хуже алерта не в той теме. Нет переменной — нет параметра, поведение прежнее бит в бит.Переменные на обоих хостах уже заданы (
TELEGRAM_TOPIC_ID=158), так что правка вступит в силу с ближайшим деплоем.Тест исполняет, а не читает
Три вещи, каждая из которых была бы неправдой:
uptime-healthcheck.shнет guard'а поBASH_SOURCE, и сорсинг запустил бы настоящие сетевые проверки.Поэтому тест вырезает
notify()из файла построчно, подсовывает подставнойcurl, который записывает свои аргументы, и смотрит, что реально ушло бы в сеть.Покрыто для обоих скриптов: тема передаётся, когда задана; не передаётся вовсе, когда не задана (обратный конец инварианта — иначе пустое значение уронило бы всю отправку); адресат и текст не вытесняются добавленным параметром.
Мелочь для тех, кто будет запускать тесты локально на Windows
Оболочка определяется запуском: WSL монтирует диски в
/mnt/c, git-bash — в/c. Без этого подставнойcurlне находится и тест падает с «curl не был вызван», хотя код исправен. На Linux (CI) пути уже POSIX и преобразование ничего не меняет.Refs #2203, #3078
Канал включили — и алерты бэкапов посыпались в ОБЩУЮ тему форума. В форуме Telegram адрес сообщения это пара «чат + тема»: без message_thread_id всё попадает в General, причём без единой ошибки. sendMessage возвращает 200, доставка «успешна», просто не туда. Отказ того же класса, что и всё остальное сегодня: зелено везде, а человек, которому адресован алерт, его не видит. Оба отправителя (ops/lib-backup.sh и ops/uptime-healthcheck.sh) получили условную подстановку ${TELEGRAM_TOPIC_ID:+-d "message_thread_id=..."}. Условная намеренно: пустой message_thread_id= Telegram отвергает вместе со всем сообщением, а молчащий алерт хуже алерта не в той теме. Нет переменной — нет параметра, поведение прежнее бит в бит. Тест ИСПОЛНЯЕТ настоящий notify(), извлечённый из файла построчно, подсовывая подставной curl и проверяя, что реально ушло бы в сеть. Проверять подстроку в файле бессмысленно: она может стоять в мёртвой ветке. Копировать функцию в тест — тоже: копия разойдётся с оригиналом на первой правке. Сорсить файл целиком нельзя: у uptime-healthcheck.sh нет guard'а по BASH_SOURCE, и сорсинг запустил бы настоящие сетевые проверки.