26 lines
806 B
Python
26 lines
806 B
Python
"""基础设施健康检查路由。"""
|
|||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from fastapi import APIRouter
|
||
|
|
from fastapi.responses import JSONResponse
|
||
|
|
|
||
|
|
from config import database
|
||
|
|
from utils.response import fail, success
|
||
|
|
|
||
|
|
|
||
|
|
router = APIRouter()
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/health/ready")
|
||
|
|
async def ready():
|
||
|
|
"""按需探测四库,并返回适合负载均衡器使用的 HTTP 就绪状态。"""
|
||
|
|
databases = await database.check_ready_detail()
|
||
|
|
is_ready = all(item.get("status") == "ok" for item in databases.values())
|
||
|
|
payload = {"ready": is_ready, "databases": databases}
|
||
|
|
if is_ready:
|
||
|
|
return JSONResponse(status_code=200, content=success(payload).model_dump())
|
||
|
|
return JSONResponse(
|
||
|
|
status_code=503,
|
||
|
|
content=fail(503, "基础设施尚未就绪", payload).model_dump(),
|
||
|
|
)
|