初始化提交
This commit is contained in:
commit
887c1f449e
963 files changed
+166869
No files matched your search
@@ -0,0 +1,55 @@
|
||||
"""健康检查端点。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter
|
||||
|
||||
from src import __version__
|
||||
from src.engine.rapidocr import RapidOCREngine
|
||||
from src.engine.paddleocr_vl import PaddleOCRVLEngine
|
||||
from src.schemas.ocr import EngineStatus, HealthResponse
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
# 全局引擎实例(由 main.py startup 注入)
|
||||
rapidocr: RapidOCREngine | None = None
|
||||
paddleocr_vl: PaddleOCRVLEngine | None = None
|
||||
|
||||
|
||||
def init(
|
||||
rapidocr_engine: RapidOCREngine,
|
||||
paddleocr_vl_engine: PaddleOCRVLEngine,
|
||||
) -> None:
|
||||
"""注入引擎实例。"""
|
||||
global rapidocr, paddleocr_vl
|
||||
rapidocr = rapidocr_engine
|
||||
paddleocr_vl = paddleocr_vl_engine
|
||||
|
||||
|
||||
@router.get("/healthz", response_model=HealthResponse)
|
||||
async def health() -> HealthResponse:
|
||||
engines_status: dict = {}
|
||||
|
||||
for name, engine in [("ppocrv6", rapidocr), ("paddleocr-vl", paddleocr_vl)]:
|
||||
if engine is None:
|
||||
engines_status[name] = EngineStatus(status="unavailable")
|
||||
else:
|
||||
h = await engine.health()
|
||||
engines_status[name] = EngineStatus(status=h.get("status", "error"))
|
||||
|
||||
# 整体状态
|
||||
ok_count = sum(1 for e in engines_status.values() if e.status == "ok")
|
||||
unavailable_count = sum(1 for e in engines_status.values() if e.status == "unavailable")
|
||||
total = len(engines_status)
|
||||
if ok_count == total:
|
||||
overall = "ok"
|
||||
elif unavailable_count == total:
|
||||
overall = "error"
|
||||
else:
|
||||
overall = "degraded"
|
||||
|
||||
return HealthResponse(
|
||||
status=overall,
|
||||
engines=engines_status,
|
||||
version=__version__,
|
||||
)
|
||||
Reference in new issue
Block a user