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)