Heartbeat-интервалы до 30 дней: мониторинг еженедельных и ежемесячных cron-задач
Вчера пользователь написал нам в Telegram: он мониторит cron-задачи, которые запускаются раз в неделю и раз в месяц, а форма heartbeat-монитора в дашборде ограничивала ожидаемый интервал 24 часами. API при этом спокойно принимал интервалы длиннее — свои мониторы он создал именно через него. Дашборд просто отставал. Справедливое замечание — сегодня исправлено.
Что изменилось
Пресеты интервала до 30 дней. В выпадающем списке «Ожидаемый интервал проверки» к диапазону от минуты до 24 часов добавились 2 дня, 3 дня, 1 неделя, 2 недели и 30 дней — всего тринадцать пресетов. Еженедельные бэкапы, двухнедельные отчёты, ежемесячные выгрузки биллинга — всё это теперь настраивается целиком из интерфейса.
Grace-период до 24 часов. Задача, которая запускается раз в месяц, редко приходит секунда в секунду. Grace-период — дополнительное время, которое мы ждём после ожидаемого интервала перед отправкой алерта, — теперь доходит до 24 часов (добавлены пресеты 2, 6, 12 и 24 часа). Долгий batch-job, съехавший на пару часов, больше не разбудит вас впустую.
Честный аптайм для длинных интервалов. Попутно вскрылся тонкий баг: полностью здоровый еженедельный монитор показывал 0% аптайма за последние 24 часа — потому что за окно, в которое пинг и не должен был попасть, не пришло ни одного пинга. Теперь окна статистики короче одного ожидаемого интервала показывают «нет данных» вместо ложного нуля. Тот же фикс применён к статистике webhook-проверок, включая событийные проверки вовсе без ожидаемой периодичности.
Почему «30 дней», а не «1 месяц»
Лимит бэкенда — ровно 30 дней (2 592 000 секунд). Календарный месяц бывает и 31 день, а 31 день — это в точности 30-дневный интервал плюс максимальный 24-часовой grace: ровно на дедлайне, где любая задержка даст ложный алерт. Поэтому пресет называется честно: 30 дней. Если задача запускается «1-го числа каждого месяца» — настройте монитор на каждые 30 дней, а редкий ранний пинг считайте бонусом.
Как пользоваться
Откройте Мониторы → Создать монитор → Heartbeat, выберите интервал — например, «1 неделя» — и grace-период под типичный дрейф вашей задачи. Добавьте ping-URL монитора в конец cron-задачи:
0 3 * * 1 /usr/local/bin/weekly-backup.sh && curl -fsS https://pingzen.dev/api/v1/ping/YOUR_PING_KEY/YOUR_SLUGЕсли пинг не пришёл за интервал плюс grace — мы оповестим. Если пришёл — вы об этом даже не вспомните, в чём и смысл.
Существующие мониторы, созданные через API, теперь показывают свой реальный интервал в форме редактирования вместо пустого поля.
Спасибо пользователю за репорт — такой фидбек быстро превращается в выкаченные фичи. Заметили что-то странное или чего-то не хватает? Кнопка обратной связи в правом нижнем углу дашборда ведёт прямо к нам.