45 lines
1.2 KiB
Python

from fastapi import APIRouter, HTTPException, Request
from app.services.db import health_check
router = APIRouter()
def _startup_payload(request: Request) -> dict:
return {
"started": bool(getattr(request.app.state, "startup_started", False)),
"complete": bool(getattr(request.app.state, "startup_complete", False)),
"error": getattr(request.app.state, "startup_error", None),
"warnings": dict(getattr(request.app.state, "background_warnings", {}) or {}),
}
def _readiness_payload(request: Request) -> tuple[bool, dict]:
db_ok = health_check()
startup = _startup_payload(request)
ready = db_ok and startup["complete"] and not startup["error"]
payload = {
"status": "ok" if ready else "not_ready",
"db": "ok" if db_ok else "unavailable",
"startup": startup,
}
return ready, payload
@router.get("/health/live")
def liveness():
return {"status": "ok"}
@router.get("/health/ready")
def readiness(request: Request):
ready, payload = _readiness_payload(request)
if not ready:
raise HTTPException(status_code=503, detail=payload)
return payload
@router.get("/health")
def health(request: Request):
return readiness(request)