41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
"""Endpoint для проверки здоровья."""
|
||
|
||
from fastapi import APIRouter, Depends
|
||
from sqlalchemy import text
|
||
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
||
from core.config import get_settings
|
||
from core.db import get_session
|
||
from core.redis import redis_client
|
||
|
||
router = APIRouter()
|
||
|
||
|
||
@router.get("/api/health")
|
||
async def health(session: AsyncSession = Depends(get_session)) -> dict[str, bool | str]:
|
||
"""Отчет о статусе приложения и связи с БД/Redis.
|
||
|
||
Поле `version` — версия инстанса (`VIDCONF_VERSION` из `.env`,
|
||
пишет `install.sh` из корневого файла `VERSION`); футер админки
|
||
берёт его отсюда, а не из версии сборки фронтенда.
|
||
"""
|
||
db_ok = False
|
||
try:
|
||
await session.execute(text("SELECT 1"))
|
||
db_ok = True
|
||
except Exception: # noqa: BLE001
|
||
db_ok = False
|
||
|
||
redis_ok = False
|
||
try:
|
||
redis_ok = bool(await redis_client.ping())
|
||
except Exception: # noqa: BLE001
|
||
redis_ok = False
|
||
|
||
return {
|
||
"status": "ok",
|
||
"db": db_ok,
|
||
"redis": redis_ok,
|
||
"version": get_settings().vidconf_version,
|
||
}
|