处理异常信息展示功能

This commit is contained in:
liuwei
2025-12-17 14:48:40 +08:00
parent cb3f9b7d55
commit 716b3e2760
3 changed files with 41 additions and 10 deletions

View File

@@ -95,9 +95,28 @@ def api_error_logs():
try: try:
server = current_app.dashboard_server server = current_app.dashboard_server
days = request.args.get('days', 7, type=int) days = request.args.get('days', 7, type=int)
limit = request.args.get('limit', 100, type=int) limit = request.args.get('limit', 20, type=int)
logs = server.stats_db.get_error_logs(days, limit) offset = request.args.get('offset', 0, type=int)
return jsonify({"success": True, "data": logs})
# 计算页码
page = (offset // limit) + 1
logs, total = server.stats_db.get_error_logs(days, page, limit)
# 补充用户和群组名称
for log in logs:
if log.get('user_id'):
log['user_name'] = server.contact_manager.get_nickname(log['user_id'])
if log.get('group_id'):
log['group_name'] = server.contact_manager.get_nickname(log['group_id'])
return jsonify({
"success": True,
"data": {
"logs": logs,
"total": total
}
})
except Exception as e: except Exception as e:
logger.error(f"获取错误日志失败: {e}") logger.error(f"获取错误日志失败: {e}")
return jsonify({"success": False, "error": str(e)}), 500 return jsonify({"success": False, "error": str(e)}), 500

View File

@@ -320,25 +320,39 @@ class StatsDBOperator(BaseDBOperator):
""" """
return self.execute_query(sql, (days, limit)) or [] return self.execute_query(sql, (days, limit)) or []
def get_error_logs(self, days: int = 7, limit: int = 100) -> List[Dict]: def get_error_logs(self, days: int = 7, page: int = 1, limit: int = 20) -> Tuple[List[Dict], int]:
"""获取错误日志 """获取错误日志
Args: Args:
days: 统计天数 days: 统计天数
limit: 返回记录数量限制 page: 页码
limit: 每页数量
Returns: Returns:
错误日志列表 (日志列表, 总数)
""" """
# 1. 获取总数
count_sql = """
SELECT COUNT(*) as total
FROM t_error_logs
WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL %s DAY)
"""
count_result = self.execute_query(count_sql, (days,), fetch_one=True)
total = count_result['total'] if count_result else 0
# 2. 获取分页数据
offset = (page - 1) * limit
sql = """ sql = """
SELECT id, plugin_name, command, user_id, group_id, SELECT id, plugin_name, command, user_id, group_id,
error_message, stack_trace, created_at error_message, stack_trace, created_at
FROM t_error_logs FROM t_error_logs
WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL %s DAY) WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL %s DAY)
ORDER BY created_at DESC ORDER BY created_at DESC
LIMIT %s LIMIT %s OFFSET %s
""" """
return self.execute_query(sql, (days, limit)) or [] logs = self.execute_query(sql, (days, limit, offset)) or []
return logs, total
def get_error_detail(self, error_id: int) -> Optional[Dict]: def get_error_detail(self, error_id: int) -> Optional[Dict]:
"""获取错误详情 """获取错误详情

View File

@@ -232,8 +232,6 @@ class WeatherPlugin(MessagePluginInterface):
# ================= 定时任务系统 ================= # ================= 定时任务系统 =================
async def _execute_daily_push(self): async def _execute_daily_push(self):
"""执行全量推送 (基于 ID 聚合)""" """执行全量推送 (基于 ID 聚合)"""
self.LOG.info("🚀 执行每日推送...") self.LOG.info("🚀 执行每日推送...")