[Taiga #60] Добавить endpoint /api/v1/diagnostics для просмотра диагностики сервиса #5

Open
opened 2026-05-18 21:58:56 +00:00 by Grigo · 0 comments
Owner

Linked Taiga story: #60

Suggested branch:
feature/taiga-60-dobavit-endpoint-api-v1-diagnostics-dlya-prosmotra-diagnosti

Project type: work
AI tags: work, ais, backend, api, diagnostics, monitoring, rest

Description

Требуется реализовать новый REST endpoint, который будет возвращать базовую диагностическую информацию сервиса AISHub. Endpoint должен предоставить информацию о состоянии компонентов, активных подписчиков, использование памяти и другие метрики для мониторинга и отладки. Endpoint должен быть добавлен в REST API слой (src/ais_hub/publish/rest.py) и зарегистрирован в aiohttp приложении (src/ais_hub/app.py).

Taiga: https://tasks.grigowashere.ru/project//us/60

Acceptance criteria

  • Endpoint GET /api/v1/diagnostics возвращает HTTP 200 с JSON телом
  • Ответ содержит информацию о состоянии подсистем (ingest, parser, storage, publish)
  • Ответ содержит текущее использование памяти процессом
  • Ответ содержит количество активных задач asyncio
  • Ответ содержит информацию о подключениях WebSocket
  • Ответ содержит временные метрики (uptime, последние обновления компонентов)
  • Endpoint задокументирован в docs/API.md
  • Добавлены smoke-тесты в tests/test_rest_smoke.py для проверки доступности и валидности ответа

Code notes

  • В src/ais_hub/core/stats.py уже реализован класс Stats с методом to_dict(), который может быть переиспользован как часть диагностики.
  • В src/ais_hub/core/state.py хранится State с информацией о ownship, vessels, base_stations, atons - может быть полезно для информации о количестве отслеживаемых целей.
  • В src/ais_hub/publish/rest.py уже реализованы обработчики для /health, /stats, /vessels - следовать аналогичному паттерну для diagnostics.
  • В tests/test_rest_smoke.py есть примеры тестирования других endpoints (test_vessels_endpoint_reflects_state), можно использовать как шаблон.
  • Для сбора информации о памяти вероятно потребуется импорт psutil (проверить в зависимостях pyproject.toml) или использовать встроенный tracemalloc.
  • Информацию об asyncio задачах можно получить через asyncio.all_tasks() с фильтрацией по имени.

Questions

  • Какую информацию о каждой подсистеме (ingest, parser, storage) необходимо включить? Только статус (up/down) или также детали (количество обработанных сообщений, текущая скорость)?
  • Следует ли включать информацию об отдельных UDP слушателях (ais_udp, aiscatcher_udp, radio_udp, gps_uart) или достаточно агрегированной информации по ingest?
  • Нужно ли в диагностике указывать версию сервиса или это только для /api/v1/health?
  • Требуется ли история диагностических метрик или только текущий снимок?
  • Есть ли специфические требования по чувствительности данных в ответе (например, полные пути до конфиг-файлов или базы данных)?
Linked Taiga story: #60 Suggested branch: `feature/taiga-60-dobavit-endpoint-api-v1-diagnostics-dlya-prosmotra-diagnosti` Project type: `work` AI tags: work, ais, backend, api, diagnostics, monitoring, rest ## Description Требуется реализовать новый REST endpoint, который будет возвращать базовую диагностическую информацию сервиса AISHub. Endpoint должен предоставить информацию о состоянии компонентов, активных подписчиков, использование памяти и другие метрики для мониторинга и отладки. Endpoint должен быть добавлен в REST API слой (src/ais_hub/publish/rest.py) и зарегистрирован в aiohttp приложении (src/ais_hub/app.py). Taiga: https://tasks.grigowashere.ru/project//us/60 ## Acceptance criteria - Endpoint GET /api/v1/diagnostics возвращает HTTP 200 с JSON телом - Ответ содержит информацию о состоянии подсистем (ingest, parser, storage, publish) - Ответ содержит текущее использование памяти процессом - Ответ содержит количество активных задач asyncio - Ответ содержит информацию о подключениях WebSocket - Ответ содержит временные метрики (uptime, последние обновления компонентов) - Endpoint задокументирован в docs/API.md - Добавлены smoke-тесты в tests/test_rest_smoke.py для проверки доступности и валидности ответа ## Code notes - В src/ais_hub/core/stats.py уже реализован класс Stats с методом to_dict(), который может быть переиспользован как часть диагностики. - В src/ais_hub/core/state.py хранится State с информацией о ownship, vessels, base_stations, atons - может быть полезно для информации о количестве отслеживаемых целей. - В src/ais_hub/publish/rest.py уже реализованы обработчики для /health, /stats, /vessels - следовать аналогичному паттерну для diagnostics. - В tests/test_rest_smoke.py есть примеры тестирования других endpoints (test_vessels_endpoint_reflects_state), можно использовать как шаблон. - Для сбора информации о памяти вероятно потребуется импорт psutil (проверить в зависимостях pyproject.toml) или использовать встроенный tracemalloc. - Информацию об asyncio задачах можно получить через asyncio.all_tasks() с фильтрацией по имени. ## Questions - Какую информацию о каждой подсистеме (ingest, parser, storage) необходимо включить? Только статус (up/down) или также детали (количество обработанных сообщений, текущая скорость)? - Следует ли включать информацию об отдельных UDP слушателях (ais_udp, aiscatcher_udp, radio_udp, gps_uart) или достаточно агрегированной информации по ingest? - Нужно ли в диагностике указывать версию сервиса или это только для /api/v1/health? - Требуется ли история диагностических метрик или только текущий снимок? - Есть ли специфические требования по чувствительности данных в ответе (например, полные пути до конфиг-файлов или базы данных)?
Grigo added the workaisbackenddiagnosticsmonitoringapirest labels 2026-05-18 21:58:58 +00:00
Sign in to join this conversation.