From 1eb7a6eb6bd0990f8e1022a67c5011935479fbbb Mon Sep 17 00:00:00 2001 From: dengqichen Date: Thu, 11 Dec 2025 18:03:47 +0800 Subject: [PATCH] =?UTF-8?q?1.20=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../deploy/dto/ServerMonitorMetricsDTO.java | 12 +++++----- .../impl/ServerMonitorServiceImpl.java | 22 ++++++++++++------- .../List/components/ServerMonitorDialog.tsx | 14 ++++++------ 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ServerMonitorMetricsDTO.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ServerMonitorMetricsDTO.java index b1d1770a..8331907a 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ServerMonitorMetricsDTO.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ServerMonitorMetricsDTO.java @@ -139,10 +139,10 @@ public class ServerMonitorMetricsDTO { @Schema(description = "发送字节数") private Long txBytes; - @Schema(description = "接收速率(MB/s)") + @Schema(description = "接收速率(KB/s)") private BigDecimal rxMBps; - @Schema(description = "发送速率(MB/s)") + @Schema(description = "发送速率(KB/s)") private BigDecimal txMBps; } @@ -253,16 +253,16 @@ public class ServerMonitorMetricsDTO { @Schema(description = "总发送字节数") private Long totalTxBytes; - @Schema(description = "平均接收速率(MB/s)") + @Schema(description = "平均接收速率(KB/s)") private BigDecimal avgRxMBps; - @Schema(description = "平均发送速率(MB/s)") + @Schema(description = "平均发送速率(KB/s)") private BigDecimal avgTxMBps; - @Schema(description = "峰值接收速率(MB/s)") + @Schema(description = "峰值接收速率(KB/s)") private BigDecimal peakRxMBps; - @Schema(description = "峰值发送速率(MB/s)") + @Schema(description = "峰值发送速率(KB/s)") private BigDecimal peakTxMBps; } } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ServerMonitorServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ServerMonitorServiceImpl.java index edb96571..d802c727 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ServerMonitorServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ServerMonitorServiceImpl.java @@ -229,14 +229,17 @@ public class ServerMonitorServiceImpl implements IServerMonitorService { .reduce(BigDecimal.ZERO, BigDecimal::add) .divide(BigDecimal.valueOf(successRecords.size()), 2, RoundingMode.HALF_UP); + // 网络流量是累计值,取最后一个有效值(而非求和) + ServerMonitor lastRecord = successRecords.get(successRecords.size() - 1); + return ServerMonitor.builder() .serverId(group.get(0).getServerId()) .cpuUsage(avgCpu) .memoryUsage(avgMemory) .memoryUsed(successRecords.get(0).getMemoryUsed()) - .diskUsage(successRecords.get(successRecords.size() - 1).getDiskUsage()) - .networkRx(successRecords.stream().mapToLong(m -> m.getNetworkRx() != null ? m.getNetworkRx() : 0).sum()) - .networkTx(successRecords.stream().mapToLong(m -> m.getNetworkTx() != null ? m.getNetworkTx() : 0).sum()) + .diskUsage(lastRecord.getDiskUsage()) + .networkRx(lastRecord.getNetworkRx()) + .networkTx(lastRecord.getNetworkTx()) .collectTime(group.get(0).getCollectTime()) .status(StatusEnum.SUCCESS) .build(); @@ -348,8 +351,9 @@ public class ServerMonitorServiceImpl implements IServerMonitorService { if (timeDiff > 0 && previous.getNetworkRx() != null && previous.getNetworkTx() != null) { long rxDiff = current.getNetworkRx() - previous.getNetworkRx(); long txDiff = current.getNetworkTx() - previous.getNetworkTx(); - rxMBps = BigDecimal.valueOf(rxDiff).divide(BigDecimal.valueOf(timeDiff * 1024 * 1024), 2, RoundingMode.HALF_UP); - txMBps = BigDecimal.valueOf(txDiff).divide(BigDecimal.valueOf(timeDiff * 1024 * 1024), 2, RoundingMode.HALF_UP); + // 改为KB/s单位,提高精度(原来MB/s对于小流量会四舍五入为0) + rxMBps = BigDecimal.valueOf(rxDiff).divide(BigDecimal.valueOf(timeDiff * 1024), 2, RoundingMode.HALF_UP); + txMBps = BigDecimal.valueOf(txDiff).divide(BigDecimal.valueOf(timeDiff * 1024), 2, RoundingMode.HALF_UP); } } @@ -475,7 +479,7 @@ public class ServerMonitorServiceImpl implements IServerMonitorService { return null; } - // 计算总流量(从原始数据) + // 计算总流量(累计值,取最后一个有效值) List successData = data.stream() .filter(m -> StatusEnum.SUCCESS.equals(m.getStatus()) && m.getNetworkRx() != null && m.getNetworkTx() != null) @@ -485,8 +489,10 @@ public class ServerMonitorServiceImpl implements IServerMonitorService { return null; } - long totalRx = successData.stream().mapToLong(ServerMonitor::getNetworkRx).sum(); - long totalTx = successData.stream().mapToLong(ServerMonitor::getNetworkTx).sum(); + // 网络流量是累计值,取最后一个值(而非求和) + ServerMonitor lastRecord = successData.get(successData.size() - 1); + long totalRx = lastRecord.getNetworkRx(); + long totalTx = lastRecord.getNetworkTx(); // 计算速率统计(从已构建的 NetworkMetric 数据中提取) BigDecimal avgRxMBps = null; diff --git a/frontend/src/pages/Resource/Server/List/components/ServerMonitorDialog.tsx b/frontend/src/pages/Resource/Server/List/components/ServerMonitorDialog.tsx index f853afc3..50651b25 100644 --- a/frontend/src/pages/Resource/Server/List/components/ServerMonitorDialog.tsx +++ b/frontend/src/pages/Resource/Server/List/components/ServerMonitorDialog.tsx @@ -513,46 +513,46 @@ export const ServerMonitorDialog: React.FC = ({ 磁盘 - + {monitorData.metrics.cpu && monitorData.metrics.cpu.length > 0 ? ( ) : ( -
+
暂无CPU数据
)} - + {monitorData.metrics.memory && monitorData.metrics.memory.length > 0 ? ( ) : ( -
+
暂无内存数据
)} - + {monitorData.metrics.network && monitorData.metrics.network.length > 0 ? ( ) : ( -
+
暂无网络数据
)} - + {renderDiskInfo()}