Files
Course/Server/tests/test1/index.html
2025-11-07 18:39:29 +08:00

268 lines
10 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>系统指标详情</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
line-height: 1.6;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
h1 {
text-align: center;
color: #2c3e50;
margin-bottom: 30px;
}
.section {
margin-bottom: 40px;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
h2 {
color: #34495e;
border-left: 4px solid #3498db;
padding-left: 10px;
margin-top: 0;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
}
th,
td {
padding: 12px 15px;
text-align: left;
border-bottom: 1px solid #ecf0f1;
}
th {
background-color: #f8f9fa;
color: #2c3e50;
font-weight: 600;
}
tr:hover {
background-color: #f8f9fa;
}
.network-item {
margin-bottom: 15px;
padding: 15px;
border-radius: 6px;
background-color: #f8f9fa;
}
.update-time {
text-align: right;
color: #7f8c8d;
font-size: 0.9em;
margin-bottom: 10px;
}
@media (max-width: 768px) {
table,
th,
td {
display: block;
}
th {
position: absolute;
top: -9999px;
left: -9999px;
}
tr {
margin-bottom: 15px;
border: 1px solid #ecf0f1;
border-radius: 6px;
}
td {
position: relative;
padding-left: 50%;
border-bottom: none;
}
td:before {
position: absolute;
left: 15px;
content: attr(data-label);
font-weight: 600;
color: #2c3e50;
}
}
</style>
</head>
<body>
<div class="container">
<h1>系统指标详情</h1>
<div class="update-time" id="updateTime"></div>
<div id="content"></div>
</div>
</body>
<script>
let data = `@@@`;
// 解析数据并渲染页面
function renderData() {
const systemData = JSON.parse(data);
const content = document.getElementById('content');
let html = '';
// 更新时间
document.getElementById('updateTime').textContent = `最后更新: ${new Date().toLocaleString()}`;
// 1. 系统信息
html += `
<div class="section">
<h2>1. 系统基础信息</h2>
<table>
<tr><th>指标名称</th><th>数值</th></tr>
<tr><td data-label="指标名称">操作系统类型</td><td data-label="数值">${systemData.SystemInfo.osType}</td></tr>
<tr><td data-label="指标名称">系统平台</td><td data-label="数值">${systemData.SystemInfo.osPlatform}</td></tr>
<tr><td data-label="指标名称">系统版本</td><td data-label="数值">${systemData.SystemInfo.osVersion}</td></tr>
<tr><td data-label="指标名称">系统名称</td><td data-label="数值">${systemData.SystemInfo.osName}</td></tr>
<tr><td data-label="指标名称">系统架构</td><td data-label="数值">${systemData.SystemInfo.arch}</td></tr>
<tr><td data-label="指标名称">主机名</td><td data-label="数值">${systemData.SystemInfo.hostname}</td></tr>
<tr><td data-label="指标名称">系统启动时间</td><td data-label="数值">${systemData.SystemInfo.systemStartTime} ${systemData.SystemInfo.systemStartTime === '1970/1/1' ? '(可能为数据异常)' : ''}</td></tr>
<tr><td data-label="指标名称">系统运行时长</td><td data-label="数值">${systemData.SystemInfo.systemRunningTime}</td></tr>
</table>
</div>`;
// 2. CPU信息
html += `
<div class="section">
<h2>2. CPU信息</h2>
<table>
<tr><th>指标名称</th><th>数值</th></tr>
<tr><td data-label="指标名称">CPU核心数</td><td data-label="数值">${systemData.CPUInfo.number}</td></tr>
<tr><td data-label="指标名称">CPU型号</td><td data-label="数值">${systemData.CPUInfo.model}</td></tr>
<tr><td data-label="指标名称">CPU基础频率</td><td data-label="数值">${systemData.CPUInfo.speed}</td></tr>
</table>
</div>`;
// 3. 内存信息
html += `
<div class="section">
<h2>3. 内存信息</h2>
<table>
<tr><th>指标名称</th><th>数值</th></tr>
<tr><td data-label="指标名称">总内存</td><td data-label="数值">${systemData.MemoryInfo.total}</td></tr>
<tr><td data-label="指标名称">空闲内存</td><td data-label="数值">${systemData.MemoryInfo.freeMemory}</td></tr>
<tr><td data-label="指标名称">已使用内存</td><td data-label="数值">${systemData.MemoryInfo.useMemory}</td></tr>
<tr><td data-label="指标名称">内存使用率</td><td data-label="数值">${systemData.MemoryInfo.useRate}</td></tr>
</table>
</div>`;
// 4. 用户信息
html += `
<div class="section">
<h2>4. 用户信息</h2>
<table>
<tr><th>指标名称</th><th>数值</th></tr>
<tr><td data-label="指标名称">用户名</td><td data-label="数值">${systemData.UserInfo.userName}</td></tr>
<tr><td data-label="指标名称">用户IDuid</td><td data-label="数值">${systemData.UserInfo.uid} (Windows系统默认值)</td></tr>
<tr><td data-label="指标名称">用户组IDgid</td><td data-label="数值">${systemData.UserInfo.gid} (Windows系统默认值)</td></tr>
<tr><td data-label="指标名称">用户主目录</td><td data-label="数值">${systemData.UserInfo.homeDir}</td></tr>
<tr><td data-label="指标名称">默认shell</td><td data-label="数值">${systemData.UserInfo.shell}</td></tr>
</table>
</div>`;
// 5. 目录信息
html += `
<div class="section">
<h2>5. 目录信息</h2>
<table>
<tr><th>指标名称</th><th>数值</th></tr>
<tr><td data-label="指标名称">用户主目录</td><td data-label="数值">${systemData.DirInfo.homeDir}</td></tr>
<tr><td data-label="指标名称">临时目录</td><td data-label="数值">${systemData.DirInfo.tmpDir}</td></tr>
</table>
</div>`;
// 6. 负载信息
html += `
<div class="section">
<h2>6. 系统负载信息</h2>
<table>
<tr><th>指标名称</th><th>数值</th></tr>
<tr><td data-label="指标名称">1分钟负载</td><td data-label="数值">${systemData.DutyInfo.min1}</td></tr>
<tr><td data-label="指标名称">5分钟负载</td><td data-label="数值">${systemData.DutyInfo.min5}</td></tr>
<tr><td data-label="指标名称">15分钟负载</td><td data-label="数值">${systemData.DutyInfo.min15}</td></tr>
</table>
</div>`;
// 7. 网络接口信息
html += `<div class="section"><h2>7. 网络接口信息</h2><div id="networkList">`;
systemData.NetworkInterfaceInfo.forEach(iface => {
html += `
<div class="network-item">
<h3>网络接口:${iface.name} ${iface.localAddress ? '(本地回环)' : ''}</h3>
<table>
<tr><td data-label="指标名称">网络协议</td><td data-label="数值">${iface.family}</td></tr>
<tr><td data-label="指标名称">IP地址</td><td data-label="数值">${iface.ip}</td></tr>
<tr><td data-label="指标名称">MAC地址</td><td data-label="数值">${iface.mac}</td></tr>
<tr><td data-label="指标名称">是否本地地址</td><td data-label="数值">${iface.localAddress ? '是' : '否'}</td></tr>
<tr><td data-label="指标名称">子网掩码</td><td data-label="数值">${iface.netmask}</td></tr>
</table>
</div>`;
});
html += `</div></div>`;
console.log(html);
content.innerHTML = html;
}
// 初始渲染
renderData();
// 模拟数据更新每5秒更新一次运行时间
setInterval(() => {
const systemData = JSON.parse(data);
// 解析当前运行时间并增加1分钟
const timeMatch = systemData.SystemInfo.systemRunningTime.match(/(\d+)小时 (\d+\.\d+)分钟/);
if (timeMatch) {
const hours = parseInt(timeMatch[1]);
let minutes = parseFloat(timeMatch[2]) + 1;
// 处理分钟进位
if (minutes >= 60) {
minutes -= 60;
systemData.SystemInfo.systemRunningTime = `${hours + 1}小时 ${minutes.toFixed(15)}分钟`;
} else {
systemData.SystemInfo.systemRunningTime = `${hours}小时 ${minutes.toFixed(15)}分钟`;
}
// 更新内存使用率随机波动1-2%
const currentRate = parseInt(systemData.MemoryInfo.useRate);
const newRate = Math.max(10, Math.min(90, currentRate + (Math.random() > 0.5 ? 1 : -1)));
systemData.MemoryInfo.useRate = `${newRate}%`;
// 重新序列化数据
data = JSON.stringify(systemData);
// 重新渲染页面
renderData();
}
}, 5000); // 5秒更新一次
</script>
</html>