将看板功能独立,方便独立维护功能。

This commit is contained in:
liuwei
2025-03-27 11:11:19 +08:00
parent 4daf075138
commit 283ada66bc

View File

@@ -275,42 +275,9 @@ class DashboardServer:
return jsonify({"success": True, "data": system_info}) return jsonify({"success": True, "data": system_info})
return app @app.route('/api/dashboard_summary')
@login_required
def run(self): def api_dashboard_summary():
"""运行服务器"""
from waitress import serve
self.logger.info(f"启动服务器: {self.host}:{self.port}")
try:
serve(self.app, host=self.host, port=self.port)
except Exception as e:
self.logger.error(f"服务器运行失败: {e}")
self._stop_event.set()
def stop(self):
"""停止服务器"""
self.logger.info("正在停止服务器...")
self._stop_event.set()
# 如果使用了waitress需要额外的停止逻辑
# 这里可能需要根据实际情况调整
if self._server:
# 某些服务器可能有shutdown方法
if hasattr(self._server, 'shutdown'):
self._server.shutdown()
# 或者需要关闭socket
elif hasattr(self._server, 'socket'):
self._server.socket.close()
self.logger.info("服务器已停止")
# 在 _create_app 方法中添加以下路由
@app.route('/api/dashboard_summary')
@login_required
def api_dashboard_summary():
try: try:
days = request.args.get('days', 7, type=int) days = request.args.get('days', 7, type=int)
summary = self.stats_db.get_dashboard_summary(days) summary = self.stats_db.get_dashboard_summary(days)
@@ -326,37 +293,24 @@ def api_dashboard_summary():
if 'group_id' in group: if 'group_id' in group:
group['group_name'] = self.contact_manager.get_nickname(group['group_id']) group['group_name'] = self.contact_manager.get_nickname(group['group_id'])
self.logger.info(f"看板主页统计数据: {summary}")
return jsonify({"success": True, "data": summary}) return jsonify({"success": True, "data": summary})
except Exception as e: except Exception as e:
self.logger.error(f"获取仪表盘摘要数据出错: {e}") self.logger.error(f"获取仪表盘摘要数据出错: {e}")
return jsonify({"success": False, "error": str(e)}), 500 return jsonify({"success": False, "error": str(e)}), 500
@app.route('/api/plugin_trend') @app.route('/api/plugin_trend')
@login_required @login_required
def api_plugin_trend(): def api_plugin_trend():
days = request.args.get('days', 7, type=int) days = request.args.get('days', 7, type=int)
plugin_name = request.args.get('plugin_name', '') plugin_name = request.args.get('plugin_name', '')
trend = self.stats_db.get_plugin_trend(plugin_name, days) trend = self.stats_db.get_plugin_trend(plugin_name, days)
# 如果趋势数据中包含用户或群组ID也进行转换
if isinstance(trend, list):
for item in trend:
if 'user_id' in item:
item['user_name'] = self.contact_manager.get_nickname(item['user_id'])
if 'group_id' in item:
item['group_name'] = self.contact_manager.get_nickname(item['group_id'])
self.logger.info(f"看板主页/api/plugin_trend: {trend}")
return jsonify({"success": True, "data": trend}) return jsonify({"success": True, "data": trend})
@app.route('/api/robot/group/<group_id>/message_trend', methods=['GET']) @app.route('/api/robot/group/<group_id>/message_trend')
@login_required @login_required
def get_group_message_trend(group_id): def api_group_message_trend(group_id):
"""获取群组消息趋势数据"""
try: try:
days = request.args.get('days', default=7, type=int) days = request.args.get('days', 7, type=int)
# 获取消息存储实例
trend_data = self.message_storage.get_message_trend(group_id, days) trend_data = self.message_storage.get_message_trend(group_id, days)
# 格式化数据为前端需要的格式 # 格式化数据为前端需要的格式
@@ -380,13 +334,78 @@ def get_group_message_trend(group_id):
} }
}) })
except Exception as e: except Exception as e:
return jsonify({ self.logger.error(f"获取群组消息趋势数据出错: {e}")
'success': False, return jsonify({'success': False, 'error': str(e)}), 500
'error': str(e)
})
@app.route('/api/error_detail/<int:error_id>') @app.route('/api/error_detail/<int:error_id>')
@login_required @login_required
def api_error_detail(error_id): def api_error_detail(error_id):
detail = self.stats_db.get_error_detail(error_id) detail = self.stats_db.get_error_detail(error_id)
return jsonify({"success": True, "data": detail}) return jsonify({"success": True, "data": detail})
@app.route('/api/robot/add_group', methods=['POST'])
@login_required
def api_add_group():
try:
data = request.json
group_id = data.get('group_id')
if not group_id or not group_id.strip():
return jsonify({"success": False, "error": "群组ID不能为空"}), 400
group_id = group_id.strip()
# 检查群组是否已存在
if group_id in GroupBotManager.local_cache["group_list"]:
return jsonify({"success": False, "error": "该群组已存在"}), 400
# 添加群组到列表并启用机器人功能
GroupBotManager.local_cache["group_list"].add(group_id)
r = self.db_manager.get_redis_connection()
r.sadd("group:list", group_id)
# 设置ROBOT功能为启用状态
GroupBotManager.set_group_permission(group_id, Feature.ROBOT, PermissionStatus.ENABLED)
# 获取群组名称(如果可能)
group_name = self.contact_manager.get_nickname(group_id)
return jsonify({
"success": True,
"message": f"群组 {group_id} 已成功添加",
"group": {
"group_id": group_id,
"group_name": group_name,
"robot_status": "enabled"
}
})
except Exception as e:
self.logger.error(f"添加群组失败: {e}")
return jsonify({"success": False, "error": str(e)}), 500
return app
def run(self):
"""运行服务器"""
from werkzeug.serving import make_server
self.logger.info(f"启动服务器: {self.host}:{self.port}")
try:
# 修改:使用线程安全的方式运行服务器
self._server = make_server(self.host, self.port, self.app)
self._server.serve_forever()
except Exception as e:
self.logger.error(f"服务器运行失败: {e}")
self._stop_event.set()
def stop(self):
"""停止服务器"""
self.logger.info("正在停止服务器...")
self._stop_event.set()
# 修改使用werkzeug服务器的关闭方法
if self._server:
self._server.shutdown()
self.logger.info("服务器已停止")