172 lines
4.8 KiB
Python
172 lines
4.8 KiB
Python
"""
|
|
平台健康检查API - 验证各AI平台适配器状态
|
|
|
|
端点: GET /api/platforms/health
|
|
返回: 各平台适配器配置状态和健康信息
|
|
"""
|
|
|
|
import logging
|
|
from typing import Annotated
|
|
|
|
from fastapi import APIRouter, Depends
|
|
|
|
from app.config import settings
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
router = APIRouter(prefix="/platforms", tags=["platforms"])
|
|
|
|
|
|
class PlatformHealthStatus:
|
|
"""平台健康状态"""
|
|
|
|
def __init__(
|
|
self,
|
|
name: str,
|
|
configured: bool,
|
|
url: str = "",
|
|
api_key_set: bool = False,
|
|
status: str = "unknown",
|
|
message: str = "",
|
|
):
|
|
self.name = name
|
|
self.configured = configured
|
|
self.url = url
|
|
self.api_key_set = api_key_set
|
|
self.status = status
|
|
self.message = message
|
|
|
|
|
|
def check_kimi_health() -> PlatformHealthStatus:
|
|
"""检查Kimi平台健康状态"""
|
|
try:
|
|
from app.workers.platforms.kimi import KimiAdapter
|
|
|
|
adapter = KimiAdapter()
|
|
api_key_set = bool(adapter.api_key and adapter.api_key.strip())
|
|
configured = adapter.is_configured
|
|
|
|
return PlatformHealthStatus(
|
|
name="kimi",
|
|
url=adapter.platform_url,
|
|
configured=configured,
|
|
api_key_set=api_key_set,
|
|
status="configured" if configured else "not_configured",
|
|
message="API Key已配置" if configured else "API Key未配置",
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"Kimi健康检查失败: {e}")
|
|
return PlatformHealthStatus(
|
|
name="kimi",
|
|
configured=False,
|
|
status="error",
|
|
message=str(e),
|
|
)
|
|
|
|
|
|
def check_wenxin_health() -> PlatformHealthStatus:
|
|
"""检查文心平台健康状态"""
|
|
try:
|
|
from app.workers.platforms.wenxin import WenxinAdapter
|
|
|
|
adapter = WenxinAdapter()
|
|
api_key_set = bool(adapter.api_key and adapter.api_key.strip())
|
|
secret_key_set = bool(adapter.secret_key and adapter.secret_key.strip())
|
|
configured = adapter.is_configured
|
|
|
|
return PlatformHealthStatus(
|
|
name="wenxin",
|
|
url=adapter.platform_url,
|
|
configured=configured,
|
|
api_key_set=api_key_set,
|
|
status="configured" if configured else "not_configured",
|
|
message="API Key和Secret Key已配置" if configured else "API Key或Secret Key未配置",
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"文心健康检查失败: {e}")
|
|
return PlatformHealthStatus(
|
|
name="wenxin",
|
|
configured=False,
|
|
status="error",
|
|
message=str(e),
|
|
)
|
|
|
|
|
|
def check_doubao_health() -> PlatformHealthStatus:
|
|
"""检查豆包平台健康状态"""
|
|
try:
|
|
from app.workers.platforms.doubao import DoubaoAdapter
|
|
|
|
adapter = DoubaoAdapter()
|
|
api_key_set = bool(adapter.api_key and adapter.api_key.strip())
|
|
configured = adapter.is_configured
|
|
|
|
return PlatformHealthStatus(
|
|
name="doubao",
|
|
url=adapter.platform_url,
|
|
configured=configured,
|
|
api_key_set=api_key_set,
|
|
status="configured" if configured else "not_configured",
|
|
message="API Key已配置" if configured else "API Key未配置",
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"豆包健康检查失败: {e}")
|
|
return PlatformHealthStatus(
|
|
name="doubao",
|
|
configured=False,
|
|
status="error",
|
|
message=str(e),
|
|
)
|
|
|
|
|
|
def check_all_platforms() -> dict:
|
|
"""检查所有平台健康状态"""
|
|
platforms = [
|
|
check_kimi_health(),
|
|
check_wenxin_health(),
|
|
check_doubao_health(),
|
|
]
|
|
|
|
return {
|
|
"platforms": [vars(p) for p in platforms],
|
|
"total": len(platforms),
|
|
"configured_count": sum(1 for p in platforms if p.configured),
|
|
}
|
|
|
|
|
|
@router.get("/health")
|
|
async def get_platform_health():
|
|
"""
|
|
获取所有AI平台适配器的健康状态
|
|
|
|
返回每个平台的:
|
|
- name: 平台名称
|
|
- configured: 是否已配置
|
|
- url: 平台URL
|
|
- api_key_set: API Key是否已设置
|
|
- status: 健康状态 (configured / not_configured / error)
|
|
- message: 状态消息
|
|
"""
|
|
health_info = check_all_platforms()
|
|
return health_info
|
|
|
|
|
|
@router.get("/health/{platform_name}")
|
|
async def get_platform_health_by_name(platform_name: str):
|
|
"""
|
|
获取指定平台适配器的健康状态
|
|
|
|
Args:
|
|
platform_name: 平台名称 (kimi / wenxin / doubao)
|
|
"""
|
|
if platform_name == "kimi":
|
|
result = vars(check_kimi_health())
|
|
elif platform_name == "wenxin":
|
|
result = vars(check_wenxin_health())
|
|
elif platform_name == "doubao":
|
|
result = vars(check_doubao_health())
|
|
else:
|
|
return {"error": f"未知平台: {platform_name}"}
|
|
|
|
return result
|