计算移动到后端进行

This commit is contained in:
CN-JS-HuiBai
2026-04-05 22:53:23 +08:00
parent afe7361e06
commit 28432c9c23
2 changed files with 47 additions and 52 deletions

View File

@@ -706,12 +706,12 @@
valB = b.cpuPercent ?? 0;
break;
case 'mem':
valA = a.memTotal > 0 ? (a.memUsed / a.memTotal) : 0;
valB = b.memTotal > 0 ? (b.memUsed / b.memTotal) : 0;
valA = a.memPercent ?? 0;
valB = b.memPercent ?? 0;
break;
case 'disk':
valA = a.diskTotal > 0 ? (a.diskUsed / a.diskTotal) : 0;
valB = b.diskTotal > 0 ? (b.diskUsed / b.diskTotal) : 0;
valA = a.diskPercent ?? 0;
valB = b.diskPercent ?? 0;
break;
case 'netRx':
valA = a.netRx ?? 0;
@@ -853,8 +853,8 @@
}
dom.serverTableBody.innerHTML = servers.map(server => {
const memPct = server.memTotal > 0 ? (server.memUsed / server.memTotal * 100) : 0;
const diskPct = server.diskTotal > 0 ? (server.diskUsed / server.diskTotal * 100) : 0;
const memPct = server.memPercent || 0;
const diskPct = server.diskPercent || 0;
return `
<tr data-instance="${escapeHtml(server.instance)}" data-job="${escapeHtml(server.job)}" data-source="${escapeHtml(server.source)}" style="cursor: pointer;">
@@ -943,9 +943,8 @@
dom.detailUptime.textContent = `${days}${hours}小时 ${mins}`;
// Disk Total
const totalDiskSize = (data.partitions || []).reduce((sum, p) => sum + (p.size || 0), 0);
if (dom.detailDiskTotal) {
dom.detailDiskTotal.textContent = formatBytes(totalDiskSize);
dom.detailDiskTotal.textContent = formatBytes(data.totalDiskSize || 0);
}
// Define metrics to show
@@ -1118,15 +1117,8 @@
if (!res.ok) throw new Error('Query failed');
const data = await res.json();
if (metricKey === 'cpuBusy' && data.series) {
// Simplify: ONLY show total busy CPU usage (everything except idle)
// Since it's a percentage, 100 - idle is the total busy percentage
data.values = data.series.idle.map(idleVal => Math.max(0, 100 - idleVal));
data.series = null; // This tells MetricChart to draw a single line instead of stacked area
}
if (metricKey === 'networkTrend') {
const stats = calculateHistoryStats(data);
if (metricKey === 'networkTrend' && data.stats) {
const stats = data.stats;
const summaryDiv = document.getElementById(`summary-${metricKey}`);
if (summaryDiv) {
summaryDiv.style.display = 'flex';
@@ -1148,38 +1140,6 @@
}
};
function calculateHistoryStats(data) {
if (!data.timestamps || data.timestamps.length < 2) {
return { rxTotal: 0, txTotal: 0, p95: 0, total: 0 };
}
const tx = data.tx || [];
const rx = data.rx || [];
const ts = data.timestamps;
let rxTotal = 0;
let txTotal = 0;
for (let i = 0; i < ts.length - 1; i++) {
// Find interval in seconds
const duration = (ts[i+1] - ts[i]) / 1000;
// Bandwidth (B/s) * time (s) = Bytes
rxTotal += (rx[i] || 0) * duration;
txTotal += (tx[i] || 0) * duration;
}
// P95 calculation for TX (consistent with AreaChart)
const sortedTx = [...tx].sort((a, b) => a - b);
const p95Idx = Math.floor(sortedTx.length * 0.95);
const p95 = sortedTx.length > 0 ? sortedTx[p95Idx] : 0;
return {
rxTotal,
txTotal,
p95,
total: rxTotal + txTotal
};
}
window.loadCustomMetricHistory = async function (metricKey, event) {
if (event) event.stopPropagation();