fix: 插件加载失败计入统计 — LOAD_FAILURES + 合并fail_details
This commit is contained in:
@@ -17,6 +17,9 @@ from sdk.plugin_command_decorator import plugin_command, command
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# 加载失败记录 — 供统计 API 使用
|
||||||
|
LOAD_FAILURES: Dict[str, str] = {}
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class PluginInfo:
|
class PluginInfo:
|
||||||
"""插件信息数据类"""
|
"""插件信息数据类"""
|
||||||
@@ -309,6 +312,7 @@ class PluginService:
|
|||||||
plugin_path = self.plugins_dir / plugin_name
|
plugin_path = self.plugins_dir / plugin_name
|
||||||
|
|
||||||
if not plugin_path.exists():
|
if not plugin_path.exists():
|
||||||
|
LOAD_FAILURES[plugin_name] = "插件目录不存在"
|
||||||
logger.error(f"插件目录不存在: {plugin_path}")
|
logger.error(f"插件目录不存在: {plugin_path}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|||||||
@@ -57,19 +57,25 @@ async def plugin_stats(req):
|
|||||||
total = len(ps.plugin_info) if ps else 0
|
total = len(ps.plugin_info) if ps else 0
|
||||||
loaded = sum(1 for n, info in ps.plugin_info.items() if n in ps.plugins) if ps else 0
|
loaded = sum(1 for n, info in ps.plugin_info.items() if n in ps.plugins) if ps else 0
|
||||||
disabled = total - loaded
|
disabled = total - loaded
|
||||||
# 启动失败: 插件目录存在但未成功加载 + 导入失败记录
|
# 合并: 导入失败 + 加载失败
|
||||||
|
from services.plugin_service import LOAD_FAILURES
|
||||||
failed = len(_IMPORT_FAILS)
|
failed = len(_IMPORT_FAILS)
|
||||||
|
fail_details = dict(_IMPORT_FAILS)
|
||||||
|
for name, reason in LOAD_FAILURES.items():
|
||||||
|
if name not in fail_details:
|
||||||
|
fail_details[name] = reason
|
||||||
|
failed += 1
|
||||||
if ps:
|
if ps:
|
||||||
for name, info in ps.plugin_info.items():
|
for name, info in ps.plugin_info.items():
|
||||||
if getattr(info, "error_count", 0) > 0 and name not in _IMPORT_FAILS:
|
if getattr(info, "error_count", 0) > 0 and name not in fail_details:
|
||||||
|
fail_details[name] = f"启动失败 (错误数: {info.error_count})"
|
||||||
failed += 1
|
failed += 1
|
||||||
_IMPORT_FAILS[name] = f"启动失败 (错误数: {info.error_count})"
|
|
||||||
return web.json_response({
|
return web.json_response({
|
||||||
"total": total,
|
"total": total,
|
||||||
"loaded": loaded,
|
"loaded": loaded,
|
||||||
"disabled": max(0, disabled),
|
"disabled": max(0, disabled),
|
||||||
"failed": failed,
|
"failed": failed,
|
||||||
"fail_details": dict(_IMPORT_FAILS),
|
"fail_details": fail_details,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user