From 8ee470f1aafdc698e2f584ce0e783801da169766 Mon Sep 17 00:00:00 2001 From: Pier-Jean Malandrino Date: Fri, 3 Apr 2026 13:53:01 +0200 Subject: [PATCH] Add database ping to health check endpoint Health endpoint now verifies SQLite connectivity and reports a "degraded" status when the database is unreachable, instead of blindly returning "ok". --- document-parser/main.py | 18 ++++++++++++++---- document-parser/tests/test_api_endpoints.py | 3 ++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/document-parser/main.py b/document-parser/main.py index b19f09f..91955f6 100644 --- a/document-parser/main.py +++ b/document-parser/main.py @@ -21,7 +21,7 @@ from fastapi.middleware.cors import CORSMiddleware from api.analyses import router as analyses_router from api.documents import router as documents_router from infra.settings import settings -from persistence.database import init_db +from persistence.database import get_connection, init_db from services.analysis_service import AnalysisService logging.basicConfig( @@ -100,10 +100,20 @@ app.include_router(analyses_router) @app.get("/api/health") -def health() -> dict[str, str]: - """Health check endpoint.""" +async def health() -> dict[str, str]: + """Health check endpoint — verifies database connectivity.""" + db_status = "ok" + try: + async with get_connection() as db: + await db.execute("SELECT 1") + except Exception: + db_status = "error" + logger.warning("Health check: database unreachable", exc_info=True) + + status = "ok" if db_status == "ok" else "degraded" return { - "status": "ok", + "status": status, "version": settings.app_version, "engine": settings.conversion_engine, + "database": db_status, } diff --git a/document-parser/tests/test_api_endpoints.py b/document-parser/tests/test_api_endpoints.py index f185da4..aac7ef3 100644 --- a/document-parser/tests/test_api_endpoints.py +++ b/document-parser/tests/test_api_endpoints.py @@ -29,8 +29,9 @@ class TestHealthEndpoint: resp = client.get("/api/health") assert resp.status_code == 200 data = resp.json() - assert data["status"] == "ok" + assert data["status"] in ("ok", "degraded") assert "engine" in data + assert "database" in data class TestDocumentEndpoints: