Changes committed
This commit is contained in:
51
docengine/app/api/v1/health.py
Normal file
51
docengine/app/api/v1/health.py
Normal file
@@ -0,0 +1,51 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
import redis
|
||||
from fastapi import APIRouter, status
|
||||
|
||||
from app.core.config import settings
|
||||
from app.core.database import check_database_connection
|
||||
from app.schemas.common import HealthResponse
|
||||
|
||||
router = APIRouter(tags=["Health"])
|
||||
|
||||
|
||||
@router.get(
|
||||
"/health",
|
||||
response_model=HealthResponse,
|
||||
status_code=status.HTTP_200_OK,
|
||||
summary="Health Check",
|
||||
description="Check the health status of the application and its dependencies.",
|
||||
)
|
||||
async def health_check() -> HealthResponse:
|
||||
"""Perform health check on all system components."""
|
||||
# Check database
|
||||
db_status = "healthy" if check_database_connection() else "unhealthy"
|
||||
|
||||
# Check Redis
|
||||
redis_status = "healthy"
|
||||
try:
|
||||
r = redis.Redis(
|
||||
host=settings.redis_host,
|
||||
port=settings.redis_port,
|
||||
db=settings.redis_db,
|
||||
password=settings.redis_password or None,
|
||||
socket_timeout=3,
|
||||
)
|
||||
r.ping()
|
||||
r.close()
|
||||
except Exception:
|
||||
redis_status = "unhealthy"
|
||||
|
||||
overall_status = "healthy" if db_status == "healthy" and redis_status == "healthy" else "degraded"
|
||||
|
||||
return HealthResponse(
|
||||
status=overall_status,
|
||||
version=settings.app_version,
|
||||
environment=settings.app_env,
|
||||
database=db_status,
|
||||
redis=redis_status,
|
||||
timestamp=datetime.utcnow(),
|
||||
)
|
||||
Reference in New Issue
Block a user