Project type: work
AI tags: work, ais, backend, rest-api, diagnostics, monitoring
Description
Реализовать новый REST endpoint, который возвращает базовую информацию о состоянии и диагностике сервиса AISHub. Endpoint должен предоставлять информацию о статусе подсистем, активных соединениях, использовании памяти и других метриках здоровья сервиса. Логика должна быть добавлена в модуль src/ais_hub/publish/rest.py, который уже содержит остальные REST endpoints, и должна быть задокументирована в docs/API.md.
Endpoint GET /api/v1/diagnostics доступен и возвращает 200 OK
Ответ содержит статус подсистем инжеста (AIS UDP, GPS UART, radio UDP) - работают/не работают
Ответ содержит информацию о статусе БД (подключение, размер файла, WAL статус)
Ответ содержит информацию о памяти: текущее использование, пиковое использование (если доступно)
Ответ содержит информацию о WebSocket соединениях: количество активных клиентов
Ответ содержит информацию о системных очередях: размеры и количество дропов
Endpoint задокументирован в docs/API.md с примером ответа
Добавлены тесты для нового endpoint в tests/test_rest_smoke.py или отдельном файле
Code notes
В src/ais_hub/app.py используется pattern supervisors для управления подсистемами — потребуется доступ к их состоянию для диагностики.
src/ais_hub/core/stats.py уже содержит счетчики и gauges, которые могут быть полезны для диагностики (ais_fragment_timeouts, parser_in_dropped, etc.)
src/ais_hub/publish/rest.py следует использовать для добавления нового endpoint, он уже содержит структурированный код для обработки REST запросов.
Существует тестовый файл tests/test_rest_smoke.py, который проверяет REST endpoints — туда можно добавить тесты для diagnostics.
Информацию о WebSocket клиентах вероятно можно получить из src/ais_hub/publish/ws.py.
src/ais_hub/storage/db.py использует aiosqlite (WAL mode) — нужно проверить как получить информацию о статусе БД без прямого доступа к файлам.
Questions
Какие именно подсистемы должны быть отражены в статусе инжеста? Следует ли проверять только те, которые включены в конфиге, или все возможные?
Нужна ли история диагностики (тренды) или достаточно моментального снимка?
Какие метрики памяти наиболее важны для embedded-среды: текущее использование, пиковое, RSS, VMS?
Должен ли endpoint включать информацию о каждом источнике инжеста отдельно (например, статистика по каждому UDP порту) или только агрегированный статус?
Нужно ли добавлять информацию о версии сервиса в диагностический ответ или это уже есть в /health?
Linked Taiga story: #53
Suggested branch:
`feature/taiga-53-dobavit-endpoint-api-v1-diagnostics-dlya-bazovoy-diagnostiki`
Project type: `work`
AI tags: work, ais, backend, rest-api, diagnostics, monitoring
## Description
Реализовать новый REST endpoint, который возвращает базовую информацию о состоянии и диагностике сервиса AISHub. Endpoint должен предоставлять информацию о статусе подсистем, активных соединениях, использовании памяти и других метриках здоровья сервиса. Логика должна быть добавлена в модуль src/ais_hub/publish/rest.py, который уже содержит остальные REST endpoints, и должна быть задокументирована в docs/API.md.
Taiga: https://tasks.grigowashere.ru/project//us/53
## Acceptance criteria
- Endpoint GET /api/v1/diagnostics доступен и возвращает 200 OK
- Ответ содержит статус подсистем инжеста (AIS UDP, GPS UART, radio UDP) - работают/не работают
- Ответ содержит информацию о статусе БД (подключение, размер файла, WAL статус)
- Ответ содержит информацию о памяти: текущее использование, пиковое использование (если доступно)
- Ответ содержит информацию о WebSocket соединениях: количество активных клиентов
- Ответ содержит информацию о системных очередях: размеры и количество дропов
- Endpoint задокументирован в docs/API.md с примером ответа
- Добавлены тесты для нового endpoint в tests/test_rest_smoke.py или отдельном файле
## Code notes
- В src/ais_hub/app.py используется pattern supervisors для управления подсистемами — потребуется доступ к их состоянию для диагностики.
- src/ais_hub/core/stats.py уже содержит счетчики и gauges, которые могут быть полезны для диагностики (ais_fragment_timeouts, parser_in_dropped, etc.)
- src/ais_hub/publish/rest.py следует использовать для добавления нового endpoint, он уже содержит структурированный код для обработки REST запросов.
- Существует тестовый файл tests/test_rest_smoke.py, который проверяет REST endpoints — туда можно добавить тесты для diagnostics.
- Информацию о WebSocket клиентах вероятно можно получить из src/ais_hub/publish/ws.py.
- src/ais_hub/storage/db.py использует aiosqlite (WAL mode) — нужно проверить как получить информацию о статусе БД без прямого доступа к файлам.
## Questions
- Какие именно подсистемы должны быть отражены в статусе инжеста? Следует ли проверять только те, которые включены в конфиге, или все возможные?
- Нужна ли история диагностики (тренды) или достаточно моментального снимка?
- Какие метрики памяти наиболее важны для embedded-среды: текущее использование, пиковое, RSS, VMS?
- Должен ли endpoint включать информацию о каждом источнике инжеста отдельно (например, статистика по каждому UDP порту) или только агрегированный статус?
- Нужно ли добавлять информацию о версии сервиса в диагностический ответ или это уже есть в /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: #53
Suggested branch:
feature/taiga-53-dobavit-endpoint-api-v1-diagnostics-dlya-bazovoy-diagnostikiProject type:
workAI tags: work, ais, backend, rest-api, diagnostics, monitoring
Description
Реализовать новый REST endpoint, который возвращает базовую информацию о состоянии и диагностике сервиса AISHub. Endpoint должен предоставлять информацию о статусе подсистем, активных соединениях, использовании памяти и других метриках здоровья сервиса. Логика должна быть добавлена в модуль src/ais_hub/publish/rest.py, который уже содержит остальные REST endpoints, и должна быть задокументирована в docs/API.md.
Taiga: https://tasks.grigowashere.ru/project//us/53
Acceptance criteria
Code notes
Questions