1、修复虚拟网卡收益计算、流量图默认单位不正确问题。

2、联调告警阈值配置接口。
3、优化挂载点数据展示。
This commit is contained in:
gaoyutao
2026-01-26 18:52:52 +08:00
parent edddf77b6a
commit 5dd1b90acb
14 changed files with 227 additions and 129 deletions
@@ -948,7 +948,7 @@ public class MessageHandler {
cpus.forEach(iface -> {
iface.setClientId(message.getClientId());
iface.setCreateTime(createTime);
if(iface.getTemperature() == 0L){
if(iface.getTemperature() != null && iface.getTemperature() == 0L){
iface.setTemperature(null);
}
});
@@ -973,74 +973,77 @@ public class MessageHandler {
long timestamp = disks.get(0).getTimestamp();
long millis = timestamp * 1000;
Date createTime = new Date(millis / 1000 * 1000);
// 关键:每个clientId有自己独立的key
String diskCountKey = DISK_COUNT_PREFIX + clientId;
// 1. 给这个客户端的所有磁盘次数+1
Map<Object, Object> diskCountMap = redisTemplate.opsForHash().entries(diskCountKey);
for (Map.Entry<Object, Object> entry : diskCountMap.entrySet()) {
String diskName = (String) entry.getKey();
String countStr = (String) entry.getValue();
try {
int count = Integer.parseInt(countStr) + 1;
redisTemplate.opsForHash().put(diskCountKey, diskName, String.valueOf(count));
} catch (NumberFormatException e) {
redisTemplate.opsForHash().put(diskCountKey, diskName, "1");
}
}
// 2. 处理本次上报的磁盘
Set<String> reportedDisks = new HashSet<>();
disks.forEach(disk -> {
String diskName = disk.getName();
reportedDisks.add(diskName);
// 本次上报的磁盘,次数重置为0
redisTemplate.opsForHash().put(diskCountKey, diskName, "0");
disk.setClientId(clientId);
disk.setCreateTime(createTime);
});
// 3. 检查次数≥3的磁盘
diskCountMap = redisTemplate.opsForHash().entries(diskCountKey);
List<String> disksToRemove = new ArrayList<>();
for (Map.Entry<Object, Object> entry : diskCountMap.entrySet()) {
String diskName = (String) entry.getKey();
String countStr = (String) entry.getValue();
try {
int count = Integer.parseInt(countStr);
// 如果次数≥3且本次没上报
if (count >= 3 && !reportedDisks.contains(diskName)) {
AllDiskName allDiskName = new AllDiskName();
allDiskName.setStatus(0);
allDiskName.setClientId(clientId);
allDiskName.setName(diskName);
allDiskNameService.updateAllDiskName(allDiskName);
disksToRemove.add(diskName);
// 磁盘缺失,触发告警
RmAlarmLog rmAlarmLog = new RmAlarmLog();
rmAlarmLog.setClientId(clientId);
rmAlarmLog.setAlarmTime(DateUtils.getNowDate());
rmAlarmLog.setAlarmType(AlarmTypeEnum.磁盘缺失.getCode());
rmAlarmLog.setAlarmContent("服务器" + clientId + "磁盘缺失,磁盘名称:" + diskName);
rmAlarmLogService.insertRmAlarmLog(rmAlarmLog);
sendAlarmPushUtil.sendAlarmPush(rmAlarmLog);
}
} catch (NumberFormatException e) {
disksToRemove.add(diskName);
}
}
// 4. 删除已处理的磁盘记录
if (!disksToRemove.isEmpty()) {
redisTemplate.opsForHash().delete(diskCountKey, disksToRemove.toArray());
}
// // 关键:每个clientId有自己独立的key
// String diskCountKey = DISK_COUNT_PREFIX + clientId;
//
// // 1. 给这个客户端的所有磁盘次数+1
// Map<Object, Object> diskCountMap = redisTemplate.opsForHash().entries(diskCountKey);
// for (Map.Entry<Object, Object> entry : diskCountMap.entrySet()) {
// String diskName = (String) entry.getKey();
// String countStr = (String) entry.getValue();
//
// try {
// int count = Integer.parseInt(countStr) + 1;
// redisTemplate.opsForHash().put(diskCountKey, diskName, String.valueOf(count));
// } catch (NumberFormatException e) {
// redisTemplate.opsForHash().put(diskCountKey, diskName, "1");
// }
// }
//
// // 2. 处理本次上报的磁盘
// Set<String> reportedDisks = new HashSet<>();
// disks.forEach(disk -> {
// String diskName = disk.getName();
// reportedDisks.add(diskName);
//
// // 本次上报的磁盘,次数重置为0
// redisTemplate.opsForHash().put(diskCountKey, diskName, "0");
//
// disk.setClientId(clientId);
// disk.setCreateTime(createTime);
// });
//
// // 3. 检查次数≥3的磁盘
// diskCountMap = redisTemplate.opsForHash().entries(diskCountKey);
// List<String> disksToRemove = new ArrayList<>();
//
// for (Map.Entry<Object, Object> entry : diskCountMap.entrySet()) {
// String diskName = (String) entry.getKey();
// String countStr = (String) entry.getValue();
//
// try {
// int count = Integer.parseInt(countStr);
// // 如果次数≥3且本次没上报
// if (count >= 3 && !reportedDisks.contains(diskName)) {
// AllDiskName allDiskName = new AllDiskName();
// allDiskName.setStatus(0);
// allDiskName.setClientId(clientId);
// allDiskName.setName(diskName);
// allDiskNameService.updateAllDiskName(allDiskName);
// disksToRemove.add(diskName);
// // 磁盘缺失,触发告警
// RmAlarmLog rmAlarmLog = new RmAlarmLog();
// rmAlarmLog.setClientId(clientId);
// rmAlarmLog.setAlarmTime(DateUtils.getNowDate());
// rmAlarmLog.setAlarmType(AlarmTypeEnum.磁盘缺失.getCode());
// rmAlarmLog.setAlarmContent("服务器" + clientId + "磁盘缺失,磁盘名称:" + diskName);
// rmAlarmLogService.insertRmAlarmLog(rmAlarmLog);
// sendAlarmPushUtil.sendAlarmPush(rmAlarmLog);
//
// }
// } catch (NumberFormatException e) {
// disksToRemove.add(diskName);
// }
// }
//
// // 4. 删除已处理的磁盘记录
// if (!disksToRemove.isEmpty()) {
// redisTemplate.opsForHash().delete(diskCountKey, disksToRemove.toArray());
// }
// 5. 数据入库
initialDiskInfoService.batchInsertInitialDiskInfo(disks, createTime);