优化mtr探测策略下发

This commit is contained in:
gaoyutao
2025-11-21 13:24:57 +08:00
parent 3391b949c8
commit be2d123902
6 changed files with 50 additions and 14 deletions
@@ -6,6 +6,8 @@ import com.ruoyi.common.core.web.domain.BaseEntity;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map;
/** /**
* mtr探测策略配置对象 rm_mtr_policy_config * mtr探测策略配置对象 rm_mtr_policy_config
@@ -56,4 +58,6 @@ public class RmMtrPolicyConfig extends BaseEntity
/** 探测频率(秒) */ /** 探测频率(秒) */
@Excel(name = "探测频率(秒)") @Excel(name = "探测频率(秒)")
private Long probeFrequency; private Long probeFrequency;
/** clientId和ip对应集合 */
private Map<String, List<String>> clientIdToIpsMap;
} }
@@ -5,6 +5,7 @@ import lombok.Data;
@Data @Data
public class MtrResultVo { public class MtrResultVo {
private String targetIp; // 目标IP private String targetIp; // 目标IP
private String clientId; // 目标IP
private Long policyId; // 策略ID private Long policyId; // 策略ID
private double firstLossPercent; // 第一次探测丢包率 private double firstLossPercent; // 第一次探测丢包率
private double finalLossPercent; // 最终丢包率 private double finalLossPercent; // 最终丢包率
@@ -98,19 +98,9 @@ public class MessageHandler {
Date createTime = new Date(millis / 1000 * 1000); // 去除毫秒 Date createTime = new Date(millis / 1000 * 1000); // 去除毫秒
RmMtrProbeResult rmMtrProbeResult = new RmMtrProbeResult(); RmMtrProbeResult rmMtrProbeResult = new RmMtrProbeResult();
rmMtrProbeResult.setCreateTime(createTime); rmMtrProbeResult.setCreateTime(createTime);
// 拿到ip rmMtrProbeResult.setClientId(mtrResultVo.getClientId());
String ip = mtrResultVo.getTargetIp();
// 查询clientId
RmNetworkInterface networkInfo = new RmNetworkInterface();
networkInfo.setPublicIp(ip);
networkInfo.setNewFlag(1);
List<RmNetworkInterface> rmNetworkInterfaceList = rmNetworkInterfaceService.selectRmNetworkInterfaceList(networkInfo);
if(rmNetworkInterfaceList != null && !rmNetworkInterfaceList.isEmpty()){
RmNetworkInterface rmNetworkInterface = rmNetworkInterfaceList.get(0);
rmMtrProbeResult.setClientId(rmNetworkInterface.getClientId());
}
rmMtrProbeResult.setMtrClientId(mtrClientId); rmMtrProbeResult.setMtrClientId(mtrClientId);
rmMtrProbeResult.setPublicIp(ip); rmMtrProbeResult.setPublicIp(mtrResultVo.getTargetIp());
rmMtrProbeResult.setPacketLossRate(new BigDecimal(mtrResultVo.getFinalLossPercent())); rmMtrProbeResult.setPacketLossRate(new BigDecimal(mtrResultVo.getFinalLossPercent()));
rmMtrProbeResultList.add(rmMtrProbeResult); rmMtrProbeResultList.add(rmMtrProbeResult);
}else{ }else{
@@ -3,6 +3,7 @@ package com.ruoyi.mtragent.service.impl;
import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.mtragent.domain.RmMtrPolicyConfig; import com.ruoyi.mtragent.domain.RmMtrPolicyConfig;
import com.ruoyi.mtragent.mapper.RmMtrPolicyConfigMapper; import com.ruoyi.mtragent.mapper.RmMtrPolicyConfigMapper;
@@ -80,7 +81,45 @@ public class RmMtrPolicyConfigServiceImpl implements IRmMtrPolicyConfigService
} }
} }
} }
/**
* 辅助方法,给ip集合一一对应赋值
* @param mtrPolicyConfig
*/
public void setServeripToClientId(RmMtrPolicyConfig mtrPolicyConfig){
String serverGroupStr = mtrPolicyConfig.getServerGroup();
if(serverGroupStr == null){
return;
}
// 使用Set自动去重
Set<String> allIpsSet = new HashSet<>();
String[] clientIds = serverGroupStr.split("\n");
Map<String, List<String>> clientIdToIpsMap = new HashMap<>();
for (String clientId : clientIds) {
RmNetworkInterfaceRemote query = new RmNetworkInterfaceRemote();
query.setClientIds(clientId);
R<List<RmNetworkInterfaceRemote>> networkList = remoteRocketMqService.getNetworkInterfaceList(query, SecurityConstants.INNER);
if(networkList != null && networkList.getData() != null){
List<RmNetworkInterfaceRemote> rmNetworkInterfaceRemoteList = networkList.getData();
if(!rmNetworkInterfaceRemoteList.isEmpty()){
for (RmNetworkInterfaceRemote rmNetworkInterfaceRemote : rmNetworkInterfaceRemoteList) {
List<String> ips = networkList.getData().stream()
.map(RmNetworkInterfaceRemote::getPublicIp)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
if (!ips.isEmpty()) {
clientIdToIpsMap.put(clientId, ips);
allIpsSet.addAll(ips); // 自动去重
}
clientIdToIpsMap.put(clientId, ips);
}
// 将Set转换为分号分隔的字符串
String allIps = String.join(";", allIpsSet);
mtrPolicyConfig.setServeripGroup(allIps);
mtrPolicyConfig.setClientIdToIpsMap(clientIdToIpsMap);
}
}
}
}
/** /**
* 新增mtr探测策略配置 * 新增mtr探测策略配置
* *
@@ -218,7 +257,7 @@ public class RmMtrPolicyConfigServiceImpl implements IRmMtrPolicyConfigService
// 创建策略副本返回 // 创建策略副本返回
for (Map.Entry<RmMtrPolicyConfig, List<String>> entry : policyServersMap.entrySet()) { for (Map.Entry<RmMtrPolicyConfig, List<String>> entry : policyServersMap.entrySet()) {
RmMtrPolicyConfig newPolicy = createPolicyCopy(entry.getKey(), entry.getValue()); RmMtrPolicyConfig newPolicy = createPolicyCopy(entry.getKey(), entry.getValue());
setServerip(newPolicy); setServeripToClientId(newPolicy);
result.add(newPolicy); result.add(newPolicy);
} }
@@ -23,6 +23,7 @@ spring:
server-addr: 172.16.15.52:8848 server-addr: 172.16.15.52:8848
# 配置中心地址 # 配置中心地址
# server-addr: 172.16.15.103:8848 # server-addr: 172.16.15.103:8848
# namespace: public
namespace: saas-local namespace: saas-local
username: nacos username: nacos
password: nacos password: nacos
@@ -24,6 +24,7 @@ spring:
server-addr: 172.16.15.52:8848 server-addr: 172.16.15.52:8848
# server-addr: 172.16.15.103:8848 # server-addr: 172.16.15.103:8848
namespace: saas-local namespace: saas-local
# namespace: public
username: nacos username: nacos
password: nacos password: nacos
# 配置文件格式 # 配置文件格式