feat: 监控阈值设置新增CPU温度项

- 默认阈值: 80°C (范围 30-120°C)
- 同时监控 CPU0 和 CPU1 (双路服务器)
- 超温时弹窗警告 + 桌面通知
This commit is contained in:
2026-06-01 17:13:06 +08:00
parent bb19141edc
commit ecbba836d9
2 changed files with 20 additions and 1 deletions

View File

@@ -26,6 +26,7 @@ APP_PORT = 16022
# 监控配置 # 监控配置
DEFAULT_THRESHOLDS = { DEFAULT_THRESHOLDS = {
'cpu': 80, 'cpu': 80,
'cpu_temp': 80,
'memory': 85, 'memory': 85,
'disk': 90, 'disk': 90,
'interval': 60 'interval': 60

View File

@@ -305,6 +305,16 @@
<span class="text-gray-500 text-xs">%</span> <span class="text-gray-500 text-xs">%</span>
</div> </div>
</div> </div>
<div class="threshold-item">
<div class="threshold-label">
<i class="ri-temp-hot-line threshold-icon text-red-400"></i>
<span class="text-gray-300 text-sm">CPU 温度</span>
</div>
<div class="flex items-center gap-2">
<input type="number" id="thresholdCpuTemp" class="threshold-input" min="30" max="120" value="80" onchange="saveThresholds()">
<span class="text-gray-500 text-xs">°C</span>
</div>
</div>
<div class="threshold-item"> <div class="threshold-item">
<div class="threshold-label"> <div class="threshold-label">
<i class="ri-database-2-line threshold-icon text-green-400"></i> <i class="ri-database-2-line threshold-icon text-green-400"></i>
@@ -756,7 +766,7 @@
let realtimeTimer = null; let realtimeTimer = null;
let realtimeInterval = 2; // 秒 let realtimeInterval = 2; // 秒
let lastAlertTime = 0; // 上次警告时间 let lastAlertTime = 0; // 上次警告时间
let thresholds = { cpu: 80, memory: 85, disk: 90, interval: 60 }; let thresholds = { cpu: 80, cpu_temp: 80, memory: 85, disk: 90, interval: 60 };
let desktopNotifyEnabled = false; let desktopNotifyEnabled = false;
function switchTab(tab) { function switchTab(tab) {
@@ -799,6 +809,7 @@
if (config.thresholds) { if (config.thresholds) {
thresholds = config.thresholds; thresholds = config.thresholds;
document.getElementById('thresholdCpu').value = thresholds.cpu || 80; document.getElementById('thresholdCpu').value = thresholds.cpu || 80;
document.getElementById('thresholdCpuTemp').value = thresholds.cpu_temp || 80;
document.getElementById('thresholdMemory').value = thresholds.memory || 85; document.getElementById('thresholdMemory').value = thresholds.memory || 85;
document.getElementById('thresholdDisk').value = thresholds.disk || 90; document.getElementById('thresholdDisk').value = thresholds.disk || 90;
document.getElementById('thresholdInterval').value = thresholds.interval || 60; document.getElementById('thresholdInterval').value = thresholds.interval || 60;
@@ -811,6 +822,7 @@
// 保存阈值设置 // 保存阈值设置
async function saveThresholds() { async function saveThresholds() {
thresholds.cpu = parseInt(document.getElementById('thresholdCpu').value) || 80; thresholds.cpu = parseInt(document.getElementById('thresholdCpu').value) || 80;
thresholds.cpu_temp = parseInt(document.getElementById('thresholdCpuTemp').value) || 80;
thresholds.memory = parseInt(document.getElementById('thresholdMemory').value) || 85; thresholds.memory = parseInt(document.getElementById('thresholdMemory').value) || 85;
thresholds.disk = parseInt(document.getElementById('thresholdDisk').value) || 90; thresholds.disk = parseInt(document.getElementById('thresholdDisk').value) || 90;
thresholds.interval = parseInt(document.getElementById('thresholdInterval').value) || 60; thresholds.interval = parseInt(document.getElementById('thresholdInterval').value) || 60;
@@ -935,6 +947,12 @@
if (data.disk.percent >= thresholds.disk) { if (data.disk.percent >= thresholds.disk) {
warnings.push(`磁盘使用率 ${data.disk.percent.toFixed(1)}% 超过阈值 ${thresholds.disk}%`); warnings.push(`磁盘使用率 ${data.disk.percent.toFixed(1)}% 超过阈值 ${thresholds.disk}%`);
} }
if (data.cpu.temp_package_0 !== null && data.cpu.temp_package_0 >= thresholds.cpu_temp) {
warnings.push(`CPU0 温度 ${data.cpu.temp_package_0.toFixed(1)}°C 超过阈值 ${thresholds.cpu_temp}°C`);
}
if (data.cpu.temp_package_1 !== null && data.cpu.temp_package_1 >= thresholds.cpu_temp) {
warnings.push(`CPU1 温度 ${data.cpu.temp_package_1.toFixed(1)}°C 超过阈值 ${thresholds.cpu_temp}°C`);
}
if (warnings.length > 0) { if (warnings.length > 0) {
lastAlertTime = now; lastAlertTime = now;