SCORECARDAPI2 / health.py
zombee11's picture
Upload 32 files
ede4a2e verified
Raw
History Blame Contribute Delete
1.08 kB
from fastapi import APIRouter, Depends
from redis import Redis
from sqlalchemy import text
from sqlalchemy.orm import Session
from app.core.config import get_settings
from app.db.session import get_db
from app.schemas.scorecard import HealthResponse
router = APIRouter(tags=["Health"])
@router.get("/health", response_model=HealthResponse)
def health(db: Session = Depends(get_db)) -> HealthResponse:
database = "ok"
redis_status = "disabled"
details = {}
try:
db.execute(text("SELECT 1"))
except Exception as exc:
database = "error"
details["database_error"] = str(exc)
settings = get_settings()
if settings.redis_url:
try:
Redis.from_url(settings.redis_url).ping()
redis_status = "ok"
except Exception as exc:
redis_status = "error"
details["redis_error"] = str(exc)
status = "ok" if database == "ok" and redis_status in {"ok", "disabled"} else "degraded"
return HealthResponse(status=status, database=database, redis=redis_status, details=details)