system

errorMonitorService

errorMonitorService

src/main/services/error-monitor.service.ts


Для чого це

Агрегує HTTP-помилки з усіх сервісів і при перевищенні порогу надсилає алерт на сервер. Дозволяє бачити проблеми на стороні оператора без доступу до його логів.


Як додавати помилки

Будь-який сервіс викликає:

errorMonitorService.trackError({ url, method, status, message })

Кожен запис зберігається з timestamp = Date.now(). Буфер — звичайний масив ErrorEntry[].

Хто трекає: tabsService (відповіді вкладок), chatQueue (помилки відправки), dataSync та інші.


Цикл (кожні 30 сек)

  1. cleanup() — видаляє помилки старші 2 хвилин з буфера
  2. getRecentErrors() — бере помилки за останні 2 хв
  3. Якщо recentErrors.length >= 5 І canSendAlert() (cooldown 5 хв) → sendAlert()

Структура алерту

stackService.sendErrorAlert() отримує:

ПолеОпис
operatorNameІм’я з getUser()
operatorIdstackId оператора
totalErrorsКількість помилок у вікні
period"ЧЧ:ХХ:СС — ЧЧ:ХХ:СС" перша і остання помилка
summaryТекстова зведення по ендпоінтах

Формат summary (buildSummary) — групує по "method url", сортує за кількістю:

sendLimited tab/861676 — 3x (no status: Tab response timeout: SocketSendMessage)
loginAndConnect tab/861676/init — 1x (null: Bad status: 500)

Очищення JSESSIONID — з тексту помилок вирізається | JSESSIONID: XXXXX — він є в логах, в алертах зайвий.


Константи

КонстантаЗначенняОпис
CHECK_INTERVAL30 секЧастота перевірки
ERROR_THRESHOLD5Мінімум помилок для алерту
ERROR_WINDOW_MS2 хвВікно підрахунку
ALERT_COOLDOWN_MS5 хвПауза між алертами

Нюанси

  • Помилка самого sendAlert — мовчки ковтається (щоб не створювати рекурсію помилок)
  • Після успішного алерту — errors = [] (не слати повторно ті ж помилки)
  • stop()errors = [], lastAlertAt = 0

Зв’язки

  • Отримує помилки від: tabsService, всіх сервісів
  • Надсилає алерти на: StackSocket