bot_errors — Telegram-бот мониторинга ошибок парсера

Telegram-бот на Python, который следит за таблицей ошибок в PostgreSQL и в реальном времени присылает подписчикам каждую новую запись.

bot_errors — Telegram-бот мониторинга ошибок парсера — фото 1
нажмите для просмотра в полном размере

Слайд 1 из 2

ОПИСАНИЕ

Бот отслеживает появление новых строк в таблице parser.errors (журнал сбоев внешнего парсера маркетплейса) и рассылает их подписчикам в Telegram. Реализован на чистом requests: собственный цикл long polling getUpdates с ведением offset, продлением timeout и повторными попытками при сетевых сбоях. Архитектура двухпоточная: основной поток обрабатывает команды (/start, /stop), а фоновый daemon-поток опрашивает БД. Список подписчиков хранится в памяти в set под threading.Lock. Соединение с PostgreSQL (psycopg2, DictCursor) настроено с TCP keepalive для долгоживущего процесса. Нетривиальная часть — самонастройка под структуру таблицы. Бот опрашивает information_schema.columns и находит целочисленную ключевую колонку (id или error_id любого integer/serial-типа), используя её как монотонный курсор. При первом запуске он выставляет baseline last_notified_id = MAX(id) в singleton- таблице bots.bot_errors_state, чтобы не рассылать исторический «хвост», и далее выбирает только новые строки порциями по 200 (WHERE id > last_id ORDER BY id). Каждая запись форматируется с фиксированным порядком полей, длинные сообщения разбиваются на части под лимит Telegram (4096 символов).

ИСПОЛЬЗУЕМЫЕ ИНСТРУМЕНТЫ

  • Python
  • Telegram Bot API
  • requests
  • PostgreSQL
  • psycopg2
  • SQL
  • threading
  • Git

РЕЗУЛЬТАТ

  • Реализован мониторинг таблицы parser.errors с рассылкой новых записей в реальном времени.
  • Реализован ручной long polling поверх requests с ведением offset и повторными попытками при сетевых ошибках.
  • Построена двухпоточная схема: фоновый поток опрашивает БД, основной обрабатывает команды; подписчики хранятся потокобезопасно.
  • Реализовано автоопределение ключевой колонки таблицы через information_schema и baseline-курсор для исключения исторических записей при первом запуске.
  • Реализована постраничная выборка новых строк и устойчивое хранение позиции курсора в singleton-таблице.

AI АССИСТЕНТ

Задать вопрос по этой работе