106 lines
3.7 KiB
Python
106 lines
3.7 KiB
Python
from flask import Blueprint, render_template, jsonify, request, send_from_directory, current_app
|
|
from .auth import login_required
|
|
from loguru import logger
|
|
import os
|
|
import time
|
|
from datetime import datetime
|
|
import platform
|
|
import psutil
|
|
from collections import deque
|
|
|
|
# 创建系统信息蓝图
|
|
system_bp = Blueprint('system', __name__)
|
|
|
|
# 记录应用启动时间
|
|
APP_START_TIME = time.time()
|
|
@system_bp.route('/api_docs')
|
|
@login_required
|
|
def api_docs():
|
|
return render_template('api_docs.html')
|
|
@system_bp.route('/system_status')
|
|
@login_required
|
|
def system_status():
|
|
return render_template('system_status.html')
|
|
# 页面路由
|
|
@system_bp.route('/wx_logs')
|
|
@login_required
|
|
def wx_logs():
|
|
return render_template('wx_logs.html')
|
|
|
|
# API路由
|
|
@system_bp.route('/api/system_info')
|
|
@login_required
|
|
def api_system_info():
|
|
try:
|
|
# 获取系统信息
|
|
system_info = {
|
|
"os": platform.system(),
|
|
"os_version": platform.version(),
|
|
"python_version": platform.python_version(),
|
|
"cpu_usage": psutil.cpu_percent(),
|
|
"memory_usage": psutil.virtual_memory().percent,
|
|
"disk_usage": psutil.disk_usage('/').percent,
|
|
"uptime": time.time() - APP_START_TIME, # 使用应用启动时间计算运行时长
|
|
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
|
"open_files": psutil.Process(os.getpid()).open_files()
|
|
}
|
|
|
|
return jsonify({"success": True, "data": system_info})
|
|
except Exception as e:
|
|
logger.error(f"获取系统信息失败: {e}")
|
|
return jsonify({"success": False, "error": str(e)}), 500
|
|
|
|
@system_bp.route('/api/wx_logs')
|
|
@login_required
|
|
def api_wx_logs():
|
|
try:
|
|
log_type = request.args.get('type', 'info') # 默认显示info日志
|
|
lines = request.args.get('lines', 100, type=int) # 默认显示最后100行
|
|
|
|
# 修正日志文件路径计算,获取项目根目录
|
|
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
|
|
|
|
if log_type == 'error':
|
|
log_file = os.path.join(project_root, 'wx_error.log')
|
|
elif log_type == 'debug':
|
|
log_file = os.path.join(project_root, 'wx_debug.log')
|
|
else:
|
|
log_file = os.path.join(project_root, 'wx_info.log')
|
|
|
|
# 读取日志文件
|
|
log_content = []
|
|
if os.path.exists(log_file):
|
|
with open(log_file, 'r', encoding='utf-8', errors='ignore') as f:
|
|
# 使用deque获取最后N行
|
|
log_content = list(deque(f, lines))
|
|
else:
|
|
logger.warning(f"日志文件不存在: {log_file}")
|
|
# 尝试列出项目根目录下的所有日志文件,帮助调试
|
|
try:
|
|
all_files = [f for f in os.listdir(project_root) if f.endswith('.log')]
|
|
logger.info(f"项目根目录下的日志文件: {all_files}")
|
|
except Exception as e:
|
|
logger.error(f"列出目录文件失败: {e}")
|
|
|
|
return jsonify({
|
|
"success": True,
|
|
"data": {
|
|
"log_type": log_type,
|
|
"log_file": log_file,
|
|
"content": log_content,
|
|
"lines": len(log_content)
|
|
}
|
|
})
|
|
except Exception as e:
|
|
logger.error(f"获取微信日志失败: {e}")
|
|
return jsonify({"success": False, "error": str(e)}), 500
|
|
|
|
# 在现有路由下添加
|
|
@system_bp.route('/api/current_user_info', methods=['GET'])
|
|
@login_required
|
|
def get_current_user_info():
|
|
"""获取当前登录的微信用户信息"""
|
|
dashboard_server = current_app.dashboard_server
|
|
result = dashboard_server.get_current_user_info()
|
|
return jsonify(result)
|