From a201b0356aa077bae504f102760116250f12619f Mon Sep 17 00:00:00 2001 From: hubian <908234780@qq.com> Date: Thu, 23 Apr 2026 18:08:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20JavaScript=E5=8F=98=E9=87=8F=E5=A3=B0?= =?UTF-8?q?=E6=98=8E=E9=A1=BA=E5=BA=8F=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/app.cpython-310.pyc | Bin 0 -> 120797 bytes app.py | 13 ++++---- logs/app.log | 51 +++++++++++++++----------------- 3 files changed, 31 insertions(+), 33 deletions(-) create mode 100644 __pycache__/app.cpython-310.pyc diff --git a/__pycache__/app.cpython-310.pyc b/__pycache__/app.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74fff972b30e0c01aa524d6b99ef2a4a05619be1 GIT binary patch literal 120797 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 W{3`mqYM`{7qxuqlZd$(bSN{({C|#NW literal 0 HcmV?d00001 diff --git a/app.py b/app.py index 65b7633..f936520 100644 --- a/app.py +++ b/app.py @@ -1645,6 +1645,13 @@ HTML_TEMPLATE = ''' document.getElementById('enableLogs').checked = enableLogs; // Tab 切换 + // 系统资源监控变量(必须先声明) + let realtimeTimer = null; + let realtimeInterval = 2; // 秒 + let lastAlertTime = 0; // 上次警告时间 + let thresholds = { cpu: 80, memory: 85, disk: 90, interval: 60 }; + let desktopNotifyEnabled = false; + function switchTab(tab) { currentTab = tab; document.querySelectorAll('.tab-btn').forEach(btn => { @@ -1673,12 +1680,6 @@ HTML_TEMPLATE = ''' } } - // 系统资源加载 - let realtimeTimer = null; - let realtimeInterval = 2; // 秒 - let lastAlertTime = 0; // 上次警告时间 - let thresholds = { cpu: 80, memory: 85, disk: 90, interval: 60 }; - // 加载阈值设置 function loadThresholds() { const saved = localStorage.getItem('systemThresholds'); diff --git a/logs/app.log b/logs/app.log index 8cfedc5..0072283 100644 --- a/logs/app.log +++ b/logs/app.log @@ -1,8 +1,8 @@ -[2026-04-23 17:53:14] ================================================== -[2026-04-23 17:53:14] 项目服务管理面板 v2.0.0 启动 -[2026-04-23 17:53:14] 访问地址: http://localhost:19013 -[2026-04-23 17:53:14] 进程PID: 1140936 -[2026-04-23 17:53:14] ================================================== +[2026-04-23 18:07:56] ================================================== +[2026-04-23 18:07:56] 项目服务管理面板 v2.0.0 启动 +[2026-04-23 18:07:56] 访问地址: http://localhost:19013 +[2026-04-23 18:07:56] 进程PID: 1146360 +[2026-04-23 18:07:56] ================================================== * Serving Flask app 'app' * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. @@ -10,25 +10,22 @@ WARNING: This is a development server. Do not use it in a production deployment. * Running on http://127.0.0.1:19013 * Running on http://192.168.2.17:19013 Press CTRL+C to quit -127.0.0.1 - - [23/Apr/2026 17:53:19] "GET / HTTP/1.1" 200 - -127.0.0.1 - - [23/Apr/2026 17:53:23] "GET / HTTP/1.1" 200 - -192.168.2.14 - - [23/Apr/2026 17:53:25] "GET /api/projects HTTP/1.1" 200 - -127.0.0.1 - - [23/Apr/2026 17:53:26] "GET / HTTP/1.1" 200 - -192.168.2.8 - - [23/Apr/2026 17:53:27] "GET /api/projects HTTP/1.1" 200 - -127.0.0.1 - - [23/Apr/2026 17:53:34] "GET / HTTP/1.1" 200 - -192.168.2.14 - - [23/Apr/2026 17:53:36] "GET /api/projects HTTP/1.1" 200 - -127.0.0.1 - - [23/Apr/2026 17:53:36] "GET / HTTP/1.1" 200 - -192.168.2.8 - - [23/Apr/2026 17:53:37] "GET /api/projects HTTP/1.1" 200 - -127.0.0.1 - - [23/Apr/2026 17:53:44] "GET / HTTP/1.1" 200 - -127.0.0.1 - - [23/Apr/2026 17:53:44] "GET / HTTP/1.1" 200 - -192.168.2.8 - - [23/Apr/2026 17:53:46] "GET /api/projects HTTP/1.1" 200 - -192.168.2.14 - - [23/Apr/2026 17:53:46] "GET /api/projects HTTP/1.1" 200 - -127.0.0.1 - - [23/Apr/2026 17:53:46] "GET / HTTP/1.1" 200 - -192.168.2.14 - - [23/Apr/2026 17:53:46] "GET /api/system/stats HTTP/1.1" 200 - -127.0.0.1 - - [23/Apr/2026 17:53:47] "GET / HTTP/1.1" 200 - -192.168.2.8 - - [23/Apr/2026 17:53:47] "GET /api/projects HTTP/1.1" 200 - -192.168.2.14 - - [23/Apr/2026 17:53:49] "GET /api/projects HTTP/1.1" 200 - -127.0.0.1 - - [23/Apr/2026 17:53:54] "GET / HTTP/1.1" 200 - -192.168.2.14 - - [23/Apr/2026 17:53:56] "GET /api/projects HTTP/1.1" 200 - -127.0.0.1 - - [23/Apr/2026 17:53:56] "GET / HTTP/1.1" 200 - -192.168.2.8 - - [23/Apr/2026 17:53:58] "GET /api/projects HTTP/1.1" 200 - +127.0.0.1 - - [23/Apr/2026 18:07:58] "GET / HTTP/1.1" 200 - +192.168.2.8 - - [23/Apr/2026 18:08:00] "GET /api/projects HTTP/1.1" 200 - +127.0.0.1 - - [23/Apr/2026 18:08:00] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [23/Apr/2026 18:08:08] "GET / HTTP/1.1" 200 - +192.168.2.8 - - [23/Apr/2026 18:08:10] "GET /api/projects HTTP/1.1" 200 - +127.0.0.1 - - [23/Apr/2026 18:08:16] "GET / HTTP/1.1" 200 - +192.168.2.8 - - [23/Apr/2026 18:08:18] "GET /api/projects HTTP/1.1" 200 - +127.0.0.1 - - [23/Apr/2026 18:08:18] "GET / HTTP/1.1" 200 - +192.168.2.8 - - [23/Apr/2026 18:08:20] "GET /api/projects HTTP/1.1" 200 - +127.0.0.1 - - [23/Apr/2026 18:08:28] "GET / HTTP/1.1" 200 - +192.168.2.8 - - [23/Apr/2026 18:08:30] "GET /api/projects HTTP/1.1" 200 - +127.0.0.1 - - [23/Apr/2026 18:08:35] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [23/Apr/2026 18:08:38] "GET / HTTP/1.1" 200 - +192.168.2.8 - - [23/Apr/2026 18:08:40] "GET /api/projects HTTP/1.1" 200 - +127.0.0.1 - - [23/Apr/2026 18:08:46] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [23/Apr/2026 18:08:47] "GET / HTTP/1.1" 200 - +192.168.2.8 - - [23/Apr/2026 18:08:48] "GET /api/projects HTTP/1.1" 200 - +127.0.0.1 - - [23/Apr/2026 18:08:48] "GET / HTTP/1.1" 200 - +192.168.2.8 - - [23/Apr/2026 18:08:50] "GET /api/projects HTTP/1.1" 200 -