Документировать авто-баг-трекер (source/hash/dedupe). Refs EventHub/EventHubBack#35
This commit is contained in:
+10
-5
@@ -121,9 +121,14 @@ EventHub — платформа для управления событиями
|
|||||||
- Аудит действий администраторов (`admin_audit`).
|
- Аудит действий администраторов (`admin_audit`).
|
||||||
|
|
||||||
### 2.8. Баг-трекер (автоматический)
|
### 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. Платная подписка
|
### 2.9. Платная подписка
|
||||||
- Пользователи могут оформить подписку (`subscription`) с разными планами: monthly, quarterly,
|
- Пользователи могут оформить подписку (`subscription`) с разными планами: monthly, quarterly,
|
||||||
@@ -256,7 +261,7 @@ src/
|
|||||||
- `PUT /v1/reviews/:id` — обновить отзыв.
|
- `PUT /v1/reviews/:id` — обновить отзыв.
|
||||||
- `POST /v1/reports` — пожаловаться.
|
- `POST /v1/reports` — пожаловаться.
|
||||||
- `GET /v1/tickets` — тикеты пользователя.
|
- `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/tickets/:id` — статус тикета.
|
||||||
- `GET /v1/subscription` — подписка пользователя.
|
- `GET /v1/subscription` — подписка пользователя.
|
||||||
- `GET /v1/calendars/:calendar_id/view?month=YYYY-MM` — HTML-календарь (владелец), включая архив.
|
- `GET /v1/calendars/:calendar_id/view?month=YYYY-MM` — HTML-календарь (владелец), включая архив.
|
||||||
@@ -271,7 +276,7 @@ src/
|
|||||||
- `DELETE /v1/admin/reviews/:id` — удалить отзыв.
|
- `DELETE /v1/admin/reviews/:id` — удалить отзыв.
|
||||||
- `GET /v1/admin/banned-words`, `POST /v1/admin/banned-words` — запрещённые слова.
|
- `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/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` — подписки.
|
- `GET /v1/admin/subscriptions`, `POST /v1/admin/subscriptions/:id` — подписки.
|
||||||
- `PUT /v1/admin/:target_type/:id` — модерация.
|
- `PUT /v1/admin/:target_type/:id` — модерация.
|
||||||
- `GET /v1/admin/me` — профиль администратора.
|
- `GET /v1/admin/me` — профиль администратора.
|
||||||
|
|||||||
@@ -118,16 +118,18 @@
|
|||||||
|
|
||||||
### 4.7. Тикеты (баг-трекер)
|
### 4.7. Тикеты (баг-трекер)
|
||||||
|
|
||||||
Эндпоинты: `GET /v1/admin/tickets`, `GET /v1/admin/tickets/stats`, `GET /v1/admin/tickets/:id`, `PUT /v1/admin/tickets/:id`, `DELETE /v1/admin/tickets/:id`
|
Эндпоинты: `GET /v1/admin/tickets` (фильтры `status`, `source`, `assigned_to`, `q`), `GET /v1/admin/tickets/stats`, `GET /v1/admin/tickets/:id`, `PUT /v1/admin/tickets/:id`, `DELETE /v1/admin/tickets/:id`; создание/авто-репорт: `POST /v1/tickets` (user/admin JWT).
|
||||||
|
|
||||||
Функциональность:
|
Функциональность:
|
||||||
- Статистика вверху: открыто, в работе, решено, закрыто.
|
- Статистика вверху: открыто, в работе, решено, закрыто.
|
||||||
- Список с серверной пагинацией и сортировкой.
|
- Список с серверной пагинацией и сортировкой; колонка и фильтр `source` (`backend` / `frontend` / `manual`).
|
||||||
- Первая колонка — иконка для перехода на детальную страницу.
|
- Первая колонка — иконка для перехода на детальную страницу.
|
||||||
- Резолвинг назначенного администратора (ссылка с ником/email).
|
- Резолвинг назначенного администратора (ссылка с ником/email).
|
||||||
- Статусы раскрашены (open — красный, in_progress — синий, resolved — зелёный, closed — серый).
|
- Статусы раскрашены (open — красный, in_progress — синий, resolved — зелёный, closed — серый).
|
||||||
- Детальная страница: все поля тикета, отправитель как ссылка на пользователя, назначенный администратор как ссылка, форма изменения статуса с выбором администратора из списка (email — ник).
|
- Детальная страница: все поля тикета (включая `source`), отправитель как ссылка на пользователя, назначенный администратор как ссылка, форма изменения статуса с выбором администратора из списка (email — ник).
|
||||||
- Кнопка удаления с подтверждением.
|
- Кнопка удаления с подтверждением.
|
||||||
|
- Авто-capture ошибок самой Admin SPA: `window.onerror`, `unhandledrejection`, `ErrorBoundary` → `POST /v1/tickets` (`source=frontend`) с throttle.
|
||||||
|
- Ручной баг-репорт (`source=manual`) — клиентский сценарий end-user приложений через `POST /v1/tickets`, не UI Control Center.
|
||||||
|
|
||||||
### 4.8. Подписки (Subscriptions)
|
### 4.8. Подписки (Subscriptions)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user