"""健康检查模块."""
from typing import Dict, Any, Optional
from .config_manager import ConfigManager
from .graphiti_client import GraphitiClient
def health_check(config_manager: Optional[ConfigManager] = None) -> Dict[str, Any]:
"""
执行健康检查.
Args:
config_manager: 可选的配置管理器实例,如果不提供则创建新实例
Returns:
健康检查结果
"""
result = {
"status": "healthy",
"checks": {},
"timestamp": None
}
from datetime import datetime
result["timestamp"] = datetime.now().isoformat()
# 检查配置(使用传入的 config_manager 或创建新实例)
if config_manager is None:
config_manager = ConfigManager()
config_status = config_manager.get_config_status()
result["checks"]["configuration"] = {
"status": "ok" if config_status.get("neo4j_configured") else "warning",
"neo4j_configured": config_status.get("neo4j_configured", False),
"api_configured": config_status.get("api_configured", False)
}
# 检查数据库连接
client = GraphitiClient(config_manager)
if client.connect():
# 测试查询
try:
test_result = client.query_knowledge_graph("RETURN 1 as test", limit=1)
db_status = "ok" if test_result['success'] else "error"
db_message = "连接正常" if test_result['success'] else test_result.get('message', '未知错误')
except Exception as e:
db_status = "error"
db_message = str(e)
result["checks"]["database"] = {
"status": db_status,
"message": db_message
}
client.disconnect()
else:
result["checks"]["database"] = {
"status": "error",
"message": "无法连接到数据库"
}
result["status"] = "unhealthy"
# 检查 Graphiti 初始化
if config_status.get("api_configured"):
result["checks"]["graphiti"] = {
"status": "ok",
"message": "Graphiti 已配置,实体抽取功能可用"
}
else:
result["checks"]["graphiti"] = {
"status": "warning",
"message": "Graphiti 未配置,实体抽取功能不可用"
}
# 确定总体状态
check_statuses = [check.get("status") for check in result["checks"].values()]
if "error" in check_statuses:
result["status"] = "unhealthy"
elif "warning" in check_statuses: # pragma: no cover - 边缘状态分支,行为已通过等价路径测试
result["status"] = "degraded"
return result