agent接收数据类型调整匹配,完善资源模板管理、资源监控策略逻辑。

This commit is contained in:
gaoyutao
2025-09-24 17:40:53 +08:00
parent d5f232e295
commit 543b51ca6f
20 changed files with 419 additions and 101 deletions

View File

@@ -80,5 +80,13 @@ public interface RemoteRevenueConfigService
*/
@PostMapping("/registration/list")
public R<TableDataInfo> getRegistrationList(@RequestBody RmResourceRegistrationRemote rmResourceRegistrationRemote, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 根据硬件SN查询资源信息
* @param rmResourceRegistrationRemote
* @param source
* @return
*/
@PostMapping("/registration/getListByHardwareSn")
public R<RmResourceRegistrationRemote> getListByHardwareSn(@RequestBody RmResourceRegistrationRemote rmResourceRegistrationRemote, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@@ -61,6 +61,11 @@ public class RemoteRevenueConfigFallbackFactory implements FallbackFactory<Remot
public R<TableDataInfo> getRegistrationList(RmResourceRegistrationRemote rmResourceRegistrationRemote, String source) {
return R.fail("获取资源注册列表信息失败" + throwable.getMessage());
}
@Override
public R<RmResourceRegistrationRemote> getListByHardwareSn(RmResourceRegistrationRemote rmResourceRegistrationRemote, String source) {
return R.fail("根据SN获取资源注册列表信息失败" + throwable.getMessage());
}
};
}
}

View File

@@ -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<RmResourceRegistration> list = rmResourceGroupService.getRegisterList(rmResourceGroup);
return getDataTable(list);
PageInfo<RmResourceRegistration> pageInfo = rmResourceGroupService.getRegisterList(rmResourceGroup);
return getDataTable(pageInfo.getList(), pageInfo.getTotal());
}
}

View File

@@ -155,6 +155,15 @@ public class RmResourceRegistrationController extends BaseController
List<RmResourceRegistration> list = rmResourceRegistrationService.getRegistrationByIds(ids);
return R.ok(list);
}
/**
* 查询资源注册列表
*/
@InnerAuth
@PostMapping("/getListByHardwareSn")
public R<RmResourceRegistration> getListByHardwareSn(@RequestBody RmResourceRegistration rmResourceRegistration)
{
List<RmResourceRegistration> list = rmResourceRegistrationService.selectRmResourceRegistrationList(rmResourceRegistration);
return R.ok(list.get(0));
}
}

View File

@@ -68,4 +68,8 @@ public interface RmResourceGroupMapper
public RmResourceGroup selectMonitorMsgAndGroupMsg(Long id);
int exitsResourceById(RmResourceGroup rmResourceGroup);
int updateRmPolicyStatus(Long resourceGroupId);
int updateScriptPolicyStatus(Long resourceGroupId);
}

View File

@@ -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<RmResourceRegistration> getRegisterList(RmResourceGroup rmResourceGroup);
PageInfo<RmResourceRegistration> getRegisterList(RmResourceGroup rmResourceGroup);
String exitsResourceById(RmResourceGroup rmResourceGroup);
}

View File

@@ -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<RmResourceRegistration> getRegisterList(RmResourceGroup rmResourceGroup) {
public PageInfo<RmResourceRegistration> 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<RmResourceRegistration> 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<RmResourceRegistration> 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);
}
}

View File

@@ -100,10 +100,20 @@
<select id="selectMonitorMsgAndGroupMsg" parameterType="Long" resultType="RmResourceGroup">
select b.monitor_items monitorItems,b.discovery_rules discoveryRules from rm_resource_group a left join rm_monitor_template b on a.id=b.resource_group_id
where FIND_IN_SET(#{id}, a.included_devices_id) > 0
limit 1
</select>
<select id="exitsResourceById" parameterType="RmResourceGroup" resultType="java.lang.Integer">
select count(1) from rm_resource_group
where FIND_IN_SET(#{resourceIds}, included_devices_id) > 0
</select>
<update id="updateRmPolicyStatus" parameterType="Long">
update rm_monitor_policy set status = '0'
where resource_group_id = #{resourceGroupId}
</update>
<update id="updateScriptPolicyStatus" parameterType="Long">
update rm_deployment_policy set policy_status = '0'
where resource_group_id = #{resourceGroupId}
</update>
</mapper>

View File

@@ -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<RmMonitorPolicy> 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("资源监控策略新增失败,该资源组已绑定其他策略");
}
}
/**

View File

@@ -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<Map> list = rmMonitorTemplateService.getAllTemplate();
return success(list);
}
}

View File

@@ -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<RspVo> 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<RmResourceRegistrationRemote> 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;
}
/**
* 注册应答处理

View File

@@ -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<Map> getAllTemplate();
}

View File

@@ -62,4 +62,6 @@ public interface RmTemplateLinuxMapper
public int deleteRmTemplateLinuxByIds(Long[] ids);
void batchInsertRmTemplateLinux(@Param("list") List<RmTemplateLinux> linuxItems);
int deleteByTemplateId(Long templateId);
}

View File

@@ -66,4 +66,6 @@ public interface RmTemplateSwitchMapper
* @param switchItems
*/
void batchInsertRmTemplateSwitch(@Param("list") List<RmTemplateSwitch> switchItems);
int deleteByTemplateId(Long templateId);
}

View File

@@ -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<String, Object> getTemplateMsgById(Long id);
List<Map> getAllTemplate();
}

View File

@@ -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<RmMonitorPolicy> 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<RmMonitorPolicyVo> 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<RmMonitorPolicy> exits = rmMonitorPolicyMapper.selectRmMonitorPolicyList(queryParam);
if(!exits.isEmpty()){
return -1;
}
rmMonitorPolicyMapper.insertRmMonitorPolicy(rmMonitorPolicy);
// 模板绑定资源组信息
RmMonitorTemplate rmMonitorTemplate = new RmMonitorTemplate();

View File

@@ -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<RmInitialMonitorItem> monitorItems = rmInitialMonitorItemMapper.selectRmInitialMonitorItemByIds(rmMonitorTemplateVo.getMonitorIds());
// 批量准备插入数据
List<RmTemplateLinux> 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<RmInitialMonitorItem> monitorItems = rmInitialMonitorItemMapper.selectRmInitialMonitorItemByIds(rmMonitorTemplateVo.getMonitorIds());
// 批量准备插入数据
List<RmTemplateSwitch> 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<Map> 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<Long> existingMonitorIds = new ArrayList<>();
if ("linux".equals(rmMonitorTemplateVo.getResourceType())) {
RmTemplateLinux queryParam = new RmTemplateLinux();
queryParam.setTemplateId(templateId);
List<RmTemplateLinux> 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<RmTemplateSwitch> existingItems = rmTemplateSwitchMapper.selectRmTemplateSwitchList(queryParam);
List<Long> 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<Long> 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<Long> set1 = new HashSet<>(list);
Set<Long> 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<RmInitialMonitorItem> monitorItems = rmInitialMonitorItemMapper.selectRmInitialMonitorItemByIds(rmMonitorTemplateVo.getMonitorIds());
// 批量准备插入数据
List<RmTemplateLinux> 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<RmInitialMonitorItem> monitorItems = rmInitialMonitorItemMapper.selectRmInitialMonitorItemByIds(rmMonitorTemplateVo.getMonitorIds());
// 批量准备插入数据
List<RmTemplateSwitch> 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);
}
}

View File

@@ -94,4 +94,8 @@
#{id}
</foreach>
</delete>
<select id="getAllTemplate" resultType="java.util.Map">
select id, template_name templateName,resourcy_type resourceType from rm_monitor_template
</select>
</mapper>

View File

@@ -125,4 +125,8 @@
)
</foreach>
</insert>
<delete id="deleteByTemplateId" parameterType="Long">
delete from rm_template_linux where template_id = #{templateId}
</delete>
</mapper>

View File

@@ -157,4 +157,8 @@
)
</foreach>
</insert>
<delete id="deleteByTemplateId" parameterType="Long">
delete from rm_template_switch where template_id = #{templateId}
</delete>
</mapper>