A. Подготовка 1. Разрешите боту писать вам. Откройте https://t.me/We2EngineBot и отправьте любое сообщение. Без этого Telegram отвечает chat not found и личный алерт не придёт — бот не может написать первым. В ответ бот пришлёт номер вашего чата. 2. Заведите сайт с заведомо битым доменом. В вебконсоли под тестовым вебмастером (AlexAlexeenko, id 160) создайте сайт и добавьте ему домен, которого не существует в DNS, например broken.aqa-4367-<что-нибудь>.ru. Сам домен резолвиться не должен — на этом и строится проверка. IP сайта оставьте стендовый (84.201.186.26), он понадобится для метки «наш». 3. Впишите свой Telegram в профиль вебмастера. Поле telegram_ids у вебмастера 160 — это jsonb-массив, туда идёт номер чата из шага 1: [183129301]. Правится в профиле вебмастера в консоли либо напрямую: update webmaster set telegram_ids = '[183129301]'::jsonb where id = 160; 4. Запомните id домена — он нужен почти в каждом шаге: select wd.id, wd.domain, wd.is_available, w.id as website_id, w.title from website_domain wd join website w on w.id = wd.website_id where wd.domain = 'broken.aqa-4367-<ваш>.ru'; 5. Команда проверки живёт в поде k8. Имя пода меняется после каждой раскатки: kubectl get pod -n k8 -l app=we -o jsonpath="{.items[0].metadata.name}" Дальше во всех командах — это оно. B. Как вообще выстреливает алерт — прочитайте до первого запуска Порог — три неудачные попытки подряд. Причина MAX_ATTEMPTS_REACHED, единственная, на которую подписан канал вебмастера, поднимается только в момент перехода домена из «доступен» в «недоступен». После первого срабатывания website_domain.is_available становится false, и сколько ни запускай команду дальше — новых алертов не будет. Это не баг и не зависание, это устройство листенера. Чтобы выстрелило повторно, верните флаг: update website_domain set is_available = true where id = ; Счётчик website_domain_availability.attempts при этом сохраняется, так что после первого прохода хватает одного запуска команды вместо трёх. Второе: доставка идёт через очередь и внешний прокси, который на стенде отвечает примерно в трети случаев. Если алерт не пришёл — это чаще всего таймаут прокси, а не дефект. Смотрите лог (шаг I) и повторяйте. C. Упрощённый алерт в личку вебмастера Запускайте с ключом --channels=webmasters — тогда в общий чат WE2.0 Alerts ничего не уйдёт и вы не зашумите коллег: kubectl exec -n k8 -c we -- sh -c "cd /var/www/we2project && php yii site-available-checker --domain=broken.aqa-4367-<ваш>.ru --channels=webmasters --verbose=1" Первые два запуска дадут строку Rejected: ... (cURL error 6: Could not resolve host ...), третий добавит к ней Max attempts (3) reached. — вот на нём и уходит алерт. Смотрите в личку. Ожидаемый состав по ТЗ, сверху вниз: дата и время, название сайта, ID сайта, строка «Обнаружена недоступность доменов вашего сайта:», список доменов, текст ошибки. Домен должен быть ссылкой на себя, ошибка — моноширинным блоком. На что смотреть придирчиво: в личном алерте не должно быть ни ID веба в CPA, ни ip, ни crt/upd, ни блоков dns. Если они там есть — перепутаны рендереры. D. Расширенный алерт в чат WE2.0 Alerts Тот же запуск, но без --channels — уйдут оба канала: kubectl exec -n k8 -c we -- sh -c "cd /var/www/we2project && php yii site-available-checker --domain=broken.aqa-4367-<ваш>.ru --verbose=1" Не забудьте перед этим вернуть is_available = true, иначе порог не сработает. И учтите, что сообщение увидит вся команда в чате алертов. Сверяйте заголовок: название сайта, ID сайта, ID веба в CPA с почтой вебмастера в скобках, ip с пометкой, crt, upd. Дальше «Недоступные домены:» и по каждому — ссылка, блок dns со ссылками A и AAAA на dns.google/resolve, и диагностический текст моноширинным блоком. MSYS_NO_PATHCONV=1 kubectl cp -n k8 -c we repro.php "we-6fcf7956fb-566c6:/tmp/repro.php" kubectl exec -n k8 we-6fcf7956fb-566c6 -c we -- php /tmp/repro.php 194251450