Документировать авто-баг-трекер (source/hash/dedupe). Refs EventHub/EventHubBack#35

This commit is contained in:
2026-07-17 00:44:14 +03:00
parent e98f0a800f
commit c0121c1a40
2 changed files with 15 additions and 8 deletions
+10 -5
View File
@@ -121,9 +121,14 @@ EventHub — платформа для управления событиями
- Аудит действий администраторов (`admin_audit`).
### 2.8. Баг-трекер (автоматический)
- При возникновении ошибок сервер автоматически создаёт тикет (`ticket`).
- Тикет содержит хеш ошибки, сообщение, стектрейс, контекст, количество повторений.
- Администраторы могут просматривать тикеты, назначать ответственных, менять статус.
- Источники тикетов (`source`): `backend` (HTTP 500 / внутренние ошибки), `frontend` (клиентский crash), `manual` (ручной репорт).
- При HTTP 500 сервер асинхронно регистрирует тикет через `logic_ticket:report_error` (ответы по путям `/tickets` не репортятся — защита от рекурсии).
- Клиент и ручной репорт: `POST /v1/tickets` с `error_message`, опционально `stacktrace`, `context`, `source` (`frontend` | `manual`). Ручной `manual` — сценарий end-user клиентов, не Admin SPA.
- Тикет содержит `error_hash` (sha256 от source + сообщение + fingerprint стека; для `manual` — source + user_id + сообщение), стектрейс, JSON-контекст, счётчик повторений.
- Дедуп: открытый тикет (`open` / `in_progress`) с тем же `error_hash` — увеличивается `count` и `last_seen`; после `resolved`/`closed` повтор создаёт новый тикет (регрессия).
- Новые тикеты лимитируются (~30/мин на узел); повторы по hash не ограничиваются.
- При создании нового тикета администраторам уходит WS `ticket_created`.
- Администраторы могут просматривать тикеты (фильтр `source`), назначать ответственных, менять статус.
### 2.9. Платная подписка
- Пользователи могут оформить подписку (`subscription`) с разными планами: monthly, quarterly,
@@ -256,7 +261,7 @@ src/
- `PUT /v1/reviews/:id` — обновить отзыв.
- `POST /v1/reports` — пожаловаться.
- `GET /v1/tickets` — тикеты пользователя.
- `POST /v1/tickets` — создать тикет.
- `POST /v1/tickets` — создать или обновить тикет (дедуп по `error_hash`): body `{ error_message, stacktrace?, context?, source?: frontend|manual }`; ответ 201 (или 429 при rate-limit новых).
- `GET /v1/tickets/:id` — статус тикета.
- `GET /v1/subscription` — подписка пользователя.
- `GET /v1/calendars/:calendar_id/view?month=YYYY-MM` — HTML-календарь (владелец), включая архив.
@@ -271,7 +276,7 @@ src/
- `DELETE /v1/admin/reviews/:id` — удалить отзыв.
- `GET /v1/admin/banned-words`, `POST /v1/admin/banned-words` — запрещённые слова.
- `GET /v1/admin/tickets/stats` — статистика тикетов: `total_tickets`, `open`, `in_progress`, `resolved`, `closed`, `total_errors`.
- `GET /v1/admin/tickets`, `GET /v1/admin/tickets/:id` — управление тикетами.
- `GET /v1/admin/tickets` — список с фильтрами `status`, `source`, `assigned_to`, `q`; `GET /v1/admin/tickets/:id` — управление тикетами.
- `GET /v1/admin/subscriptions`, `POST /v1/admin/subscriptions/:id` — подписки.
- `PUT /v1/admin/:target_type/:id` — модерация.
- `GET /v1/admin/me` — профиль администратора.