优化实时95值计算功能、服务器收益功能、用户自定义列展示、交换机基础数据采集

This commit is contained in:
gaoyutao
2025-10-31 21:46:17 +08:00
parent c0f057d7ed
commit 01c51b39fe
36 changed files with 964 additions and 452 deletions
@@ -24,7 +24,6 @@ import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SessionCallback;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@@ -651,7 +650,7 @@ public class DeviceMessageHandler {
}
// 添加一个定时任务方法,定期检查心跳状态
@Scheduled(fixedRate = 60000) // 每60s检查一次
// @Scheduled(fixedRate = 60000) // 每60s检查一次
public void checkHeartbeatStatus() {
long currentTime = System.currentTimeMillis();
log.debug("开始心跳状态检查,当前时间: {}", currentTime);
@@ -115,6 +115,7 @@ public class MessageHandler {
private void handleNetWorkDelectMessage(DeviceMessage message) {
List<RegisterMsgVo> interfaces = JsonDataParser.parseJsonData(message.getData(), RegisterMsgVo.class);
if(!interfaces.isEmpty()) {
String clientId = message.getClientId();
RegisterMsgVo registerMsg = interfaces.get(0);
// 时间戳转换
long timestamp = registerMsg.getTimestamp();
@@ -126,6 +127,7 @@ public class MessageHandler {
NetworkInfo networkInfo = networkInfoList.get(0);
// 查询该网卡信息是否存在
RmNetworkInterface queryParam = new RmNetworkInterface();
queryParam.setClientId(clientId);
queryParam.setMacAddress(networkInfo.getMac());
queryParam.setNewFlag(1);
List<RmNetworkInterface> exits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
@@ -134,7 +136,7 @@ public class MessageHandler {
RmNetworkInterface insertData = new RmNetworkInterface();
// 业务ip和管理网ip
insertData.setBindIp("3");
insertData.setClientId(registerMsg.getClientId());
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
@@ -152,9 +154,10 @@ public class MessageHandler {
|| !StringUtils.equals(networkInfo.getGateway(),oldInterfaceMsg.getGateway())){
// 查询该网卡信息是否旧数据
RmNetworkInterface query = new RmNetworkInterface();
query.setMacAddress(networkInfo.getMac());
query.setMacAddress(oldInterfaceMsg.getMacAddress());
query.setClientId(clientId);
query.setNewFlag(999);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(query);
if(!oldExits.isEmpty()){
// 先删除旧数据
oldExits.forEach(oldMsg ->{
@@ -164,10 +167,11 @@ public class MessageHandler {
// 先将已存在的改为旧数据
RmNetworkInterface oldData = new RmNetworkInterface();
oldData.setNewFlag(0);
oldData.setMacAddress(networkInfo.getMac());
oldData.setClientId(clientId);
oldData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(oldData);
RmNetworkInterface insertData = new RmNetworkInterface();
insertData.setMacAddress(networkInfo.getMac());
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
@@ -209,6 +213,8 @@ public class MessageHandler {
}
// 只有有字段变化时才执行更新
if (needUpdate) {
updateData.setClientId(clientId);
updateData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(updateData);
}
}
@@ -217,13 +223,14 @@ public class MessageHandler {
for (NetworkInfo networkInfo : networkInfoList) {
// 查询该网卡信息是否存在
RmNetworkInterface queryParam = new RmNetworkInterface();
queryParam.setClientId(clientId);
queryParam.setMacAddress(networkInfo.getMac());
List<RmNetworkInterface> exits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
if(exits.isEmpty()){
// 保存网卡信息
RmNetworkInterface insertData = new RmNetworkInterface();
// 业务ip和管理网ip
insertData.setClientId(registerMsg.getClientId());
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
@@ -241,9 +248,10 @@ public class MessageHandler {
|| !StringUtils.equals(networkInfo.getGateway(),oldInterfaceMsg.getGateway())){
// 查询该网卡信息是否旧数据
RmNetworkInterface query = new RmNetworkInterface();
query.setClientId(clientId);
query.setMacAddress(networkInfo.getMac());
query.setNewFlag(999);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(query);
if(!oldExits.isEmpty()){
// 先删除旧数据
oldExits.forEach(oldMsg ->{
@@ -253,10 +261,11 @@ public class MessageHandler {
// 先将已存在的改为旧数据
RmNetworkInterface oldData = new RmNetworkInterface();
oldData.setNewFlag(0);
oldData.setMacAddress(networkInfo.getMac());
oldData.setClientId(clientId);
oldData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(oldData);
RmNetworkInterface insertData = new RmNetworkInterface();
insertData.setMacAddress(networkInfo.getMac());
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
@@ -290,7 +299,7 @@ public class MessageHandler {
updateData.setBindIp("0");
// 修改绑定公网ip状态
RmResourceRegistrationRemote updateParam = new RmResourceRegistrationRemote();
updateParam.setClientId(registerMsg.getClientId());
updateParam.setClientId(clientId);
updateParam.setMultiPublicIpStatus("0");
remoteRevenueConfigService.updateStatusByResource(updateParam, SecurityConstants.INNER);
}
@@ -304,6 +313,8 @@ public class MessageHandler {
}
// 只有有字段变化时才执行更新
if (needUpdate) {
updateData.setClientId(clientId);
updateData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(updateData);
}
}
@@ -339,6 +350,7 @@ public class MessageHandler {
private void handleRegisterMessage(DeviceMessage message) {
List<RegisterMsgVo> interfaces = JsonDataParser.parseJsonData(message.getData(), RegisterMsgVo.class);
if(!interfaces.isEmpty()) {
String clientId = message.getClientId();
RegisterMsgVo registerMsg = interfaces.get(0);
// 自动注册服务器信息
RmRegisterMsgRemote rmRegisterMsgRemote = new RmRegisterMsgRemote();
@@ -359,6 +371,7 @@ public class MessageHandler {
NetworkInfo networkInfo = networkInfoList.get(0);
// 查询该网卡信息是否存在
RmNetworkInterface queryParam = new RmNetworkInterface();
queryParam.setClientId(clientId);
queryParam.setMacAddress(networkInfo.getMac());
queryParam.setNewFlag(1);
List<RmNetworkInterface> exits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
@@ -367,7 +380,7 @@ public class MessageHandler {
RmNetworkInterface insertData = new RmNetworkInterface();
// 业务ip和管理网ip
insertData.setBindIp("3");
insertData.setClientId(registerMsg.getClientId());
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
@@ -385,9 +398,10 @@ public class MessageHandler {
|| !StringUtils.equals(networkInfo.getGateway(),oldInterfaceMsg.getGateway())){
// 查询该网卡信息是否旧数据
RmNetworkInterface query = new RmNetworkInterface();
query.setMacAddress(networkInfo.getMac());
query.setClientId(clientId);
query.setMacAddress(oldInterfaceMsg.getMacAddress());
query.setNewFlag(999);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(query);
if(!oldExits.isEmpty()){
// 先删除旧数据
oldExits.forEach(oldMsg ->{
@@ -397,10 +411,11 @@ public class MessageHandler {
// 先将已存在的改为旧数据
RmNetworkInterface oldData = new RmNetworkInterface();
oldData.setNewFlag(0);
oldData.setMacAddress(networkInfo.getMac());
oldData.setMacAddress(oldInterfaceMsg.getMacAddress());
oldData.setClientId(clientId);
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(oldData);
RmNetworkInterface insertData = new RmNetworkInterface();
insertData.setMacAddress(networkInfo.getMac());
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
@@ -442,6 +457,8 @@ public class MessageHandler {
}
// 只有有字段变化时才执行更新
if (needUpdate) {
updateData.setClientId(clientId);
updateData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(updateData);
}
}
@@ -451,12 +468,13 @@ public class MessageHandler {
// 查询该网卡信息是否存在
RmNetworkInterface queryParam = new RmNetworkInterface();
queryParam.setMacAddress(networkInfo.getMac());
queryParam.setClientId(clientId);
List<RmNetworkInterface> exits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
if(exits.isEmpty()){
// 保存网卡信息
RmNetworkInterface insertData = new RmNetworkInterface();
// 业务ip和管理网ip
insertData.setClientId(registerMsg.getClientId());
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
@@ -474,9 +492,10 @@ public class MessageHandler {
|| !StringUtils.equals(networkInfo.getGateway(),oldInterfaceMsg.getGateway())){
// 查询该网卡信息是否旧数据
RmNetworkInterface query = new RmNetworkInterface();
query.setMacAddress(networkInfo.getMac());
query.setClientId(clientId);
query.setMacAddress(oldInterfaceMsg.getMacAddress());
query.setNewFlag(999);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(query);
if(!oldExits.isEmpty()){
// 先删除旧数据
oldExits.forEach(oldMsg ->{
@@ -486,10 +505,11 @@ public class MessageHandler {
// 先将已存在的改为旧数据
RmNetworkInterface oldData = new RmNetworkInterface();
oldData.setNewFlag(0);
oldData.setMacAddress(networkInfo.getMac());
oldData.setClientId(clientId);
oldData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(oldData);
RmNetworkInterface insertData = new RmNetworkInterface();
insertData.setMacAddress(networkInfo.getMac());
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
@@ -523,7 +543,7 @@ public class MessageHandler {
updateData.setBindIp("0");
// 修改绑定公网ip状态
RmResourceRegistrationRemote updateParam = new RmResourceRegistrationRemote();
updateParam.setClientId(registerMsg.getClientId());
updateParam.setClientId(clientId);
updateParam.setMultiPublicIpStatus("0");
remoteRevenueConfigService.updateStatusByResource(updateParam, SecurityConstants.INNER);
}
@@ -537,6 +557,8 @@ public class MessageHandler {
}
// 只有有字段变化时才执行更新
if (needUpdate) {
updateData.setClientId(clientId);
updateData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(updateData);
}
}
@@ -942,7 +964,7 @@ public class MessageHandler {
RmResourceRegistrationRemote rmResourceRegistrationRemote = new RmResourceRegistrationRemote();
rmResourceRegistrationRemote.setOnlineStatus(status);
rmResourceRegistrationRemote.setRegistrationStatus(status);
rmResourceRegistrationRemote.setHardwareSn(clientId);
rmResourceRegistrationRemote.setClientId(clientId);
remoteRevenueConfigService.updateStatusByResource(rmResourceRegistrationRemote, SecurityConstants.INNER);
}
// 插入心跳日志到数据库
@@ -1,5 +1,6 @@
package com.ruoyi.rocketmq.service.impl;
import com.ruoyi.common.core.utils.ConvertOtherTypeUtil;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.EchartsDataUtils;
import com.ruoyi.common.core.utils.SpeedUtils;
@@ -134,8 +135,11 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService
*/
@Override
public InitialSwitchInfo getSwitchNetDetailsMsg(InitialSwitchInfo initialSwitchInfo) {
return initialSwitchInfoMapper.getSwitchNetDetailsMsg(initialSwitchInfo);
InitialSwitchInfo info = initialSwitchInfoMapper.getSwitchNetDetailsMsg(initialSwitchInfo);
if(info.getType()!=null){
info.setType(ConvertOtherTypeUtil.getInterfaceTypeName(Integer.parseInt(info.getType())));
}
return info;
}
/**
@@ -434,10 +434,11 @@ public class RmMonitorPolicyServiceImpl implements IRmMonitorPolicyService
startCollectSwitchMsgToDevices(policy.getDeployDevice(), uniqueList, switchOidVo);
}
// 更新策略状态为已下发
if("1".equals(policy.getPriority())){
if("1".equals(policy.getPriority()) && "0".equals(policy.getStatus())){
RmMonitorPolicy policyUpdate = new RmMonitorPolicy();
policyUpdate.setId(id);
policyUpdate.setStatus("1");
policyUpdate.setDeployTime(DateUtils.getNowDate());
rmMonitorPolicyMapper.updateRmMonitorPolicy(policyUpdate);
}
return 1;
@@ -875,6 +876,9 @@ public class RmMonitorPolicyServiceImpl implements IRmMonitorPolicyService
try {
// 根据clientId 查询 交换机信息
RmSwitchManagementRemote switchMsg = dataProcessUtil.getSwitchMsg(clientId);
if(switchMsg == null){
continue;
}
String switchIp = switchMsg.getSnmpAddress();
String community = switchMsg.getCommunityName();
int port = Math.toIntExact(switchMsg.getSnmpPort());
@@ -123,7 +123,7 @@ public class DynamicOidCollector {
for (Integer index : indexes) {
Map<String, String> deviceInfo = getDeviceInfo(target, index, oidParams);
if (!deviceInfo.isEmpty()) {
deviceInfo.put("index", String.valueOf(index));
// deviceInfo.put("index", String.valueOf(index));
results.add(deviceInfo);
}
}
@@ -138,7 +138,7 @@ public class DynamicOidCollector {
return new CollectionResult(switchVo.getIp(), deviceType, results, true);
} catch (Exception e) {
String errorMsg = String.format("采集失败: {}", e.getMessage());
System.err.printf("采集交换机 {} 的 {} 信息失败: {}",
log.error("采集交换机 {} 的 {} 信息失败: {}",
switchVo.getIp(), deviceType, errorMsg);
return new CollectionResult(switchVo.getIp(), deviceType, errorMsg);
}
@@ -520,51 +520,49 @@ public class DynamicOidCollector {
/**
* 主程序入口 (支持v2c和v3测试)
*/
public static void main(String[] args) {
DynamicOidCollector collector = new DynamicOidCollector();
try {
// 初始化
collector.init();
// 创建动态配置的交换机列表 (支持v2c和v3混合)
List<SwitchOidDto> switches = Arrays.asList(
createExampleSwitch("123.182.89.17", "chengde_200G"), // v2c
createV3ExampleSwitch("1.194.193.81", "v3user", "SHA", "auth123", "AES128", "priv123") // v3
);
// 并发采集所有交换机
System.out.println("开始并发采集 " + switches.size() + " 台交换机...");
long startTime = System.currentTimeMillis();
Map<String, Map<String, CollectionResult>> results = collector.collectAllSwitches(switches);
long endTime = System.currentTimeMillis();
// 显示统计信息
System.out.println("\n=== 采集统计 ===");
int totalDevices = 0;
for (Map.Entry<String, Map<String, CollectionResult>> entry : results.entrySet()) {
String ip = entry.getKey();
Map<String, CollectionResult> deviceResults = entry.getValue();
int switchDevices = deviceResults.values().stream()
.filter(CollectionResult::isSuccess)
.mapToInt(r -> r.getData().size())
.sum();
totalDevices += switchDevices;
log.info("交换机 {}: %d 个设备", ip, switchDevices);
}
log.info("总计: %d 台交换机, %d 个设备", results.size(), totalDevices);
log.info("总采集时间: %.2f 秒", (endTime - startTime) / 1000.0);
} catch (Exception e) {
System.err.println("采集程序出错: " + e.getMessage());
e.printStackTrace();
} finally {
collector.shutdown();
}
}
// public static void main(String[] args) {
// DynamicOidCollector collector = new DynamicOidCollector();
//
// try {
// // 初始化
// collector.init();
//
// // 创建动态配置的交换机列表 (支持v2c和v3混合)
// List<SwitchOidDto> switches = Arrays.asList(
// createExampleSwitch("123.182.89.17", "chengde_200G"), // v2c
// createV3ExampleSwitch("1.194.193.81", "v3user", "SHA", "auth123", "AES128", "priv123") // v3
// );
//
// // 并发采集所有交换机
// log.info("开始并发采集 {} 台交换机...", switches.size());
// long startTime = System.currentTimeMillis();
//
// Map<String, Map<String, CollectionResult>> results = collector.collectAllSwitches(switches);
//
// long endTime = System.currentTimeMillis();
//
// // 显示统计信息
// int totalDevices = 0;
// for (Map.Entry<String, Map<String, CollectionResult>> entry : results.entrySet()) {
// String ip = entry.getKey();
// Map<String, CollectionResult> deviceResults = entry.getValue();
//
// int switchDevices = deviceResults.values().stream()
// .filter(CollectionResult::isSuccess)
// .mapToInt(r -> r.getData().size())
// .sum();
//
// totalDevices += switchDevices;
// }
//
// log.info("总计: %d 台交换机, %d 个设备", results.size(), totalDevices);
// log.info("总采集时间: %.2f 秒", (endTime - startTime) / 1000.0);
//
// } catch (Exception e) {
// log.error("采集程序出错: {}", e.getMessage());
// e.printStackTrace();
// } finally {
// collector.shutdown();
// }
// }
}
@@ -7,7 +7,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
@Component
@Slf4j
@@ -22,14 +25,33 @@ public class SwitchStrategyInitializer {
public void init() {
log.info("开始初始化交换机采集策略...");
try {
// 下发优先级为0的交换机策略
RmMonitorPolicy queryParam = new RmMonitorPolicy();
queryParam.setPriority("0");
queryParam.setResourceType("switch");
List<RmMonitorPolicy> defaultPolicy = rmMonitorPolicyService.selectRmMonitorPolicyList(queryParam);
if(!defaultPolicy.isEmpty()){
rmMonitorPolicyService.issueSwitchPolicy(defaultPolicy.get(0).getId());
}
// 下发交换机策略(优先级0和已下发的优先级1
List<RmMonitorPolicy> policiesToIssue = new ArrayList<>();
// 1. 添加优先级为0的默认策略
RmMonitorPolicy defaultQuery = new RmMonitorPolicy();
defaultQuery.setPriority("0");
defaultQuery.setResourceType("switch");
rmMonitorPolicyService.selectRmMonitorPolicyList(defaultQuery)
.stream()
.findFirst()
.ifPresent(policiesToIssue::add);
// 2. 添加已下发的优先级1策略
RmMonitorPolicy issuedQuery = new RmMonitorPolicy();
issuedQuery.setPriority("1");
issuedQuery.setStatus("1");
issuedQuery.setResourceType("switch");
List<RmMonitorPolicy> monitorPolicies = rmMonitorPolicyService.selectRmMonitorPolicyList(issuedQuery);
List<RmMonitorPolicy> monitorPolicyList = monitorPolicies.stream()
.sorted(Comparator.comparing(RmMonitorPolicy::getCreateTime))
.collect(Collectors.toList());
policiesToIssue.addAll(monitorPolicyList);
// 3. 统一下发所有符合条件的策略
policiesToIssue.forEach(policy ->
rmMonitorPolicyService.issueSwitchPolicy(policy.getId())
);
} catch (Exception e) {
log.error("初始化交换机采集策略失败", e);
}