feat: XMPP observability — logger, monitor endpoints, clean dead xiaoguo refs

This commit is contained in:
hmo
2026-07-19 12:47:15 +08:00
parent fec2bc9106
commit b41bed7959
9 changed files with 442 additions and 34 deletions
+43
View File
@@ -1272,6 +1272,49 @@ def api_module_spec(module):
return jsonify({"error": f"Module '{module}' not found"}), 404
# ── XMPP 通信监控 API ─────────────────────────────────
@app.route("/api/xmpp/messages")
def api_xmpp_messages():
"""查询 XMPP 消息日志"""
since = request.args.get("since", "")
agent = request.args.get("agent", "")
status = request.args.get("status", "")
limit = int(request.args.get("limit", 50))
try:
from xmpp_logger import query
msgs = query(since=since or None, agent=agent or None, status=status or None, limit=limit)
return jsonify({"messages": msgs, "total": len(msgs)})
except ImportError:
return jsonify({"messages": [], "total": 0})
@app.route("/api/xmpp/health")
def api_xmpp_health():
"""XMPP 通道健康检查"""
try:
from xmpp_logger import health as xmpp_health
h = xmpp_health()
# 补充 ejabberd Docker 状态
import subprocess
r = subprocess.run(["docker", "ps", "--filter", "name=ejabberd", "--format", "{{.Status}}"],
capture_output=True, timeout=5, text=True)
h["ejabberd"] = r.stdout.strip() if r.returncode == 0 and r.stdout.strip() else "not_found"
return jsonify(h)
except ImportError:
return jsonify({"status": "no_logger", "last_message_age_sec": -1, "error_rate_1h": 0, "ejabberd": "unknown"})
@app.route("/api/xmpp/stats")
def api_xmpp_stats():
"""XMPP 消息统计"""
try:
from xmpp_logger import stats as xmpp_stats
return jsonify(xmpp_stats())
except ImportError:
return jsonify({"today": {"sent": 0, "failed": 0, "latency_avg": 0}, "week": {"sent": 0, "failed": 0}})
# 注册提示词管理路由
register_routes(app)