Skip to content

Noddened/VK-case-ErrLogsBot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ErrLogsBot

Описание проекта

Этот проект представляет собой Telegram-бота, разработанного в рамках кейса от VK. Бот предназначен для мониторинга логов приложения, анализа их в реальном времени и отправки уведомлений о релевантных записях (например, ошибках) в чат.

Бот читает файл logs.log (генерируемый отдельным скриптом), фильтрует записи по регулярным выражениям из файла конфигурации, игнорирует нерелевантные и отправляет выбранные логи в Telegram-чат. Например, он может фокусироваться на ошибках с уровнем [ERROR] или конкретными сообщениями вроде "Invalid input received".

Проект реализован на Go с использованием открытых библиотек (telebot для Telegram API) и соответствует требованиям: анализ logs.log, фильтрация по конфигу, стабильная работа без искажений данных.

Что сделано

Архитектура приложения:

  • cmd/ErrLogsBot/main.go: Точка входа, инициализация компонентов и graceful shutdown.
  • internal/adapters/telegram_adapter.go: Адаптер для Telegram — обработка команд (/start, /stop), управление подписчиками (множественные пользователи с сохранением в JSON).
  • internal/usecases/log_monitor.go: Бизнес-логика мониторинга — polling файла logs.log, фильтрация по regex и broadcast-отправка сообщений юзерам в чат.
  • payload/log_generator.go: Генератор логов (исходный task.go модифицированный и доработанный), с очисткой файла по размеру/линиям.
  • internal/config/config.go: Загрузка конфигурации (токен, фильтры из configs/filters.txt или дефолтные).
  • internal/logger/logger.go: Настраиваемый логгер (text для dev, JSON для prod).
  • internal/utils/escape_markdown.go: Утилита для экранирования MarkdownV2 в сообщениях.

Функциональность:

Бот поддерживает множественных подписчиков: /start — подписка, /stop — отписка. Автоматическое удаление заблокировавших бота пользователей. Фильтрация логов по regex из конфига (дефолт: "ERROR", "Invalid input").

Стабильный мониторинг файла без fsnotify (polling каждые 500ms для надёжности). Graceful shutdown по сигналам (SIGINT, SIGTERM). Очистка logs.log для предотвращения роста (max 200 строк или 5MB). Безопасная работа: нет искажений данных, все операции синхронизированы (sync.Mutex/RWMutex).

Соответствие требованиям кейса:

Разработан с открытыми сервисами (Telegram API, Go stdlib). Анализирует logs.log из генератора. Отправляет только фильтрованные логи. Работает стабильно (тестировано локально и на деплое).

Деплой:

Проект задеплоен на Railway.app для 24/7 работы.

Бот доступен по ссылке: t.me/VKCase_ErrorLogsBot !ПОПРАВКА! Ныне недоступен, для проверки работы потребуется запускать локально!

Установка и запуск локально

git clone https://github.com/Noddened/VK-case-ErrLogsBot.git
cd ErrLogsBot
go mod tidy

# Создайте файл .env в корне:
BOT_TOKEN=your_bot_token_here_from_BotFather
ENV=development  # или production для JSON-логов

# Опционально
# Создайте configs/filters.txt с regex (один на строку), например:
ERROR
Invalid input

# Сборка и запуск:
make run

TODO:

  • Реализовать команду /filters для динамического изменения фильтров в чате юзера.
  • Добавить тесты (unit/integration) для adapters, usecases и config.
  • Улучшить архитектуру и модифицировать код для максимального быстродействия.

Releases

No releases published

Packages

 
 
 

Contributors