43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
"""Health and status endpoints."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter
|
|
|
|
from Project.Sanad.core.logger import get_logger
|
|
|
|
log = get_logger("health_route")
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
def _safe_status(component, name: str) -> dict:
|
|
"""Get status without crashing the whole endpoint if one component fails."""
|
|
if component is None:
|
|
return {"available": False}
|
|
try:
|
|
if hasattr(component, "status") and callable(component.status):
|
|
return component.status()
|
|
return {"available": True}
|
|
except Exception as exc:
|
|
log.warning("status() failed for %s: %s", name, exc)
|
|
return {"available": True, "error": str(exc)}
|
|
|
|
|
|
@router.get("/health")
|
|
async def health():
|
|
from Project.Sanad.main import brain
|
|
return {
|
|
"status": "ok",
|
|
"brain": _safe_status(brain, "brain"),
|
|
}
|
|
|
|
|
|
@router.get("/status")
|
|
async def full_status():
|
|
from Project.Sanad.main import brain, voice_client
|
|
return {
|
|
"brain": _safe_status(brain, "brain"),
|
|
"voice": _safe_status(voice_client, "voice"),
|
|
}
|