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).
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?
- Требуется ли история диагностических метрик или только текущий снимок?
- Есть ли специфические требования по чувствительности данных в ответе (например, полные пути до конфиг-файлов или базы данных)?
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Linked Taiga story: #60
Suggested branch:
feature/taiga-60-dobavit-endpoint-api-v1-diagnostics-dlya-prosmotra-diagnostiProject type:
workAI 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
Code notes
Questions