Всем привет! Я уже несколько лет пишу для себя разных телеграм-ботов "помощников" на python, которые делают за меня ту или иную маленькую рутинную задачу - уведомляют меня о чем-то, проверяют аптайм сервисов, пересылают интересное из телеграм-каналов и чатов и тд. Это удобно, потому что телефон всегда под рукой, а возможность что-то поправить на сервере даже не открывая ноутбук, мне доставляет особое удовольствие.  В общем, у меня накопилось много разных небольших шаблонов проектов, которыми я хочу поделиться с хабровчанами. Сразу скажу, что примеры могут быть узкими с точки зрения применения "как есть", но я буду помечать те места, где, меняя несколько строк кода на свои, вы сможете переиспользовать основную часть наработок для своих проектов. Конкретно этот проект я сделал несколько дней назад и он уже принес мне много пользы. Я работаю в Web3 инфраструктурном провайдере и занимаюсь сервисом для индексирования данных смарт-контрактов на EVM-блокчейнах. И качество разрабатываемого сервиса критически зависит от того, насколько "хорошо" работают ноды, с которых сервис в онлайне забирает данные.  Я провел много часов в попытках использования готовых инструментов, которыми пользуется наше инфраструктурное подразделение, типа grafana, betteruptime и прочие, но так как для меня мало интересного во внутренностях системы, при этом много основной интерес для меня представляют именно метрики на входе и на выходе, то я решил написать свой велосипед бота, который бы делал следующее: По моему запросу ходил на сервис, проверял метрики и присылал мне короткий отчет, о текущем положении дел.  По моему другому запросу присылал мне графики, как все происходило в течение последних X часов При возникновении особой ситуации присылал мне уведомление, что что-то в данный момент происходит В данной статье я сосредоточусь на первой части, то есть получении метрик по запросу.  Для работы нам понадобится новое виртуальное окружение Устанавливаем необходимые зависимости Файл с функциями functions.py (вы можете реализовать это классами, но так как пример короткий, я в целом не планировал его делить на модули, но многопочная библиотека требует вынести функции в отдельный файл). Импортируем зависимости  Описываем функцию для проверки состояния. В моем случае это было пройтись по заранее отобранным публичным нодам, получить их последний блок, взять медианное значение, чтобы отфильтровать все, которые возможно показывают что-то не то, а потом проверить уже нашу ноду и сравнить с этой медианой.  Функция провеки состояния сервиса (можете заменить ее на свою): Далее основной файл бота uptime_bot.py. Импортируем библиотеки и функции из файла выше и задаем необходимые константы: Далее описываем функцию, которая будет вызвана в момент вызова команды из UI бота Далее остается только дописать часть, в которой инициализируется бот и к нему подключается функция обработчик: Далее код можно запустить на дешевом VPS сервере через: Предварительно настроив systemd unit-файл. В итоге работа бота будет выглядеть следующим образом: Если все в порядке: А если отставание становится слишком большим, то следующим образом: В следующих статьях я опишу, как можно реализовать две оставшиеся задачи: По запросу получить графики, как все происходило в течение последних X часов. Получить алерт, что что-то в данный момент происходит и требуются действия. Исходный код проекта доступен в репозитории на GitHub. Если этот туториал показался вам полезным, не стесняйтесь поставить звезду на гитхабе, мне будет приятно🙂  Занимаюсь развитием продукта в Chainstack