feat: CPU温度监控 + 端口统一调整为16022
- 添加双CPU Package温度显示 (CPU0/CPU1) - 端口从19013改为16022 - projects.json精简配置,适配hz1服务器 - Git仓库地址更新为新地址
This commit is contained in:
45
app.py
45
app.py
@@ -30,6 +30,27 @@ try:
|
||||
except ImportError:
|
||||
HAS_PSUTIL = False
|
||||
|
||||
# CPU 温度获取
|
||||
def get_cpu_temperatures():
|
||||
"""获取 CPU Package 温度"""
|
||||
temps = {'package_0': None, 'package_1': None}
|
||||
try:
|
||||
result = subprocess.run(['sensors'], capture_output=True, text=True, timeout=5)
|
||||
output = result.stdout
|
||||
# 解析 Package id 0 和 Package id 1
|
||||
for line in output.split('\n'):
|
||||
if 'Package id 0:' in line:
|
||||
match = re.search(r'Package id 0:\s*([+\d.]+)°C', line)
|
||||
if match:
|
||||
temps['package_0'] = float(match.group(1).replace('+', ''))
|
||||
elif 'Package id 1:' in line:
|
||||
match = re.search(r'Package id 1:\s*([+\d.]+)°C', line)
|
||||
if match:
|
||||
temps['package_1'] = float(match.group(1).replace('+', ''))
|
||||
except Exception as e:
|
||||
log_message(f"获取CPU温度失败: {e}")
|
||||
return temps
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
@@ -718,6 +739,9 @@ def api_system_stats():
|
||||
cpu_count = psutil.cpu_count(logical=False) or psutil.cpu_count()
|
||||
cpu_count_logical = psutil.cpu_count(logical=True)
|
||||
|
||||
# CPU 温度
|
||||
cpu_temps = get_cpu_temperatures()
|
||||
|
||||
# 内存
|
||||
mem = psutil.virtual_memory()
|
||||
mem_total_gb = round(mem.total / (1024**3), 2)
|
||||
@@ -769,7 +793,9 @@ def api_system_stats():
|
||||
'cpu': {
|
||||
'percent': cpu_percent,
|
||||
'count': cpu_count,
|
||||
'logical': cpu_count_logical
|
||||
'logical': cpu_count_logical,
|
||||
'temp_package_0': cpu_temps['package_0'],
|
||||
'temp_package_1': cpu_temps['package_1']
|
||||
},
|
||||
'memory': {
|
||||
'total_gb': mem_total_gb,
|
||||
@@ -1377,6 +1403,12 @@ HTML_TEMPLATE = '''<!DOCTYPE html>
|
||||
<div id="cpuBar" class="bg-blue-500 h-4 rounded-full transition-all duration-300" style="width: 0%"></div>
|
||||
</div>
|
||||
<p class="text-gray-400 text-sm">物理核心: <span id="cpuPhysical">-</span> | 逻辑核心: <span id="cpuLogical">-</span></p>
|
||||
<div class="mt-3 pt-3 border-t border-gray-700">
|
||||
<p class="text-gray-400 text-sm flex items-center gap-4">
|
||||
<span><i class="ri-temp-hot-line text-red-400"></i> CPU0: <span id="cpuTemp0" class="text-white font-medium">-</span>°C</span>
|
||||
<span><i class="ri-temp-hot-line text-red-400"></i> CPU1: <span id="cpuTemp1" class="text-white font-medium">-</span>°C</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card rounded-xl p-6">
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
@@ -2114,6 +2146,13 @@ HTML_TEMPLATE = '''<!DOCTYPE html>
|
||||
document.getElementById('cpuBar').style.width = data.cpu.percent + '%';
|
||||
document.getElementById('cpuPhysical').textContent = data.cpu.count;
|
||||
document.getElementById('cpuLogical').textContent = data.cpu.logical;
|
||||
// CPU 温度
|
||||
if (data.cpu.temp_package_0 !== null) {
|
||||
document.getElementById('cpuTemp0').textContent = data.cpu.temp_package_0.toFixed(1);
|
||||
}
|
||||
if (data.cpu.temp_package_1 !== null) {
|
||||
document.getElementById('cpuTemp1').textContent = data.cpu.temp_package_1.toFixed(1);
|
||||
}
|
||||
|
||||
// 内存
|
||||
document.getElementById('memPercent').textContent = data.memory.percent.toFixed(1) + '%';
|
||||
@@ -3372,8 +3411,8 @@ if __name__ == '__main__':
|
||||
|
||||
log_message("=" * 50)
|
||||
log_message("项目服务管理面板 v2.0.0 启动")
|
||||
log_message("访问地址: http://localhost:19013")
|
||||
log_message("访问地址: http://localhost:16022")
|
||||
log_message(f"进程PID: {os.getpid()}")
|
||||
log_message("=" * 50)
|
||||
|
||||
app.run(host='0.0.0.0', port=19013, debug=False)
|
||||
app.run(host='0.0.0.0', port=16022, debug=False)
|
||||
Reference in New Issue
Block a user