feat: 失败任务汇总 - /api/summary + 监控页异常面板
- 新增 /api/summary:各状态计数 + 异常设备列表(last_error/任务/重试次数/时间) - 监控页新增"异常汇总"面板:显示失败/异常设备及错误信息,方便长期运行观察健康度
This commit is contained in:
@@ -28,6 +28,7 @@ from flask_login import (LoginManager, login_user, logout_user,
|
||||
|
||||
from core.stf_client import STFClient
|
||||
from core.task_manager import TaskManager
|
||||
from core.device_worker import get_all_worker_status
|
||||
from core.logger import get_logger, _LOG_DIR, _MODULE_FILES
|
||||
from core.models import db, init_db, User, DeviceGroup, TaskJob, CustomAction
|
||||
from core.apk_manager import ApkManager
|
||||
@@ -147,6 +148,40 @@ def api_health():
|
||||
return jsonify({"ok": False, "status": "down", "error": str(e)}), 500
|
||||
|
||||
|
||||
# ================== API:失败任务汇总 ==================
|
||||
@app.route("/api/summary")
|
||||
@login_required
|
||||
def api_summary():
|
||||
"""失败/异常任务汇总:各状态计数 + 异常设备列表(last_error / 重试次数)。
|
||||
|
||||
供监控页"异常汇总"面板使用,便于长期运行观察设备健康度。
|
||||
"""
|
||||
try:
|
||||
sts = get_all_worker_status()
|
||||
counts = {"total": 0, "running": 0, "done": 0,
|
||||
"error": 0, "failed": 0, "idle": 0}
|
||||
errors = []
|
||||
for s in sts:
|
||||
st = s.get("status", "idle")
|
||||
counts["total"] += 1
|
||||
if st in counts:
|
||||
counts[st] += 1
|
||||
if st in ("error", "failed") and s.get("last_error"):
|
||||
errors.append({
|
||||
"serial": s.get("serial"),
|
||||
"model": s.get("model", ""),
|
||||
"status": st,
|
||||
"last_error": s.get("last_error", ""),
|
||||
"task": s.get("task_job", ""),
|
||||
"attempt": s.get("attempt", 0),
|
||||
"updated": s.get("last_heartbeat", 0),
|
||||
})
|
||||
errors.sort(key=lambda x: x.get("updated", 0), reverse=True)
|
||||
return jsonify({"ok": True, "counts": counts, "errors": errors[:50]})
|
||||
except Exception as e:
|
||||
return jsonify({"ok": False, "error": str(e)}), 500
|
||||
|
||||
|
||||
# ================== API:状态(监控大屏用)==================
|
||||
@app.route("/api/status")
|
||||
@login_required
|
||||
|
||||
Reference in New Issue
Block a user