diff --git a/applications/view/system/monitor.py b/applications/view/system/monitor.py index 972d49cfd677e17a555ce9c3f5ff903e8f08e6bf..2574e7dfc7f0d397fc2cb76f0d455b6e00e2754f 100644 --- a/applications/view/system/monitor.py +++ b/applications/view/system/monitor.py @@ -13,6 +13,9 @@ from applications.common.utils.rights import authorize bp = Blueprint('adminMonitor', __name__, url_prefix='/monitor') +# 缓存数据 +cache = {} + # 系统监控 @bp.get('/') @authorize("system:monitor:main") @@ -26,7 +29,10 @@ def main(): # 逻辑cpu数量 cpu_count = psutil.cpu_count() # cpu使用率 - cpus_percent = psutil.cpu_percent(interval=0.1, percpu=False) # percpu 获取主使用率 + cpus_percent = cache.get('cpus_percent') + if cpus_percent is None: + cpus_percent = psutil.cpu_percent(interval=0.1, percpu=False) # percpu 获取主使用率 + cache['cpus_percent'] = cpus_percent # 内存 memory_information = psutil.virtual_memory() # 内存使用率 @@ -35,29 +41,33 @@ def main(): memory_total: int = memory_information.total memory_free: int = memory_information.free # 磁盘信息 - - disk_partitions_list = [] - # 判断是否在容器中 - if not os.path.exists('/.dockerenv'): - disk_partitions = psutil.disk_partitions() - for i in disk_partitions: - a = psutil.disk_usage(i.device) - disk_partitions_dict = { - 'device': i.device, - 'fstype': i.fstype, - 'total': a.total, - 'used': a.used, - 'free': a.free, - 'percent': a.percent - } - disk_partitions_list.append(disk_partitions_dict) - + disk_partitions_list = cache.get('disk_partitions_list') + if disk_partitions_list is None: + disk_partitions_list = [] + # 判断是否在容器中 + if not os.path.exists('/.dockerenv'): + try: + disk_partitions = psutil.disk_partitions() + for i in disk_partitions: + a = psutil.disk_usage(i.device) + disk_partitions_dict = { + 'device': i.device, + 'fstype': i.fstype, + 'total': a.total, + 'used': a.used, + 'free': a.free, + 'percent': a.percent + } + disk_partitions_list.append(disk_partitions_dict) + except PermissionError as e: + print(f"无法访问设备: {e}") + # 可以在这里添加一些日志记录或错误处理代码 + cache['disk_partitions_list'] = disk_partitions_list # 开机时间 boot_time = datetime.fromtimestamp(psutil.boot_time()).replace(microsecond=0) up_time = datetime.now().replace(microsecond=0) - boot_time up_time_list = re.split(r':', str(up_time)) up_time_format = " {} 小时{} 分钟{} 秒".format(up_time_list[0], up_time_list[1], up_time_list[2]) - # 当前时间 time_now = time.strftime('%H:%M:%S ', time.localtime(time.time())) return render_template( @@ -77,24 +87,28 @@ def main(): time_now=time_now ) - # 图表 api @bp.get('/polling') @authorize("system:monitor:main") def ajax_polling(): # 获取cpu使用率 - cpus_percent = psutil.cpu_percent(interval=0.1, percpu=False) # percpu 获取主使用率 + cpus_percent = cache.get('cpus_percent') + if cpus_percent is None: + cpus_percent = psutil.cpu_percent(interval=0.1, percpu=False) # percpu 获取主使用率 + cache['cpus_percent'] = cpus_percent # 获取内存使用率 memory_information = psutil.virtual_memory() memory_usage = memory_information.percent time_now = time.strftime('%H:%M:%S ', time.localtime(time.time())) return jsonify(cups_percent=cpus_percent, memory_used=memory_usage, time_now=time_now) - # 关闭程序 @bp.get('/kill') @authorize("system:monitor:main") def kill(): + # 检查是否有权限 + if not current_app.config['ADMIN_MONITOR_KILL_ENABLE']: + return jsonify(message='Permission denied'), 403 for proc in psutil.process_iter(): if proc.pid == os.getpid(): proc.kill()