From 543b51ca6f05726846296cb38ff1deef2b87a192 Mon Sep 17 00:00:00 2001 From: gaoyutao Date: Wed, 24 Sep 2025 17:40:53 +0800 Subject: [PATCH] =?UTF-8?q?agent=E6=8E=A5=E6=94=B6=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E8=B0=83=E6=95=B4=E5=8C=B9=E9=85=8D=EF=BC=8C?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=B5=84=E6=BA=90=E6=A8=A1=E6=9D=BF=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E3=80=81=E8=B5=84=E6=BA=90=E7=9B=91=E6=8E=A7=E7=AD=96?= =?UTF-8?q?=E7=95=A5=E9=80=BB=E8=BE=91=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/RemoteRevenueConfigService.java | 8 + .../RemoteRevenueConfigFallbackFactory.java | 5 + .../controller/ResourceMonitorController.java | 18 +- .../RmResourceRegistrationController.java | 11 +- .../system/mapper/RmResourceGroupMapper.java | 4 + .../service/IRmResourceGroupService.java | 3 +- .../impl/RmResourceGroupServiceImpl.java | 58 +++- .../mapper/system/RmResourceGroupMapper.xml | 10 + .../controller/RmMonitorPolicyController.java | 17 +- .../RmMonitorTemplateController.java | 15 +- .../handler/DeviceMessageHandler.java | 38 ++- .../mapper/RmMonitorTemplateMapper.java | 6 +- .../mapper/RmTemplateLinuxMapper.java | 2 + .../mapper/RmTemplateSwitchMapper.java | 2 + .../service/IRmMonitorTemplateService.java | 5 +- .../impl/RmMonitorPolicyServiceImpl.java | 49 +++- .../impl/RmMonitorTemplateServiceImpl.java | 257 +++++++++++++----- .../rocketmq/RmMonitorTemplateMapper.xml | 4 + .../mapper/rocketmq/RmTemplateLinuxMapper.xml | 4 + .../rocketmq/RmTemplateSwitchMapper.xml | 4 + 20 files changed, 419 insertions(+), 101 deletions(-) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteRevenueConfigService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteRevenueConfigService.java index 0a9e7f3..ae51a58 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteRevenueConfigService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteRevenueConfigService.java @@ -80,5 +80,13 @@ public interface RemoteRevenueConfigService */ @PostMapping("/registration/list") public R getRegistrationList(@RequestBody RmResourceRegistrationRemote rmResourceRegistrationRemote, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + /** + * 根据硬件SN查询资源信息 + * @param rmResourceRegistrationRemote + * @param source + * @return + */ + @PostMapping("/registration/getListByHardwareSn") + public R getListByHardwareSn(@RequestBody RmResourceRegistrationRemote rmResourceRegistrationRemote, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteRevenueConfigFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteRevenueConfigFallbackFactory.java index af0f888..5d97f7e 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteRevenueConfigFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteRevenueConfigFallbackFactory.java @@ -61,6 +61,11 @@ public class RemoteRevenueConfigFallbackFactory implements FallbackFactory getRegistrationList(RmResourceRegistrationRemote rmResourceRegistrationRemote, String source) { return R.fail("获取资源注册列表信息失败" + throwable.getMessage()); } + + @Override + public R getListByHardwareSn(RmResourceRegistrationRemote rmResourceRegistrationRemote, String source) { + return R.fail("根据SN获取资源注册列表信息失败" + throwable.getMessage()); + } }; } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/ResourceMonitorController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/ResourceMonitorController.java index aa4f23a..265cc4a 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/ResourceMonitorController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/ResourceMonitorController.java @@ -1,8 +1,8 @@ package com.ruoyi.system.controller; +import com.github.pagehelper.PageInfo; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.AjaxResult; -import com.ruoyi.common.core.web.page.PageDomain; import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.system.domain.RmResourceGroup; import com.ruoyi.system.domain.RmResourceRegistration; @@ -12,8 +12,6 @@ import com.ruoyi.system.service.IRmResourceRegistrationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.List; - /** * 资源监控API * @@ -35,7 +33,7 @@ public class ResourceMonitorController extends BaseController * 获取资源分组列表 * @return */ - @GetMapping("resourceGroupList") + @GetMapping("/resourceGroupList") public AjaxResult resourceGroupList(){ RmResourceGroup rmResourceGroup = new RmResourceGroup(); return success(rmResourceGroupService.selectRmResourceGroupList(rmResourceGroup)); @@ -45,7 +43,7 @@ public class ResourceMonitorController extends BaseController * 服务器整体发送带宽利用率 * @return */ - @GetMapping("trafficRateByServer") + @GetMapping("/trafficRateByServer") public AjaxResult trafficRateByServer(){ return success(epsInitialTrafficDataService.trafficRateByServer()); } @@ -54,14 +52,10 @@ public class ResourceMonitorController extends BaseController * 获取资源列表 * @return */ - @PostMapping("getRegisterListByGroupId") + @PostMapping("/getRegisterListByGroupId") public TableDataInfo getRegisterListByGroupId(@RequestBody RmResourceGroup rmResourceGroup){ // 拿到注册信息 - PageDomain pageDomain = new PageDomain(); - pageDomain.setPageNum(rmResourceGroup.getPageNum()); - pageDomain.setPageSize(rmResourceGroup.getPageSize()); - startPage(pageDomain); - List list = rmResourceGroupService.getRegisterList(rmResourceGroup); - return getDataTable(list); + PageInfo pageInfo = rmResourceGroupService.getRegisterList(rmResourceGroup); + return getDataTable(pageInfo.getList(), pageInfo.getTotal()); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/RmResourceRegistrationController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/RmResourceRegistrationController.java index a1a33da..40d1246 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/RmResourceRegistrationController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/RmResourceRegistrationController.java @@ -155,6 +155,15 @@ public class RmResourceRegistrationController extends BaseController List list = rmResourceRegistrationService.getRegistrationByIds(ids); return R.ok(list); } - + /** + * 查询资源注册列表 + */ + @InnerAuth + @PostMapping("/getListByHardwareSn") + public R getListByHardwareSn(@RequestBody RmResourceRegistration rmResourceRegistration) + { + List list = rmResourceRegistrationService.selectRmResourceRegistrationList(rmResourceRegistration); + return R.ok(list.get(0)); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RmResourceGroupMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RmResourceGroupMapper.java index d4dfbea..8236912 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RmResourceGroupMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RmResourceGroupMapper.java @@ -68,4 +68,8 @@ public interface RmResourceGroupMapper public RmResourceGroup selectMonitorMsgAndGroupMsg(Long id); int exitsResourceById(RmResourceGroup rmResourceGroup); + + int updateRmPolicyStatus(Long resourceGroupId); + + int updateScriptPolicyStatus(Long resourceGroupId); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IRmResourceGroupService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IRmResourceGroupService.java index 67d93af..e35f5a6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IRmResourceGroupService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IRmResourceGroupService.java @@ -1,5 +1,6 @@ package com.ruoyi.system.service; +import com.github.pagehelper.PageInfo; import com.ruoyi.system.domain.RmResourceGroup; import com.ruoyi.system.domain.RmResourceRegistration; @@ -61,7 +62,7 @@ public interface IRmResourceGroupService */ public int deleteRmResourceGroupById(Long id); - List getRegisterList(RmResourceGroup rmResourceGroup); + PageInfo getRegisterList(RmResourceGroup rmResourceGroup); String exitsResourceById(RmResourceGroup rmResourceGroup); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RmResourceGroupServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RmResourceGroupServiceImpl.java index 8aa9cf0..b7f31ae 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RmResourceGroupServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RmResourceGroupServiceImpl.java @@ -1,6 +1,8 @@ package com.ruoyi.system.service.impl; +import com.github.pagehelper.PageInfo; import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.web.page.PageDomain; import com.ruoyi.system.domain.RmResourceGroup; import com.ruoyi.system.domain.RmResourceRegistration; import com.ruoyi.system.mapper.RmResourceGroupMapper; @@ -11,6 +13,8 @@ import org.springframework.stereotype.Service; import java.util.List; +import static com.ruoyi.common.core.utils.PageUtils.startPage; + /** * 资源分组Service业务层处理 * @@ -72,9 +76,22 @@ public class RmResourceGroupServiceImpl implements IRmResourceGroupService public int updateRmResourceGroup(RmResourceGroup rmResourceGroup) { rmResourceGroup.setUpdateTime(DateUtils.getNowDate()); - return rmResourceGroupMapper.updateRmResourceGroup(rmResourceGroup); + rmResourceGroupMapper.updateRmResourceGroup(rmResourceGroup); + // 资源组修改,相关策略状态改为待下发 + updatePolicyStatus(rmResourceGroup.getId()); + return 1; } + /** + * 相关策略状态改为待下发 + * @param resourceGroupId + */ + public void updatePolicyStatus(Long resourceGroupId){ + // 资源监控策略状态修改 + rmResourceGroupMapper.updateRmPolicyStatus(resourceGroupId); + // 脚本策略状态修改 + rmResourceGroupMapper.updateScriptPolicyStatus(resourceGroupId); + } /** * 批量删除资源分组 * @@ -99,29 +116,54 @@ public class RmResourceGroupServiceImpl implements IRmResourceGroupService return rmResourceGroupMapper.deleteRmResourceGroupById(id); } + /** + * 根据资源分组获取资源列表 + * @param rmResourceGroup + * @return + */ @Override - public List getRegisterList(RmResourceGroup rmResourceGroup) { + public PageInfo getRegisterList(RmResourceGroup rmResourceGroup) { + // 配置分页参数 + PageDomain pageDomain = new PageDomain(); + pageDomain.setPageNum(rmResourceGroup.getPageNum()); + pageDomain.setPageSize(rmResourceGroup.getPageSize()); if(rmResourceGroup.getId() == null){ RmResourceRegistration queryParam = new RmResourceRegistration(); + // 开启分页 + startPage(pageDomain); List rmResourceRegistrationList = rmResourceRegistrationMapper.selectRmResourceRegistrationList(queryParam); + // 监控项赋值-暂时不需要 for (RmResourceRegistration rmResourceRegistration : rmResourceRegistrationList) { RmResourceGroup item = rmResourceGroupMapper.selectMonitorMsgAndGroupMsg(rmResourceRegistration.getId()); - rmResourceRegistration.setMonitorItems(item.getMonitorItems()); - rmResourceRegistration.setDiscoveryRules(item.getDiscoveryRules()); + if(item != null){ + rmResourceRegistration.setMonitorItems(item.getMonitorItems()); + rmResourceRegistration.setDiscoveryRules(item.getDiscoveryRules()); + }else{ + rmResourceRegistration.setMonitorItems("0"); + rmResourceRegistration.setDiscoveryRules("0"); + } } - return rmResourceRegistrationList; + return new PageInfo<>(rmResourceRegistrationList); }else{ RmResourceGroup group = rmResourceGroupMapper.selectRmResourceGroupById(rmResourceGroup.getId()); String ids = group.getIncludedDevicesId(); String[] resourceIds = ids.split(","); + // 开启分页 + startPage(pageDomain); // 拿到资源信息 List rmResourceRegistrationList = rmResourceRegistrationMapper.getRegistrationByIds(resourceIds); + // 监控项赋值-暂时不需要 for (RmResourceRegistration rmResourceRegistration : rmResourceRegistrationList) { RmResourceGroup item = rmResourceGroupMapper.selectMonitorMsgAndGroupMsg(rmResourceRegistration.getId()); - rmResourceRegistration.setMonitorItems(item.getMonitorItems()); - rmResourceRegistration.setDiscoveryRules(item.getDiscoveryRules()); + if(item != null){ + rmResourceRegistration.setMonitorItems(item.getMonitorItems()); + rmResourceRegistration.setDiscoveryRules(item.getDiscoveryRules()); + }else{ + rmResourceRegistration.setMonitorItems("0"); + rmResourceRegistration.setDiscoveryRules("0"); + } } - return rmResourceRegistrationList; + return new PageInfo<>(rmResourceRegistrationList); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/RmResourceGroupMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/RmResourceGroupMapper.xml index b6f6f7c..c22ee3b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/RmResourceGroupMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/RmResourceGroupMapper.xml @@ -100,10 +100,20 @@ + + + update rm_monitor_policy set status = '0' + where resource_group_id = #{resourceGroupId} + + + update rm_deployment_policy set policy_status = '0' + where resource_group_id = #{resourceGroupId} + \ No newline at end of file diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/RmMonitorPolicyController.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/RmMonitorPolicyController.java index a4db348..0a0c7ce 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/RmMonitorPolicyController.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/RmMonitorPolicyController.java @@ -3,6 +3,7 @@ package com.ruoyi.rocketmq.controller; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.PageDomain; import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; @@ -32,10 +33,13 @@ public class RmMonitorPolicyController extends BaseController * 查询资源监控策略列表 */ @RequiresPermissions("rocketmq:policy:list") - @GetMapping("/list") - public TableDataInfo list(RmMonitorPolicy rmMonitorPolicy) + @PostMapping("/list") + public TableDataInfo list(@RequestBody RmMonitorPolicy rmMonitorPolicy) { - startPage(); + PageDomain pageDomain = new PageDomain(); + pageDomain.setPageNum(rmMonitorPolicy.getPageNum()); + pageDomain.setPageSize(rmMonitorPolicy.getPageSize()); + startPage(pageDomain); List list = rmMonitorPolicyService.selectRmMonitorPolicyList(rmMonitorPolicy); return getDataTable(list); } @@ -71,7 +75,12 @@ public class RmMonitorPolicyController extends BaseController @PostMapping public AjaxResult add(@RequestBody RmMonitorPolicy rmMonitorPolicy) { - return toAjax(rmMonitorPolicyService.addRmMonitorPolicy(rmMonitorPolicy)); + int rows = rmMonitorPolicyService.addRmMonitorPolicy(rmMonitorPolicy); + if(rows>0){ + return toAjax(rows); + }else{ + return AjaxResult.error("资源监控策略新增失败,该资源组已绑定其他策略"); + } } /** diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/RmMonitorTemplateController.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/RmMonitorTemplateController.java index 4f68682..9d01a7d 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/RmMonitorTemplateController.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/RmMonitorTemplateController.java @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; /** * 监控模板Controller @@ -85,9 +86,9 @@ public class RmMonitorTemplateController extends BaseController @RequiresPermissions("rocketmq:template:edit") @Log(title = "监控模板", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody RmMonitorTemplate rmMonitorTemplate) + public AjaxResult edit(@RequestBody RmMonitorTemplateVo rmMonitorTemplateVo) { - return toAjax(rmMonitorTemplateService.updateRmMonitorTemplate(rmMonitorTemplate)); + return toAjax(rmMonitorTemplateService.updateRmMonitorTemplate(rmMonitorTemplateVo)); } /** @@ -100,4 +101,14 @@ public class RmMonitorTemplateController extends BaseController { return toAjax(rmMonitorTemplateService.deleteRmMonitorTemplateByIds(ids)); } + /** + * 关联监控模板查询 + */ + @RequiresPermissions("rocketmq:template:list") + @GetMapping("/getAllTemplate") + public AjaxResult getAllTemplate() + { + List list = rmMonitorTemplateService.getAllTemplate(); + return success(list); + } } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/handler/DeviceMessageHandler.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/handler/DeviceMessageHandler.java index ff7d4b0..3c72eb8 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/handler/DeviceMessageHandler.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/handler/DeviceMessageHandler.java @@ -1,5 +1,6 @@ package com.ruoyi.rocketmq.handler; +import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.core.constant.SecurityConstants; @@ -85,6 +86,8 @@ public class DeviceMessageHandler { private IInitialSwitchOtherCollectDataService insertInitialSwitchOtherInfo; @Autowired private IInitialSystemOtherCollectDataService iInitialSystemOtherCollectDataService; + @Autowired + private IRmResourceRemoteService rmResourceRemoteService; // 在类中添加 private static final ObjectMapper objectMapper = new ObjectMapper(); @@ -102,7 +105,7 @@ public class DeviceMessageHandler { registerHandler(MsgEnum.开启交换机采集应答.getValue(), this::handleResponseMessage); registerHandler(MsgEnum.关闭交换机采集应答.getValue(), this::handleResponseMessage); registerHandler(MsgEnum.告警设置应答.getValue(), this::handleResponseMessage); - registerHandler(MsgEnum.执行脚本策略应答.getValue(), this::handleResponseMessage); + registerHandler(MsgEnum.执行脚本策略应答.getValue(), this::handleScriptRspMessage); registerHandler(MsgEnum.Agent版本更新应答.getValue(), this::handleResponseMessage); // 其他类型消息可以单独注册处理器 @@ -798,14 +801,39 @@ public class DeviceMessageHandler { * 脚本策略应答信息 * @param message */ - private RspVo handleScriptRspMessage(DeviceMessage message) { + private void handleScriptRspMessage(DeviceMessage message) { List rspVoList = JsonDataParser.parseJsonData(message.getData(), RspVo.class); if (!rspVoList.isEmpty()) { RspVo rsp = rspVoList.get(0); - log.info("应答信息:{}",rsp); - return rsp; + // 时间戳转换 + long timestamp = rsp.getTimestamp(); + long millis = timestamp * 1000; + Date createTime = new Date(millis / 1000 * 1000); // 去除毫秒 + // 查询资源信息 + RmResourceRegistrationRemote queryParam = new RmResourceRegistrationRemote(); + queryParam.setHardwareSn(message.getClientId()); + R resourceMsg = remoteRevenueConfigService.getListByHardwareSn(queryParam, SecurityConstants.INNER); + RmResourceRegistrationRemote resourceMsgData = resourceMsg.getData(); + if(rsp.getResCode() == 1){ + if(rsp.getResult() != null){ + // 构建脚本执行结果实体类 + RmResourceRemote insertData = new RmResourceRemote(); + insertData.setHardwareSn(message.getClientId()); + insertData.setResourceName(resourceMsgData.getResourceName()); + insertData.setExternalIp(resourceMsgData.getIpAddress()); + insertData.setManagementPort(22); + insertData.setConnectionMethod("1"); + insertData.setResourceType(resourceMsgData.getResourceType()); + insertData.setDescription(rsp.getResult()); + insertData.setCreateTime(createTime); + // 执行插入sql + rmResourceRemoteService.insertRmResourceRemote(insertData); + log.info("脚本执行结果入库成功:{}",rsp); + } + }else{ + log.error("脚本执行失败:{}", rsp); + } } - return null; } /** * 注册应答处理 diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/RmMonitorTemplateMapper.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/RmMonitorTemplateMapper.java index 5ff8c93..92a862a 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/RmMonitorTemplateMapper.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/RmMonitorTemplateMapper.java @@ -1,8 +1,10 @@ package com.ruoyi.rocketmq.mapper; -import java.util.List; import com.ruoyi.rocketmq.domain.RmMonitorTemplate; +import java.util.List; +import java.util.Map; + /** * 监控模板Mapper接口 * @@ -58,4 +60,6 @@ public interface RmMonitorTemplateMapper * @return 结果 */ public int deleteRmMonitorTemplateByIds(Long[] ids); + + List getAllTemplate(); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/RmTemplateLinuxMapper.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/RmTemplateLinuxMapper.java index e3c7283..1cbf4f5 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/RmTemplateLinuxMapper.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/RmTemplateLinuxMapper.java @@ -62,4 +62,6 @@ public interface RmTemplateLinuxMapper public int deleteRmTemplateLinuxByIds(Long[] ids); void batchInsertRmTemplateLinux(@Param("list") List linuxItems); + + int deleteByTemplateId(Long templateId); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/RmTemplateSwitchMapper.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/RmTemplateSwitchMapper.java index 3f1ffdf..ec43e62 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/RmTemplateSwitchMapper.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/RmTemplateSwitchMapper.java @@ -66,4 +66,6 @@ public interface RmTemplateSwitchMapper * @param switchItems */ void batchInsertRmTemplateSwitch(@Param("list") List switchItems); + + int deleteByTemplateId(Long templateId); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IRmMonitorTemplateService.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IRmMonitorTemplateService.java index f7dc147..1451a7c 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IRmMonitorTemplateService.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IRmMonitorTemplateService.java @@ -41,10 +41,10 @@ public interface IRmMonitorTemplateService /** * 修改监控模板 * - * @param rmMonitorTemplate 监控模板 + * @param rmMonitorTemplateVo 监控模板 * @return 结果 */ - public int updateRmMonitorTemplate(RmMonitorTemplate rmMonitorTemplate); + public int updateRmMonitorTemplate(RmMonitorTemplateVo rmMonitorTemplateVo); /** * 批量删除监控模板 @@ -76,4 +76,5 @@ public interface IRmMonitorTemplateService */ Map getTemplateMsgById(Long id); + List getAllTemplate(); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorPolicyServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorPolicyServiceImpl.java index dd4e7c4..de18324 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorPolicyServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorPolicyServiceImpl.java @@ -103,8 +103,46 @@ public class RmMonitorPolicyServiceImpl implements IRmMonitorPolicyService @Override public int updateRmMonitorPolicy(RmMonitorPolicy rmMonitorPolicy) { + // 绑定资源组之前判断该资源组是否已经绑定其他模板 + Long resourceGroupId = rmMonitorPolicy.getResourceGroupId(); + // 查询资源组是否已绑定 + RmMonitorPolicy queryParam = new RmMonitorPolicy(); + queryParam.setResourceGroupId(resourceGroupId); + List exits = rmMonitorPolicyMapper.selectRmMonitorPolicyList(queryParam); + if(!exits.isEmpty()){ + return -1; + } rmMonitorPolicy.setUpdateTime(DateUtils.getNowDate()); - return rmMonitorPolicyMapper.updateRmMonitorPolicy(rmMonitorPolicy); + rmMonitorPolicyMapper.updateRmMonitorPolicy(rmMonitorPolicy); + // 模板绑定资源组信息 + RmMonitorTemplate rmMonitorTemplate = new RmMonitorTemplate(); + rmMonitorTemplate.setId(rmMonitorPolicy.getTemplateId()); + rmMonitorTemplate.setResourceGroupId(rmMonitorPolicy.getResourceGroupId()); + rmMonitorTemplateMapper.updateRmMonitorTemplate(rmMonitorTemplate); + // 拿到采集周期 + List collectionAndIdList = rmMonitorPolicy.getCollectionAndIdList(); + if(!collectionAndIdList.isEmpty()){ + if("linux".equals(rmMonitorPolicy.getResourceType())){ + for (RmMonitorPolicyVo rmMonitorPolicyVo : collectionAndIdList) { + // 添加采集周期 + RmTemplateLinux rmTemplateLinux = new RmTemplateLinux(); + rmTemplateLinux.setId(rmMonitorPolicyVo.getId()); + rmTemplateLinux.setCollectionCycle(rmMonitorPolicyVo.getCollectionCycle()); + rmTemplateLinuxMapper.updateRmTemplateLinux(rmTemplateLinux); + } + }else if("switch".equals(rmMonitorPolicy.getResourceType())){ + for (RmMonitorPolicyVo rmMonitorPolicyVo : collectionAndIdList) { + // 添加采集周期 + RmTemplateSwitch rmTemplateSwitch = new RmTemplateSwitch(); + rmTemplateSwitch.setId(rmMonitorPolicyVo.getId()); + rmTemplateSwitch.setCollectionCycle(rmMonitorPolicyVo.getCollectionCycle()); + rmTemplateSwitchMapper.updateRmTemplateSwitch(rmTemplateSwitch); + } + }else { + return 0; + } + } + return 1; } /** @@ -133,6 +171,15 @@ public class RmMonitorPolicyServiceImpl implements IRmMonitorPolicyService @Override public int addRmMonitorPolicy(RmMonitorPolicy rmMonitorPolicy) { + // 绑定资源组之前判断该资源组是否已经绑定其他模板 + Long resourceGroupId = rmMonitorPolicy.getResourceGroupId(); + // 查询资源组是否已绑定 + RmMonitorPolicy queryParam = new RmMonitorPolicy(); + queryParam.setResourceGroupId(resourceGroupId); + List exits = rmMonitorPolicyMapper.selectRmMonitorPolicyList(queryParam); + if(!exits.isEmpty()){ + return -1; + } rmMonitorPolicyMapper.insertRmMonitorPolicy(rmMonitorPolicy); // 模板绑定资源组信息 RmMonitorTemplate rmMonitorTemplate = new RmMonitorTemplate(); diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorTemplateServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorTemplateServiceImpl.java index 18bc238..2a8cb06 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorTemplateServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/RmMonitorTemplateServiceImpl.java @@ -17,9 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** * 监控模板Service业务层处理 @@ -80,16 +78,36 @@ public class RmMonitorTemplateServiceImpl implements IRmMonitorTemplateService /** * 修改监控模板 * - * @param rmMonitorTemplate 监控模板 + * @param rmMonitorTemplateVo 监控模板 * @return 结果 */ @Override - public int updateRmMonitorTemplate(RmMonitorTemplate rmMonitorTemplate) + public int updateRmMonitorTemplate(RmMonitorTemplateVo rmMonitorTemplateVo) { + RmMonitorTemplate rmMonitorTemplate = new RmMonitorTemplate(); + BeanUtils.copyProperties(rmMonitorTemplateVo, rmMonitorTemplate); rmMonitorTemplate.setUpdateTime(DateUtils.getNowDate()); - return rmMonitorTemplateMapper.updateRmMonitorTemplate(rmMonitorTemplate); - } + rmMonitorTemplateMapper.updateRmMonitorTemplate(rmMonitorTemplate); + Long templateId = rmMonitorTemplate.getId(); + // 检查监控项是否有变动 + boolean hasMonitorChanges = checkMonitorChanges(rmMonitorTemplateVo, templateId); + if (!hasMonitorChanges) { + // 如果没有变动,直接返回 + return 1; + } + // 先删除旧的监控项 + deleteExistingMonitorItems(templateId, rmMonitorTemplateVo.getResourceType()); + // linux系统信息 + if ("linux".equals(rmMonitorTemplateVo.getResourceType())) { + processLinuxItems(rmMonitorTemplateVo, templateId); + } + // 华为交换机信息 + else if ("switch".equals(rmMonitorTemplateVo.getResourceType())) { + processSwitchItems(rmMonitorTemplateVo, templateId); + } + return 1; + } /** * 批量删除监控模板 * @@ -123,65 +141,12 @@ public class RmMonitorTemplateServiceImpl implements IRmMonitorTemplateService Long templateId = rmMonitorTemplate.getId(); // linux系统信息 - if("linux".equals(rmMonitorTemplateVo.getResourceType())){ - // 根据监控信息id查询详细信息 - List monitorItems = rmInitialMonitorItemMapper.selectRmInitialMonitorItemByIds(rmMonitorTemplateVo.getMonitorIds()); - // 批量准备插入数据 - List linuxItems = monitorItems.stream() - .map(item -> { - RmTemplateLinux linuxItem = new RmTemplateLinux(); - linuxItem.setTemplateId(templateId); - linuxItem.setMetricKey(item.getMetricKey()); - linuxItem.setMetricName(item.getMetricName()); - linuxItem.setDataType(item.getDataType()); - linuxItem.setItemType(item.getItemType()); - return linuxItem; - }) - .collect(Collectors.toList()); - // 批量插入 - if(!linuxItems.isEmpty()) { - rmTemplateLinuxMapper.batchInsertRmTemplateLinux(linuxItems); - int monitorCount = (int) linuxItems.stream().filter(r -> "monitorItem".equals(r.getItemType())).count(); - int autoDiscoverCount = (int) linuxItems.stream().filter(r -> "autoDiscoverItem".equals(r.getItemType())).count(); - RmMonitorTemplate monitorTemplate = new RmMonitorTemplate(); - monitorTemplate.setId(templateId); - monitorTemplate.setMonitorItems(monitorCount + ""); - monitorTemplate.setDiscoveryRules(autoDiscoverCount + ""); - monitorTemplate.setResourcyType("linux"); - rmMonitorTemplateMapper.updateRmMonitorTemplate(monitorTemplate); - } + if ("linux".equals(rmMonitorTemplateVo.getResourceType())) { + processLinuxItems(rmMonitorTemplateVo, templateId); } // 华为交换机信息 - if("switch".equals(rmMonitorTemplateVo.getResourceType())){ - // 根据监控信息id查询详细信息 - List monitorItems = rmInitialMonitorItemMapper.selectRmInitialMonitorItemByIds(rmMonitorTemplateVo.getMonitorIds()); - // 批量准备插入数据 - List switchItems = monitorItems.stream() - .map(item -> { - RmTemplateSwitch switchItem = new RmTemplateSwitch(); - switchItem.setTemplateId(templateId); - switchItem.setMetricKey(item.getMetricKey()); - switchItem.setMetricName(item.getMetricName()); - switchItem.setOid(item.getOid()); - switchItem.setFilterValue(item.getFilterValue()); - switchItem.setSwitchDescription(item.getMonitorDescription()); - switchItem.setDataType(item.getDataType()); - switchItem.setItemType(item.getItemType()); - return switchItem; - }) - .collect(Collectors.toList()); - // 批量插入 - if(!switchItems.isEmpty()) { - rmTemplateSwitchMapper.batchInsertRmTemplateSwitch(switchItems); - int monitorCount = (int) switchItems.stream().filter(r -> "monitorItem".equals(r.getItemType())).count(); - int autoDiscoverCount = (int) switchItems.stream().filter(r -> "autoDiscoverItem".equals(r.getItemType())).count(); - RmMonitorTemplate monitorTemplate = new RmMonitorTemplate(); - monitorTemplate.setId(templateId); - monitorTemplate.setMonitorItems(monitorCount + ""); - monitorTemplate.setDiscoveryRules(autoDiscoverCount + ""); - monitorTemplate.setResourcyType("switch"); - rmMonitorTemplateMapper.updateRmMonitorTemplate(monitorTemplate); - } + else if ("switch".equals(rmMonitorTemplateVo.getResourceType())) { + processSwitchItems(rmMonitorTemplateVo, templateId); } return 1; } @@ -211,4 +176,168 @@ public class RmMonitorTemplateServiceImpl implements IRmMonitorTemplateService return result; } + @Override + public List getAllTemplate() { + return rmMonitorTemplateMapper.getAllTemplate(); + } + + /** + * 删除现有的监控项 + */ + private void deleteExistingMonitorItems(Long templateId, String resourceType) { + if ("linux".equals(resourceType)) { + rmTemplateLinuxMapper.deleteByTemplateId(templateId); + } else if ("switch".equals(resourceType)) { + rmTemplateSwitchMapper.deleteByTemplateId(templateId); + } + } + /** + * 检查监控项是否有变动 + */ + private boolean checkMonitorChanges(RmMonitorTemplateVo rmMonitorTemplateVo, Long templateId) { + if (rmMonitorTemplateVo.getMonitorIds() == null || rmMonitorTemplateVo.getMonitorIds().length == 0) { + return hasExistingMonitorItems(templateId, rmMonitorTemplateVo.getResourceType()); + } + // 获取现有的监控项ID + List existingMonitorIds = new ArrayList<>(); + if ("linux".equals(rmMonitorTemplateVo.getResourceType())) { + RmTemplateLinux queryParam = new RmTemplateLinux(); + queryParam.setTemplateId(templateId); + List existingItems = rmTemplateLinuxMapper.selectRmTemplateLinuxList(queryParam); + for (RmTemplateLinux existingItem : existingItems) { + Long id = existingItem.getId(); + existingMonitorIds.add(id); + } + // 这里需要根据实际情况获取监控项ID,可能需要关联查询 + } else if ("switch".equals(rmMonitorTemplateVo.getResourceType())) { + RmTemplateSwitch queryParam = new RmTemplateSwitch(); + queryParam.setTemplateId(templateId); + List existingItems = rmTemplateSwitchMapper.selectRmTemplateSwitchList(queryParam); + List idList = new ArrayList<>(); + for (RmTemplateSwitch existingItem : existingItems) { + Long id = existingItem.getId(); + existingMonitorIds.add(id); + } + } + Long[] nowIds = rmMonitorTemplateVo.getMonitorIds(); + if(isEqualIgnoreOrder(existingMonitorIds, nowIds)){ + return false; + } + // 简化处理:只要有监控项就认为有变动 + return true; + } + /** + * 检查是否存在现有的监控项 + */ + private boolean hasExistingMonitorItems(Long templateId, String resourceType) { + int count = 0; + if ("linux".equals(resourceType)) { + RmTemplateLinux queryParam = new RmTemplateLinux(); + queryParam.setTemplateId(templateId); + count = rmTemplateLinuxMapper.selectRmTemplateLinuxList(queryParam).size(); + } else if ("switch".equals(resourceType)) { + RmTemplateSwitch queryParam = new RmTemplateSwitch(); + queryParam.setTemplateId(templateId); + count = rmTemplateSwitchMapper.selectRmTemplateSwitchList(queryParam).size(); + } + return count > 0; + } + /** + * 比较List和数组内容是否一致(忽略顺序) + */ + private boolean isEqualIgnoreOrder(List list, Long[] array) { + if (list == null && array == null) return true; + if (list == null || array == null) return false; + if (list.size() != array.length) return false; + + // 使用Set进行快速比较(如果允许重复元素,需要改用频率统计) + Set set1 = new HashSet<>(list); + Set set2 = new HashSet<>(Arrays.asList(array)); + + return set1.equals(set2); + } + /** + * 处理Linux监控项 + */ + private void processLinuxItems(RmMonitorTemplateVo rmMonitorTemplateVo, Long templateId) { + if (rmMonitorTemplateVo.getMonitorIds() == null || rmMonitorTemplateVo.getMonitorIds().length == 0) { + // 如果没有监控项,更新计数为0 + updateTemplateCounts(templateId, 0, 0, "linux"); + return; + } + + // 根据监控信息id查询详细信息 + List monitorItems = rmInitialMonitorItemMapper.selectRmInitialMonitorItemByIds(rmMonitorTemplateVo.getMonitorIds()); + + // 批量准备插入数据 + List linuxItems = monitorItems.stream() + .map(item -> { + RmTemplateLinux linuxItem = new RmTemplateLinux(); + linuxItem.setTemplateId(templateId); + linuxItem.setMetricKey(item.getMetricKey()); + linuxItem.setMetricName(item.getMetricName()); + linuxItem.setDataType(item.getDataType()); + linuxItem.setItemType(item.getItemType()); + return linuxItem; + }) + .collect(Collectors.toList()); + + // 批量插入 + if (!linuxItems.isEmpty()) { + rmTemplateLinuxMapper.batchInsertRmTemplateLinux(linuxItems); + int monitorCount = (int) linuxItems.stream().filter(r -> "monitorItem".equals(r.getItemType())).count(); + int autoDiscoverCount = (int) linuxItems.stream().filter(r -> "autoDiscoverItem".equals(r.getItemType())).count(); + updateTemplateCounts(templateId, monitorCount, autoDiscoverCount, "linux"); + } + } + + /** + * 处理交换机监控项 + */ + private void processSwitchItems(RmMonitorTemplateVo rmMonitorTemplateVo, Long templateId) { + if (rmMonitorTemplateVo.getMonitorIds() == null || rmMonitorTemplateVo.getMonitorIds().length == 0) { + // 如果没有监控项,更新计数为0 + updateTemplateCounts(templateId, 0, 0, "switch"); + return; + } + + // 根据监控信息id查询详细信息 + List monitorItems = rmInitialMonitorItemMapper.selectRmInitialMonitorItemByIds(rmMonitorTemplateVo.getMonitorIds()); + + // 批量准备插入数据 + List switchItems = monitorItems.stream() + .map(item -> { + RmTemplateSwitch switchItem = new RmTemplateSwitch(); + switchItem.setTemplateId(templateId); + switchItem.setMetricKey(item.getMetricKey()); + switchItem.setMetricName(item.getMetricName()); + switchItem.setOid(item.getOid()); + switchItem.setFilterValue(item.getFilterValue()); + switchItem.setSwitchDescription(item.getMonitorDescription()); + switchItem.setDataType(item.getDataType()); + switchItem.setItemType(item.getItemType()); + return switchItem; + }) + .collect(Collectors.toList()); + + // 批量插入 + if (!switchItems.isEmpty()) { + rmTemplateSwitchMapper.batchInsertRmTemplateSwitch(switchItems); + int monitorCount = (int) switchItems.stream().filter(r -> "monitorItem".equals(r.getItemType())).count(); + int autoDiscoverCount = (int) switchItems.stream().filter(r -> "autoDiscoverItem".equals(r.getItemType())).count(); + updateTemplateCounts(templateId, monitorCount, autoDiscoverCount, "switch"); + } + } + + /** + * 更新模板计数信息 + */ + private void updateTemplateCounts(Long templateId, int monitorCount, int autoDiscoverCount, String resourceType) { + RmMonitorTemplate monitorTemplate = new RmMonitorTemplate(); + monitorTemplate.setId(templateId); + monitorTemplate.setMonitorItems(String.valueOf(monitorCount)); + monitorTemplate.setDiscoveryRules(String.valueOf(autoDiscoverCount)); + monitorTemplate.setResourcyType(resourceType); + rmMonitorTemplateMapper.updateRmMonitorTemplate(monitorTemplate); + } } diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmMonitorTemplateMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmMonitorTemplateMapper.xml index 42d99a6..40d576f 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmMonitorTemplateMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmMonitorTemplateMapper.xml @@ -94,4 +94,8 @@ #{id} + + \ No newline at end of file diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmTemplateLinuxMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmTemplateLinuxMapper.xml index 897abd7..587cda6 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmTemplateLinuxMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmTemplateLinuxMapper.xml @@ -125,4 +125,8 @@ ) + + + delete from rm_template_linux where template_id = #{templateId} + \ No newline at end of file diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmTemplateSwitchMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmTemplateSwitchMapper.xml index b5dbdca..c7bed8b 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmTemplateSwitchMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/RmTemplateSwitchMapper.xml @@ -157,4 +157,8 @@ ) + + + delete from rm_template_switch where template_id = #{templateId} + \ No newline at end of file