feat(v0.4): TUI 系统监控面板 + 插件状态面板

v0.4.1 系统监控面板:
- 复用共享 SystemInfoCollector (TUI + Web面板同一数据源)
- CPU/MEM 彩色进度条 + 网络实时速率
- 2 秒刷新,set_interval 驱动

v0.4.2 插件状态面板:
- 展示已加载插件的名称/版本/命令数
- 3 秒刷新,PluginService 延迟注入

SystemInfoCollector:
- 注册为共享服务 (sys_collector)
- Web panel status.py 优先从 service_manager 获取
- 零重复数据采集

TUI 布局升级: 3行 → 4行 (monitor + log + message + input)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
qinglong
2026-06-13 11:05:56 +08:00
parent f402af58d0
commit 2d0a37ba19
3 changed files with 144 additions and 11 deletions
+16 -2
View File
@@ -47,8 +47,21 @@ async def get_framework(req):
return web.json_response({"error": "Missing"}, status=500)
return web.json_response(_get_framework_data(sm))
def _get_collector(req):
"""获取共享的 SystemInfoCollector(优先从 service_manager),fallback 到模块级实例"""
sm = req.app.get('service_manager')
if sm:
try:
shared = sm.get_service("sys_collector")
if shared:
return shared
except Exception:
pass
return collector
async def get_system(req):
return web.json_response(collector.get_all())
c = _get_collector(req)
return web.json_response(c.get_all())
async def sys_ws_handler(req):
"""WebSocket push endpoint: system+framwork stats every 2s (no logging per message)"""
@@ -60,9 +73,10 @@ async def sys_ws_handler(req):
"""Send one snapshot to this client (silent on error)"""
try:
sm = req.app.get('service_manager')
c = _get_collector(req)
payload = json.dumps({
"type": "sys",
"system": collector.get_all(),
"system": c.get_all(),
"framework": _get_framework_data(sm)
}, ensure_ascii=False)
if not ws.closed: