from fastapi import APIRouter from app.core.logging import get_logger from app.db.platform_store import get_platform_store from app.core.config import get_settings from app.modules.storage.minio_store import ObjectStorageError, get_object_storage router = APIRouter() logger = get_logger(__name__) @router.get("/health") async def health_check() -> dict[str, object]: # Health endpoints are called frequently by Docker and the frontend. # Keep failures visible without emitting one INFO line per probe. logger.debug("health check requested") storage_status: dict[str, object] = {"enabled": get_settings().minio_enabled, "status": "disabled"} if get_settings().minio_enabled: try: get_object_storage().ensure_bucket() storage_status = { "enabled": True, "status": "ready", "endpoint": get_settings().minio_endpoint, "bucket": get_settings().minio_bucket, } except (ObjectStorageError, OSError) as exc: logger.warning("MinIO health check failed: %s", exc) storage_status = { "enabled": True, "status": "unavailable", "endpoint": get_settings().minio_endpoint, "error": str(exc), } return { "code": 0, "message": "ok", "data": {**get_platform_store().health_metrics(), "storage": storage_status}, }