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

Слайд 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 АССИСТЕНТ
Задать вопрос по этой работе