errorMonitorService
src/main/services/error-monitor.service.ts
Для чого це
Агрегує HTTP-помилки з усіх сервісів і при перевищенні порогу надсилає алерт на сервер. Дозволяє бачити проблеми на стороні оператора без доступу до його логів.
Як додавати помилки
Будь-який сервіс викликає:
errorMonitorService.trackError({ url, method, status, message })Кожен запис зберігається з timestamp = Date.now(). Буфер — звичайний масив ErrorEntry[].
Хто трекає: tabsService (відповіді вкладок), chatQueue (помилки відправки), dataSync та інші.
Цикл (кожні 30 сек)
cleanup()— видаляє помилки старші 2 хвилин з буфераgetRecentErrors()— бере помилки за останні 2 хв- Якщо
recentErrors.length >= 5ІcanSendAlert()(cooldown 5 хв) →sendAlert()
Структура алерту
stackService.sendErrorAlert() отримує:
| Поле | Опис |
|---|---|
operatorName | Ім’я з getUser() |
operatorId | stackId оператора |
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_INTERVAL | 30 сек | Частота перевірки |
ERROR_THRESHOLD | 5 | Мінімум помилок для алерту |
ERROR_WINDOW_MS | 2 хв | Вікно підрахунку |
ALERT_COOLDOWN_MS | 5 хв | Пауза між алертами |
Нюанси
- Помилка самого
sendAlert— мовчки ковтається (щоб не створювати рекурсію помилок) - Після успішного алерту —
errors = [](не слати повторно ті ж помилки) stop()→errors = [],lastAlertAt = 0
Зв’язки
- Отримує помилки від: tabsService, всіх сервісів
- Надсилає алерти на: StackSocket