monitoring_web_resource - Telegram bot для мониторинга web ресурсов на предмет их доступности для пользователей
Примечание! - проект находится в стадии разработки.
Первоначально проблема возникла там, где я ее не ждал.
У меня есть небольшой сайт, на котором я публикую статьи про работу над своими pet-проектами,
делюсь своими размышлениями при решении задач на LeetCode и пока немного пишу про цифровую доступность.
Сайт работает на CMS WordPress и размещен на виртуальном хостинге от Timeweb.
И вот в один прекрасный вечер я решил подготовить новую статью для публикации, и... сайт мой оказался недоступен.
Никаких проблем в личном кабинете Timeweb не было обнаружено. После проведения небольшого расследования и прогона сайта и IP адреса по реестрам Роскомнадзора
было обнаружено, что IP адрес находится в реестре ресурсов, доступ к которым был заблокирован. Учитывая, что хостинг этот виртуальный,
на данном IP адресе находилось около двух с половиной тысяч различных сайтов, в том числе и мой.
Правда, через непродолжительный промежуток времени сайт снова стал доступен. Позже такая ситуация повторилась несколько раз, причем только через моего интернет-провайдера.
Раз есть проблема - значит нужно ее решать, причем решать быстро.
Как ни крути, самым верным решением проблемы будет перенос сайта на выделенный сервер с собственным IP адресом. Такой сервер у меня есть, на нем размещен мой Telegram bot Работа для всех. Конечно, я так и сделаю, когда появится свободное время и желание заняться переездом. Но пока нет ни того ни другого, поэтому мне пришла другая идея!
Я сейчас готовлюсь к поиску работы, поэтому стараюсь больше времени уделять изучению (повторению ранее пройденного материала) языка Python
и его возможного практического применения. Конечно, курсы на Stepik - это здорово, но без практики - это впустую потраченное время.
Вот тут мне и пришла идея написать небольшой Telegram бот, который с определенной периодичностью будет отправлять GET запрос на сайт и, если код статуса ответа не равен 200,
сообщать мне об этом. Если код 200, то никаких сообщений бот не направляет.
Согласен, что сервисы по мониторингу работы сайтов есть, в том числе и бесплатные.
Но моя основная цель при работе над этим проектом - получить практический опыт, пройдя весь путь от идеи до работающего продукта.
Кроме того, есть еще одна похожая задача, решить которую может помочь этот бот. После того как я запустил своего первого Telegram бота, возник вопрос, как контролировать его работу.
Сейчас я это делаю "руками", но считаю это временным и немасштабируемым решением. Придется поломать голову над решением этой задачи, но это будет достойно второй версии сервиса.
Основная логика работы бота будет достаточно простой. Пользователь может добавлять и удалять web ресурсы, которые он хотел бы отслеживать. Для добавления ресурса пользователь
отправляет боту url адрес формата "https://touch-it.ru/". После валидации сайт будет добавлен в базу вместе с id пользователя.
Пока пользователь не будет иметь возможность самостоятельно устанавливать периодичность опроса сайта. Ресурсы будут проверятся один раз в 3 часа. Возможно, что далее такая опция будет добавлена.
Пользователь всегда может посмотреть весь список добавленных им для отслеживания web ресурсов. Пользователь также сможет самостоятельно проверить один или все добавленные ресурсы.
Для разработки бота я использую библиотеку Aiogram.
В этом боте я не хочу использовать ORM для работы с данными. Считаю это избыточным, да и хотелось бы попробовать реализовать другой подход.
Я написал модуль database с функциями, которые отвечают за создание таблиц, добавление, получение и удаление данных об отслеживаемых ресурсах. Для этого я использовал встроенный модуль sqlite3.
Кроме того, в этом проекте для хранения секретных данных (токена, id администратора, названия базы данных и таблицы) я использовал библиотеку Pydantic и Pydantic_settings.
И еще я стараюсь сразу писать тесты с использованием библиотеки Pytest.
Чтобы этот проект отличался от предыдущего бота, разворачивать его на сервере я планирую без использования инструментов контейнеризации.
- Python: 3.12
- SQLite
- Aiogram: 3.4.1
- Pydantic: 2.5.3
- Pydantic-settings: 2.2.1
- Pytest: 8.1.1
Подробнее с используемыми зависимостями вы можете ознакомиться в файле requirements.txt
Меня зовут Барабанщиков Кирилл, я python backend-разработчик.
- Telegram: https://t.me/Kirill_Barabanshchikov
- Электронная почта: bks2408@mail.ru