处理异常信息展示功能
This commit is contained in:
@@ -95,9 +95,28 @@ def api_error_logs():
|
||||
try:
|
||||
server = current_app.dashboard_server
|
||||
days = request.args.get('days', 7, type=int)
|
||||
limit = request.args.get('limit', 100, type=int)
|
||||
logs = server.stats_db.get_error_logs(days, limit)
|
||||
return jsonify({"success": True, "data": logs})
|
||||
limit = request.args.get('limit', 20, type=int)
|
||||
offset = request.args.get('offset', 0, type=int)
|
||||
|
||||
# 计算页码
|
||||
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:
|
||||
logger.error(f"获取错误日志失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@@ -320,25 +320,39 @@ class StatsDBOperator(BaseDBOperator):
|
||||
"""
|
||||
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:
|
||||
days: 统计天数
|
||||
limit: 返回记录数量限制
|
||||
page: 页码
|
||||
limit: 每页数量
|
||||
|
||||
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 = """
|
||||
SELECT id, plugin_name, command, user_id, group_id,
|
||||
error_message, stack_trace, created_at
|
||||
FROM t_error_logs
|
||||
WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL %s DAY)
|
||||
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]:
|
||||
"""获取错误详情
|
||||
|
||||
@@ -232,8 +232,6 @@ class WeatherPlugin(MessagePluginInterface):
|
||||
|
||||
# ================= 定时任务系统 =================
|
||||
|
||||
|
||||
|
||||
async def _execute_daily_push(self):
|
||||
"""执行全量推送 (基于 ID 聚合)"""
|
||||
self.LOG.info("🚀 执行每日推送...")
|
||||
|
||||
Reference in New Issue
Block a user