Комментарии 9
Вот бы еще послушать как вы замеряли время ответа, и не попадает ли туда время работы самого скрипта, а так-же как часто вы эти запросы делаете? Ведь время реакции, скажем на "Упавший" магазин может стоить очень дорого...
Замеряю чисто время отработки curl, вот так:
$start_time = microtime(true);
$response = curl_exec($ch);
$end_time = microtime(true);
$result['response_time_ms'] = intval(round(($end_time - $start_time) * 1000));
Далее, когда сайт уже на мониторинге, беру два последних результата и сравниваю их с последним сообщённым пользователю временем ответа.
Если минимальное время из двух последних в два раза превышает последнее сообщённое время — сообщаю это новое время.
Если максимальное из двух последних в два раза меньше последнего сообщённого — тоже сообщаю.
В обоих случаях разница должна превышать минимальный порог в секунду.
Запросы делаю сейчас раз в 5 минут. Если 2 запроса подряд без ответа — шлю уведомление. К сожалению, многие сайты с завидной регулярностью "мерцают", пришлось добавить такой фильтр. Но некоторые и два раза подряд могут быть недоступны, а на третий раз отвечают — не знаю, с чем связано.
У меня глаза начали кровоточить от sql запроса. :) По-моему это очень сложно. Я бы разбил на хранимые функции как минимум для удобства чтения.
А по проверке самих сайтов: если у пользователя отвалился бекенд то сервер вернёт 200, а при запросе к api пользователь ничего не увидит. Т.е. сайт лег. Но вы этого не увидите. И будете говорить, что с сайтом все ок.
Я бы разбил на хранимые функции как минимум для удобства чтения.
Из преимуществ текущего запроса — всё в одном месте, можно читать не переключаясь.
Но идея с хранимыми функциями мне тоже нравится. Если будет настроение и приведёте пример, какие можно было бы выделить функции — будет интересно.
если у пользователя отвалился бекенд то сервер вернёт 200, а при запросе к api пользователь ничего не увидит
Тут зависит от сайта. Если из-за неработающего API поменяется заголовок страницы, то бот сообщит. Можно, например, создать отдельную проверочную страницу для этих целей.
Можно отдельно добавить сам API в мониторинг (правда, никакой авторизации я не предусматривал).
Простой биллинг для Telegram-бота на SQL