diff --git a/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/controller/RmMtrPolicyConfigController.java b/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/controller/RmMtrPolicyConfigController.java index 82d804f..2812802 100644 --- a/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/controller/RmMtrPolicyConfigController.java +++ b/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/controller/RmMtrPolicyConfigController.java @@ -76,7 +76,8 @@ public class RmMtrPolicyConfigController extends BaseController @PostMapping public AjaxResult add(@RequestBody RmMtrPolicyConfig rmMtrPolicyConfig) { - return toAjax(rmMtrPolicyConfigService.insertRmMtrPolicyConfig(rmMtrPolicyConfig)); + int rows = rmMtrPolicyConfigService.insertRmMtrPolicyConfig(rmMtrPolicyConfig); + return toAjax(rows); } /** diff --git a/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/domain/InitialHeartbeatListen.java b/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/domain/InitialHeartbeatListen.java index b527d40..d22aa82 100644 --- a/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/domain/InitialHeartbeatListen.java +++ b/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/domain/InitialHeartbeatListen.java @@ -33,5 +33,7 @@ public class InitialHeartbeatListen extends BaseEntity private String version; /** 服务启动时间 */ private Long startupTime; + /** cpu核数 */ + private Integer cpucores; } diff --git a/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/domain/RmMtrClientRegistration.java b/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/domain/RmMtrClientRegistration.java index ac76d88..3e899be 100644 --- a/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/domain/RmMtrClientRegistration.java +++ b/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/domain/RmMtrClientRegistration.java @@ -91,4 +91,6 @@ public class RmMtrClientRegistration extends BaseEntity private String mtrClientIds; /** 多条件 */ private String queryName; + /** cpu核数 */ + private Integer cpucores; } diff --git a/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/handler/MessageHandler.java b/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/handler/MessageHandler.java index 3d3ac4e..19b5504 100644 --- a/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/handler/MessageHandler.java +++ b/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/handler/MessageHandler.java @@ -371,6 +371,11 @@ public class MessageHandler { } needUpdate = true; } + if(rmMtrClientRegistration.getCpucores() == null || + rmMtrClientRegistration.getCpucores() != heartbeat.getCpucores()){ + updateData.setCpucores(heartbeat.getCpucores()); + needUpdate = true; + } if(needUpdate){ rmMtrClientRegistrationService.updateRmMtrClientRegistration(updateData); } diff --git a/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/service/impl/RmMtrClientRegistrationServiceImpl.java b/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/service/impl/RmMtrClientRegistrationServiceImpl.java index c9a4add..29222af 100644 --- a/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/service/impl/RmMtrClientRegistrationServiceImpl.java +++ b/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/service/impl/RmMtrClientRegistrationServiceImpl.java @@ -65,6 +65,8 @@ public class RmMtrClientRegistrationServiceImpl implements IRmMtrClientRegistrat @Override public List selectRmMtrClientRegistrationList(RmMtrClientRegistration rmMtrClientRegistration) { + rmMtrClientRegistration.setOnlineStatus("1"); + rmMtrClientRegistration.setRegisterStatus("1"); List list = rmMtrClientRegistrationMapper.selectRmMtrClientRegistrationList(rmMtrClientRegistration); for (RmMtrClientRegistration mtrClientRegistration : list) { // 处理网卡信息 diff --git a/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/service/impl/RmMtrPolicyConfigServiceImpl.java b/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/service/impl/RmMtrPolicyConfigServiceImpl.java index 5a18bbc..cd2c5a8 100644 --- a/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/service/impl/RmMtrPolicyConfigServiceImpl.java +++ b/tongran-modules/tongran-mtragent/src/main/java/com/tongran/mtragent/service/impl/RmMtrPolicyConfigServiceImpl.java @@ -5,7 +5,9 @@ import com.tongran.common.core.domain.R; import com.tongran.common.core.utils.DateUtils; import com.tongran.common.core.utils.StringUtils; import com.tongran.common.security.utils.SecurityUtils; +import com.tongran.mtragent.domain.RmMtrClientRegistration; import com.tongran.mtragent.domain.RmMtrPolicyConfig; +import com.tongran.mtragent.mapper.RmMtrClientRegistrationMapper; import com.tongran.mtragent.mapper.RmMtrPolicyConfigMapper; import com.tongran.mtragent.service.IRmMtrPolicyConfigService; import com.tongran.system.api.RemoteRocketMqService; @@ -28,6 +30,8 @@ public class RmMtrPolicyConfigServiceImpl implements IRmMtrPolicyConfigService @Autowired private RmMtrPolicyConfigMapper rmMtrPolicyConfigMapper; @Autowired + private RmMtrClientRegistrationMapper rmMtrClientRegistrationMapper; + @Autowired private RemoteRocketMqService remoteRocketMqService; /** @@ -122,13 +126,15 @@ public class RmMtrPolicyConfigServiceImpl implements IRmMtrPolicyConfigService } /** * 新增mtr探测策略配置 - * + * * @param rmMtrPolicyConfig mtr探测策略配置 * @return 结果 */ @Override public int insertRmMtrPolicyConfig(RmMtrPolicyConfig rmMtrPolicyConfig) { + // 检查是否超出限制 + checkServerNum(rmMtrPolicyConfig); rmMtrPolicyConfig.setCreateTime(DateUtils.getNowDate()); rmMtrPolicyConfig.setUpdateTime(DateUtils.getNowDate()); rmMtrPolicyConfig.setCreateBy(SecurityUtils.getUsername()); @@ -142,19 +148,89 @@ public class RmMtrPolicyConfigServiceImpl implements IRmMtrPolicyConfigService /** * 修改mtr探测策略配置 - * + * * @param rmMtrPolicyConfig mtr探测策略配置 * @return 结果 */ @Override public int updateRmMtrPolicyConfig(RmMtrPolicyConfig rmMtrPolicyConfig) { + // 检查是否超出限制 + checkServerNum(rmMtrPolicyConfig); rmMtrPolicyConfig.setUpdateTime(DateUtils.getNowDate()); // 给ip赋值 setServerip(rmMtrPolicyConfig); return rmMtrPolicyConfigMapper.updateRmMtrPolicyConfig(rmMtrPolicyConfig); } + public void checkServerNum(RmMtrPolicyConfig rmMtrPolicyConfig){ + if (rmMtrPolicyConfig.getMtrClientId() == null) { + throw new RuntimeException("MTR客户端ID不能为空"); + } + // 获取CPU核心数 + int cpuCores = getCpuCores(rmMtrPolicyConfig.getMtrClientId()); + if(cpuCores == 0){ + // cpu核数未采集 + throw new RuntimeException("该MTRAgent的cpu核数未上报,请检查详情,待cpu核数上报后重试"); + } + Set serverSet = isPolicyCountExceeded(rmMtrPolicyConfig); + if(serverSet == null) { + return; // 没有服务器或客户端ID为空,直接返回 + } + if(serverSet.size() > cpuCores){ + // 设置错误信息,包含已下发的服务器列表 + String errorMessage = String.format("探测服务器数量超过节点并发数量限制(%d),已开启探测的服务器clientId为: %s", + cpuCores, String.join(", ", serverSet)); + throw new RuntimeException(errorMessage); + } + } + /** + * 检查策略数量是否超过CPU核心数限制 + * + * @param newPolicy 新增或修改的策略 + * @return true-超过限制,false-未超过限制 + */ + private Set isPolicyCountExceeded(RmMtrPolicyConfig newPolicy) { + + // 获取当前客户端应该执行的策略列表 + List currentPolicies = getPoliciesForMtrClient(newPolicy.getMtrClientId()); + + // 获取新策略中的服务器ID列表(去重) + List newServerIds = getServerIdsFromPolicy(newPolicy); + if (newServerIds.isEmpty()) { + return null; + } + + // 获取当前已分配的服务器ID列表(去重) + Set currentServerIds = new HashSet<>(); + for (RmMtrPolicyConfig policy : currentPolicies) { + // 如果是修改操作,需要排除当前策略本身 + if (newPolicy.getId() != null && + newPolicy.getId().equals(policy.getId())) { + continue; // 跳过当前正在修改的策略 + } + List serverIds = getServerIdsFromPolicy(policy); + currentServerIds.addAll(serverIds); + } + + // 计算新增的不重复服务器数量 + Set allServerIds = new HashSet<>(currentServerIds); + allServerIds.addAll(newServerIds); + return allServerIds; + } + /** + * 获取CPU核心数 + */ + private int getCpuCores(String mtrClientId) { + RmMtrClientRegistration query = new RmMtrClientRegistration(); + query.setMtrClientId(mtrClientId); + RmMtrClientRegistration rmMtrRegistMsg = rmMtrClientRegistrationMapper.getMsgByMtrClientId(query); + if(rmMtrRegistMsg != null && rmMtrRegistMsg.getCpucores() != null){ + return rmMtrRegistMsg.getCpucores() * 2; + } + return 0; + } + /** * 批量删除mtr探测策略配置 * diff --git a/tongran-modules/tongran-mtragent/src/main/resources/mapper/mtragent/RmMtrClientRegistrationMapper.xml b/tongran-modules/tongran-mtragent/src/main/resources/mapper/mtragent/RmMtrClientRegistrationMapper.xml index 145deb4..23b8451 100644 --- a/tongran-modules/tongran-mtragent/src/main/resources/mapper/mtragent/RmMtrClientRegistrationMapper.xml +++ b/tongran-modules/tongran-mtragent/src/main/resources/mapper/mtragent/RmMtrClientRegistrationMapper.xml @@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -29,7 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, mtr_client_id, description, version, logical_node, register_time, register_status, online_status, heartbeat_interval, heartbeat_count, method, scheduled_update_time, file_path, file_md5, last_update_result, last_update_time, network_info, create_time, update_time, create_by, update_by from rm_mtr_client_registration + select id, mtr_client_id, description, version, logical_node, register_time, register_status, online_status, cpucores, heartbeat_interval, heartbeat_count, method, scheduled_update_time, file_path, file_md5, last_update_result, last_update_time, network_info, create_time, update_time, create_by, update_by from rm_mtr_client_registration + + + delete from initial_system_other_collect_data + + + + AND client_id = #{clientId} + AND collect_type = #{collectType} + AND create_time < #{createTime} + + + and 1=0 + + + + \ No newline at end of file