Files
FilesReadSystem/backend/app/api/endpoints/health.py

77 lines
1.7 KiB
Python

"""
健康检查接口
"""
from datetime import datetime
from typing import Any, Dict
from fastapi import APIRouter
from app.core.database import mysql_db, mongodb, redis_db
router = APIRouter(tags=["健康检查"])
@router.get("/health")
async def health_check() -> Dict[str, Any]:
"""
健康检查接口
返回各数据库连接状态和应用信息
"""
# 检查各数据库连接状态
mysql_status = "connected"
mongodb_status = "connected"
redis_status = "connected"
try:
if mysql_db.async_engine is None:
mysql_status = "disconnected"
except Exception:
mysql_status = "error"
try:
if mongodb.client is None:
mongodb_status = "disconnected"
except Exception:
mongodb_status = "error"
try:
if not redis_db.is_connected:
redis_status = "disconnected"
except Exception:
redis_status = "error"
return {
"status": "healthy" if all([
mysql_status == "connected",
mongodb_status == "connected",
redis_status == "connected"
]) else "degraded",
"timestamp": datetime.utcnow().isoformat(),
"services": {
"mysql": mysql_status,
"mongodb": mongodb_status,
"redis": redis_status,
}
}
@router.get("/health/ready")
async def readiness_check() -> Dict[str, str]:
"""
就绪检查接口
用于 Kubernetes/负载均衡器检查服务是否就绪
"""
return {"status": "ready"}
@router.get("/health/live")
async def liveness_check() -> Dict[str, str]:
"""
存活检查接口
用于 Kubernetes/负载均衡器检查服务是否存活
"""
return {"status": "alive"}