snmp采集工具优化,采集数据入库优化。
This commit is contained in:
		@@ -4,6 +4,7 @@ import com.ruoyi.common.core.constant.SecurityConstants;
 | 
			
		||||
import com.ruoyi.common.core.constant.ServiceNameConstants;
 | 
			
		||||
import com.ruoyi.common.core.domain.R;
 | 
			
		||||
import com.ruoyi.system.api.domain.RmAlarmRecordRemote;
 | 
			
		||||
import com.ruoyi.system.api.domain.RmMonitorPolicyRemote;
 | 
			
		||||
import com.ruoyi.system.api.domain.RmNetworkInterfaceRemote;
 | 
			
		||||
import com.ruoyi.system.api.factory.RemoteRocketMqFallbackFactory;
 | 
			
		||||
import org.springframework.cloud.openfeign.FeignClient;
 | 
			
		||||
@@ -52,4 +53,29 @@ public interface RemoteRocketMqService {
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/networkInterface/getNetworkInterfaceList")
 | 
			
		||||
    public R<List<RmNetworkInterfaceRemote>> getNetworkInterfaceList(@RequestBody RmNetworkInterfaceRemote rmNetworkInterfaceRemote, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 下发策略
 | 
			
		||||
     * @param id
 | 
			
		||||
     * @param source
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/monitorPolicy/innerIssueSwitchPolicy")
 | 
			
		||||
    public R<String> innerIssueSwitchPolicy(Long id, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询策略信息
 | 
			
		||||
     * @param rmMonitorPolicyRemote
 | 
			
		||||
     * @param source
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/monitorPolicy/getPolicyMsgInner")
 | 
			
		||||
    public R<List<RmMonitorPolicyRemote>> getPolicyMsgInner(@RequestBody RmMonitorPolicyRemote rmMonitorPolicyRemote, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 | 
			
		||||
    /**
 | 
			
		||||
     * 策略添加新设备
 | 
			
		||||
     * @param rmMonitorPolicyRemote
 | 
			
		||||
     * @param source
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/monitorPolicy/updatePolicyMsgInner")
 | 
			
		||||
    public R<Integer> updatePolicyMsgInner(@RequestBody RmMonitorPolicyRemote rmMonitorPolicyRemote, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,61 @@
 | 
			
		||||
package com.ruoyi.system.api.domain;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonFormat;
 | 
			
		||||
import com.ruoyi.common.core.annotation.Excel;
 | 
			
		||||
import com.ruoyi.common.core.web.domain.BaseEntity;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
@Data
 | 
			
		||||
public class RmMonitorPolicyRemote extends BaseEntity {
 | 
			
		||||
 | 
			
		||||
    /** 主键ID */
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /** 策略名称 */
 | 
			
		||||
    @Excel(name = "策略名称")
 | 
			
		||||
    private String policyName;
 | 
			
		||||
 | 
			
		||||
    /** 描述 */
 | 
			
		||||
    @Excel(name = "描述")
 | 
			
		||||
    private String description;
 | 
			
		||||
 | 
			
		||||
    /** 资源组ID */
 | 
			
		||||
    private Long resourceGroupId;
 | 
			
		||||
    /** 资源组名称 */
 | 
			
		||||
    @Excel(name = "关联资源组")
 | 
			
		||||
    private String resourceGroupName;
 | 
			
		||||
    /** 模板ID */
 | 
			
		||||
    private Long templateId;
 | 
			
		||||
    /** 模板名称 */
 | 
			
		||||
    @Excel(name = "关联监控模板")
 | 
			
		||||
    private String templateName;
 | 
			
		||||
 | 
			
		||||
    /** 状态:0-待下发,1-已下发 */
 | 
			
		||||
    @Excel(name = "策略状态", readConverterExp = "0=待下发,1=已下发")
 | 
			
		||||
    private String status;
 | 
			
		||||
 | 
			
		||||
    /** 下发策略时间 */
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 | 
			
		||||
    @Excel(name = "下发策略时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
 | 
			
		||||
    private Date deployTime;
 | 
			
		||||
    /** 资源类型,linux switch */
 | 
			
		||||
    private String resourceType;
 | 
			
		||||
    /** 查询条件名称 */
 | 
			
		||||
    private String queryName;
 | 
			
		||||
    /** 创建时间 */
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 | 
			
		||||
    @Excel(name = "创建时间")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
    /** 修改时间 */
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 | 
			
		||||
    @Excel(name = "修改时间")
 | 
			
		||||
    private Date updateTime;
 | 
			
		||||
    /** 交换机类型 */
 | 
			
		||||
    private String switchType;
 | 
			
		||||
    /** 部署设备 */
 | 
			
		||||
    private String deployDevice;
 | 
			
		||||
    /** 优先级 */
 | 
			
		||||
    private String priority;
 | 
			
		||||
}
 | 
			
		||||
@@ -3,6 +3,7 @@ package com.ruoyi.system.api.factory;
 | 
			
		||||
import com.ruoyi.common.core.domain.R;
 | 
			
		||||
import com.ruoyi.system.api.RemoteRocketMqService;
 | 
			
		||||
import com.ruoyi.system.api.domain.RmAlarmRecordRemote;
 | 
			
		||||
import com.ruoyi.system.api.domain.RmMonitorPolicyRemote;
 | 
			
		||||
import com.ruoyi.system.api.domain.RmNetworkInterfaceRemote;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
@@ -51,6 +52,21 @@ public class RemoteRocketMqFallbackFactory implements FallbackFactory<RemoteRock
 | 
			
		||||
            public R<List<RmNetworkInterfaceRemote>> getNetworkInterfaceList(RmNetworkInterfaceRemote rmNetworkInterfaceRemote, String source) {
 | 
			
		||||
                return R.fail(throwable.getMessage());
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public R<String> innerIssueSwitchPolicy(Long id, String source) {
 | 
			
		||||
                return R.fail(throwable.getMessage());
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public R<List<RmMonitorPolicyRemote>> getPolicyMsgInner(RmMonitorPolicyRemote rmMonitorPolicyRemote, String source) {
 | 
			
		||||
                return R.fail(throwable.getMessage());
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public R<Integer> updatePolicyMsgInner(RmMonitorPolicyRemote rmMonitorPolicyRemote, String source) {
 | 
			
		||||
                return R.fail(throwable.getMessage());
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -137,7 +137,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
 | 
			
		||||
                String switchSn = details.getSwitchSn();
 | 
			
		||||
                RmEpsTopologyManagement rmEpsTopologyManagement = new RmEpsTopologyManagement();
 | 
			
		||||
                rmEpsTopologyManagement.setInterfaceName(interfaceName);
 | 
			
		||||
                rmEpsTopologyManagement.setSwitchSn(switchSn);
 | 
			
		||||
                rmEpsTopologyManagement.setSwitchIpAddress(details.getSwitchIp());
 | 
			
		||||
                List<RmEpsTopologyManagement> managements = rmEpsTopologyManagementMapper.selectRmEpsTopologyManagementList(rmEpsTopologyManagement);
 | 
			
		||||
                // 赋值
 | 
			
		||||
                if(!managements.isEmpty()){
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,12 @@
 | 
			
		||||
package com.ruoyi.system.service.impl;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.common.core.constant.SecurityConstants;
 | 
			
		||||
import com.ruoyi.common.core.domain.R;
 | 
			
		||||
import com.ruoyi.common.core.utils.DateUtils;
 | 
			
		||||
import com.ruoyi.common.core.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.common.core.utils.uuid.IdUtils;
 | 
			
		||||
import com.ruoyi.system.api.RemoteRocketMqService;
 | 
			
		||||
import com.ruoyi.system.api.domain.RmMonitorPolicyRemote;
 | 
			
		||||
import com.ruoyi.system.domain.RmSwitchInterfaceInfo;
 | 
			
		||||
import com.ruoyi.system.domain.RmSwitchManagement;
 | 
			
		||||
import com.ruoyi.system.mapper.RmSwitchInterfaceInfoMapper;
 | 
			
		||||
@@ -25,6 +30,8 @@ public class RmSwitchManagementServiceImpl implements IRmSwitchManagementService
 | 
			
		||||
    private RmSwitchManagementMapper rmSwitchManagementMapper;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RmSwitchInterfaceInfoMapper rmSwitchInterfaceInfoMapper;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RemoteRocketMqService remoteRocketMqService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询交换机管理
 | 
			
		||||
@@ -65,11 +72,45 @@ public class RmSwitchManagementServiceImpl implements IRmSwitchManagementService
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public int insertRmSwitchManagement(RmSwitchManagement rmSwitchManagement)
 | 
			
		||||
    {
 | 
			
		||||
    public int insertRmSwitchManagement(RmSwitchManagement rmSwitchManagement) {
 | 
			
		||||
        // 初始化交换机信息
 | 
			
		||||
        rmSwitchManagement.setCreateTime(DateUtils.getNowDate());
 | 
			
		||||
        rmSwitchManagement.setClientId(IdUtils.simpleUUID());
 | 
			
		||||
        return rmSwitchManagementMapper.insertRmSwitchManagement(rmSwitchManagement);
 | 
			
		||||
        String clientId= IdUtils.simpleUUID();
 | 
			
		||||
        rmSwitchManagement.setClientId(clientId);
 | 
			
		||||
        rmSwitchManagementMapper.insertRmSwitchManagement(rmSwitchManagement);
 | 
			
		||||
 | 
			
		||||
        // 查询并更新优先级为0的交换机策略
 | 
			
		||||
        R<List<RmMonitorPolicyRemote>> policyMsgR = remoteRocketMqService.getPolicyMsgInner(
 | 
			
		||||
                new RmMonitorPolicyRemote() {{
 | 
			
		||||
                    setPriority("0");
 | 
			
		||||
                    setResourceType("switch");
 | 
			
		||||
                }},
 | 
			
		||||
                SecurityConstants.INNER
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        if (policyMsgR.getData() != null && !policyMsgR.getData().isEmpty()) {
 | 
			
		||||
            RmMonitorPolicyRemote policyMsg = policyMsgR.getData().get(0);
 | 
			
		||||
 | 
			
		||||
            // 构建设备信息字符串
 | 
			
		||||
            String newDeviceList = StringUtils.isBlank(policyMsg.getDeployDevice())
 | 
			
		||||
                    ? clientId
 | 
			
		||||
                    : policyMsg.getDeployDevice() + "\n" + clientId;
 | 
			
		||||
 | 
			
		||||
            // 更新策略设备列表
 | 
			
		||||
            remoteRocketMqService.updatePolicyMsgInner(
 | 
			
		||||
                    new RmMonitorPolicyRemote() {{
 | 
			
		||||
                        setId(policyMsg.getId());
 | 
			
		||||
                        setDeployDevice(newDeviceList);
 | 
			
		||||
                        setUpdateTime(DateUtils.getNowDate());
 | 
			
		||||
                    }},
 | 
			
		||||
                    SecurityConstants.INNER
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            // 下发更新后的策略
 | 
			
		||||
            remoteRocketMqService.innerIssueSwitchPolicy(policyMsg.getId(), SecurityConstants.INNER);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package com.ruoyi.rocketmq.controller;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.common.core.domain.R;
 | 
			
		||||
import com.ruoyi.common.core.utils.poi.ExcelUtil;
 | 
			
		||||
import com.ruoyi.common.core.web.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.web.domain.AjaxResult;
 | 
			
		||||
@@ -7,6 +8,7 @@ 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;
 | 
			
		||||
import com.ruoyi.common.security.annotation.InnerAuth;
 | 
			
		||||
import com.ruoyi.common.security.annotation.RequiresPermissions;
 | 
			
		||||
import com.ruoyi.rocketmq.domain.RmMonitorPolicy;
 | 
			
		||||
import com.ruoyi.rocketmq.service.IRmMonitorPolicyService;
 | 
			
		||||
@@ -152,4 +154,38 @@ public class RmMonitorPolicyController extends BaseController
 | 
			
		||||
        return toAjax(rows);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 策略下发,内部调用
 | 
			
		||||
     * @param id
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @Log(title = "issueSwitchPolicy", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @GetMapping("/innerIssueSwitchPolicy")
 | 
			
		||||
    @InnerAuth
 | 
			
		||||
    public R<String> innerIssueSwitchPolicy(Long id)
 | 
			
		||||
    {
 | 
			
		||||
        rmMonitorPolicyService.issueSwitchPolicy(id);
 | 
			
		||||
        return R.ok("优先级0策略下发成功");
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询资源监控策略列表
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/getPolicyMsgInner")
 | 
			
		||||
    @InnerAuth
 | 
			
		||||
    public R<List<RmMonitorPolicy>> getPolicyMsgInner(@RequestBody RmMonitorPolicy rmMonitorPolicy)
 | 
			
		||||
    {
 | 
			
		||||
        List<RmMonitorPolicy> list = rmMonitorPolicyService.selectRmMonitorPolicyList(rmMonitorPolicy);
 | 
			
		||||
        return R.ok(list);
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改资源监控策略
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/updatePolicyMsgInner")
 | 
			
		||||
    @InnerAuth
 | 
			
		||||
    public R<Integer> updatePolicyMsgInner(@RequestBody RmMonitorPolicy rmMonitorPolicy)
 | 
			
		||||
    {
 | 
			
		||||
        int rows = rmMonitorPolicyService.updatePolicyMsgInner(rmMonitorPolicy);
 | 
			
		||||
        return R.ok(rows);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,8 @@ public class CollectDataVo {
 | 
			
		||||
    private String type;
 | 
			
		||||
    /** 数据 */
 | 
			
		||||
    private String value;
 | 
			
		||||
    /** 交换机ip */
 | 
			
		||||
    private String switchIp;
 | 
			
		||||
    /** 时间戳 */
 | 
			
		||||
    private long timestamp;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -76,4 +76,11 @@ public interface IRmMonitorPolicyService
 | 
			
		||||
    int issueSwitchPolicy(Long id);
 | 
			
		||||
 | 
			
		||||
    int updateResourcePolicy(RmMonitorPolicy rmMonitorPolicy);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改资源监控策略内部调用
 | 
			
		||||
     * @param rmMonitorPolicy
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int updatePolicyMsgInner(RmMonitorPolicy rmMonitorPolicy);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -353,6 +353,11 @@ public class RmMonitorPolicyServiceImpl implements IRmMonitorPolicyService
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int updatePolicyMsgInner(RmMonitorPolicy rmMonitorPolicy) {
 | 
			
		||||
        return rmMonitorPolicyMapper.updateRmMonitorPolicy(rmMonitorPolicy);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据id查询监控策略详情
 | 
			
		||||
     * @param id
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,38 @@
 | 
			
		||||
package com.ruoyi.rocketmq.snmp.config;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.rocketmq.domain.RmMonitorPolicy;
 | 
			
		||||
import com.ruoyi.rocketmq.service.IRmMonitorPolicyService;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.PostConstruct;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Component
 | 
			
		||||
@Slf4j
 | 
			
		||||
public class SwitchStrategyInitializer {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private IRmMonitorPolicyService rmMonitorPolicyService;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // 服务启动时下发默认策略
 | 
			
		||||
    @PostConstruct
 | 
			
		||||
    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());
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            log.error("初始化交换机采集策略失败", e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -28,6 +28,8 @@ import java.util.concurrent.ScheduledFuture;
 | 
			
		||||
@Slf4j
 | 
			
		||||
public class MultiSwitchCollectionScheduler {
 | 
			
		||||
 | 
			
		||||
    private static final String PREFIX = "switch";
 | 
			
		||||
    private static final String SUFFIX = "Collect";
 | 
			
		||||
    private final TaskScheduler taskScheduler;
 | 
			
		||||
    private final DynamicOidCollector dynamicOidCollector;
 | 
			
		||||
    private boolean collectorInitialized = false;
 | 
			
		||||
@@ -95,8 +97,27 @@ public class MultiSwitchCollectionScheduler {
 | 
			
		||||
 | 
			
		||||
        // 根据CollectVo配置创建不同的定时任务
 | 
			
		||||
        for (CollectVo collectVo : collectVos) {
 | 
			
		||||
            if (collectVo.isCollect()) { //剔除switchVo中的其他oid
 | 
			
		||||
                ScheduledFuture<?> task = createCollectionTask(switchIp, clientId, switchVo, collectVo);
 | 
			
		||||
            if (collectVo.isCollect()) {
 | 
			
		||||
                ScheduledFuture<?> task;
 | 
			
		||||
                // 剔除switchVo中的其他oid
 | 
			
		||||
                if (switchVo.getOtherOID() != null) {
 | 
			
		||||
                    Map<String, String> otherOid = switchOidVo.getOtherOID();
 | 
			
		||||
                    String type = collectVo.getType();
 | 
			
		||||
 | 
			
		||||
                    // 创建新的 Map,避免修改原始数据
 | 
			
		||||
                    Map<String, String> filteredOid = new HashMap<>(otherOid);
 | 
			
		||||
                    filteredOid.entrySet().removeIf(entry ->
 | 
			
		||||
                            !entry.getValue().equalsIgnoreCase(extractMiddle(type))
 | 
			
		||||
                    );
 | 
			
		||||
 | 
			
		||||
                    // 创建新的 SwitchOidDto,避免修改原始 switchVo
 | 
			
		||||
                    SwitchOidDto resultMap = createSwitchMsg(switchVo);
 | 
			
		||||
                    resultMap.setOtherOID(filteredOid);
 | 
			
		||||
 | 
			
		||||
                    task = createCollectionTask(switchIp, clientId, resultMap, collectVo);
 | 
			
		||||
                } else {
 | 
			
		||||
                    task = createCollectionTask(switchIp, clientId, switchVo, collectVo);
 | 
			
		||||
                }
 | 
			
		||||
                if (task != null) {
 | 
			
		||||
                    switchTasks.put(collectVo.getType(), task);
 | 
			
		||||
                }
 | 
			
		||||
@@ -112,6 +133,69 @@ public class MultiSwitchCollectionScheduler {
 | 
			
		||||
                switchIp, switchTasks.size());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 赋值oid
 | 
			
		||||
     * @param switchVo
 | 
			
		||||
     */
 | 
			
		||||
    public SwitchOidDto createSwitchMsg(SwitchOidDto switchVo){
 | 
			
		||||
        SwitchOidDto resultMap = new SwitchOidDto();
 | 
			
		||||
        resultMap.setIp(switchVo.getIp());
 | 
			
		||||
        resultMap.setCommunity(switchVo.getCommunity());
 | 
			
		||||
        resultMap.setPort(switchVo.getPort());
 | 
			
		||||
        resultMap.setVersion(switchVo.getVersion());
 | 
			
		||||
        resultMap.setTimeout(switchVo.getTimeout());
 | 
			
		||||
        resultMap.setRetries(switchVo.getRetries());
 | 
			
		||||
 | 
			
		||||
        // SNMP v3 特有参数
 | 
			
		||||
        resultMap.setSecurityName(switchVo.getSecurityName());
 | 
			
		||||
        resultMap.setAuthProtocol(switchVo.getAuthProtocol());
 | 
			
		||||
        resultMap.setAuthPassword(switchVo.getAuthPassword());
 | 
			
		||||
        resultMap.setPrivProtocol(switchVo.getPrivProtocol());
 | 
			
		||||
        resultMap.setPrivPassword(switchVo.getPrivPassword());
 | 
			
		||||
        resultMap.setSecurityLevel(switchVo.getSecurityLevel());
 | 
			
		||||
 | 
			
		||||
        // OID配置(复制所有OID Map)
 | 
			
		||||
        resultMap.setNetOID(new LinkedHashMap<>(switchVo.getNetOID()));
 | 
			
		||||
        resultMap.setEntityOID(new LinkedHashMap<>(switchVo.getEntityOID()));
 | 
			
		||||
        resultMap.setPwrOID(new LinkedHashMap<>(switchVo.getPwrOID()));
 | 
			
		||||
        resultMap.setFanOID(new LinkedHashMap<>(switchVo.getFanOID()));
 | 
			
		||||
        resultMap.setMpuOID(new LinkedHashMap<>(switchVo.getMpuOID()));
 | 
			
		||||
        resultMap.setModuleOID(new LinkedHashMap<>(switchVo.getModuleOID()));
 | 
			
		||||
        resultMap.setPowerOID(new LinkedHashMap<>(switchVo.getPowerOID()));
 | 
			
		||||
 | 
			
		||||
        // 过滤条件
 | 
			
		||||
        resultMap.setFilters(new HashMap<>(switchVo.getFilters()));
 | 
			
		||||
        return resultMap;
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * 提取字符串的中间部分(去除固定的前缀和后缀)
 | 
			
		||||
     * @param type 输入字符串(如 "switchAssCollect")
 | 
			
		||||
     * @return 中间部分(如 "Ass")
 | 
			
		||||
     */
 | 
			
		||||
    public String extractMiddle(String type) {
 | 
			
		||||
        if (type == null || type.isEmpty()) {
 | 
			
		||||
            return type;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 检查是否以 "switch" 开头
 | 
			
		||||
        if (!type.startsWith(PREFIX)) {
 | 
			
		||||
            throw new IllegalArgumentException("Type must start with 'switch'");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 检查是否以 "Collect" 结尾
 | 
			
		||||
        if (!type.endsWith(SUFFIX)) {
 | 
			
		||||
            throw new IllegalArgumentException("Type must end with 'Collect'");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 计算中间部分的起始和结束位置
 | 
			
		||||
        int prefixLength = PREFIX.length();
 | 
			
		||||
        int suffixLength = SUFFIX.length();
 | 
			
		||||
        int middleStart = prefixLength;
 | 
			
		||||
        int middleEnd = type.length() - suffixLength;
 | 
			
		||||
 | 
			
		||||
        // 提取中间部分
 | 
			
		||||
        return type.substring(middleStart, middleEnd);
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * 启动SNMP v3交换机采集任务
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONObject;
 | 
			
		||||
import com.fasterxml.jackson.databind.JsonNode;
 | 
			
		||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
			
		||||
import com.ruoyi.common.core.constant.SecurityConstants;
 | 
			
		||||
import com.ruoyi.common.core.domain.R;
 | 
			
		||||
import com.ruoyi.common.core.utils.DateUtils;
 | 
			
		||||
import com.ruoyi.rocketmq.domain.*;
 | 
			
		||||
import com.ruoyi.rocketmq.domain.vo.CollectDataVo;
 | 
			
		||||
@@ -13,7 +12,6 @@ import com.ruoyi.rocketmq.snmp.dto.CollectionResult;
 | 
			
		||||
import com.ruoyi.rocketmq.utils.SwitchJsonDataParser;
 | 
			
		||||
import com.ruoyi.system.api.RemoteRevenueConfigService;
 | 
			
		||||
import com.ruoyi.system.api.domain.InitialSwitchInfoDetailsRemote;
 | 
			
		||||
import com.ruoyi.system.api.domain.RmResourceRegistrationRemote;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
@@ -58,10 +56,11 @@ public class ProcessSwitchCollectDataService {
 | 
			
		||||
            List<Map<String, String>> resultData = result.getData();
 | 
			
		||||
            CollectDataVo switchDataVo = new CollectDataVo();
 | 
			
		||||
            switchDataVo.setTimestamp(result.getTimestamp());
 | 
			
		||||
            switchDataVo.setSwitchIp(result.getSwitchIp());
 | 
			
		||||
            switchDataVo.setValue(JSONObject.toJSONString(resultData));
 | 
			
		||||
            switch(result.getDeviceType()){
 | 
			
		||||
                case "net":
 | 
			
		||||
//                    handleSwitchNetMessage(switchDataVo, clientId);
 | 
			
		||||
                    handleSwitchNetMessage(switchDataVo, clientId);
 | 
			
		||||
                    break;
 | 
			
		||||
                case "pwr":
 | 
			
		||||
                    handleSwitchPwrMessage(switchDataVo, clientId);
 | 
			
		||||
@@ -119,7 +118,7 @@ public class ProcessSwitchCollectDataService {
 | 
			
		||||
                                insertData.setCollectType(fieldName);
 | 
			
		||||
                                if (!"null".equals(fieldValue)) {
 | 
			
		||||
                                    insertData.setCollectValue(fieldValue);
 | 
			
		||||
//                                    insertInitialSwitchOtherInfo.insertInitialSwitchOtherCollectData(insertData);
 | 
			
		||||
                                    insertInitialSwitchOtherInfo.insertInitialSwitchOtherCollectData(insertData);
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
@@ -134,8 +133,7 @@ public class ProcessSwitchCollectDataService {
 | 
			
		||||
                                insertData.setCollectType(fieldName);
 | 
			
		||||
                                if (!"null".equals(fieldValue)) {
 | 
			
		||||
                                    insertData.setCollectValue(fieldValue);
 | 
			
		||||
                                    System.out.println("1");
 | 
			
		||||
//                                    insertInitialSwitchOtherInfo.insertInitialSwitchOtherCollectData(insertData);
 | 
			
		||||
                                    insertInitialSwitchOtherInfo.insertInitialSwitchOtherCollectData(insertData);
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
@@ -154,13 +152,6 @@ public class ProcessSwitchCollectDataService {
 | 
			
		||||
    private void handleSwitchNetMessage(CollectDataVo switchDataVo, String clientId) {
 | 
			
		||||
        List<InitialSwitchInfo> switchInfos = SwitchJsonDataParser.parseJsonData(switchDataVo.getValue(), InitialSwitchInfo.class);
 | 
			
		||||
        if(!switchInfos.isEmpty()){
 | 
			
		||||
            // 根据clientId查询交换机ip
 | 
			
		||||
            RmResourceRegistrationRemote queryParam = new RmResourceRegistrationRemote();
 | 
			
		||||
            queryParam.setHardwareSn(clientId);
 | 
			
		||||
            R<RmResourceRegistrationRemote> registMsgR = remoteRevenueConfigService.getListByHardwareSn(queryParam, SecurityConstants.INNER);
 | 
			
		||||
            if(registMsgR != null){
 | 
			
		||||
                RmResourceRegistrationRemote registMsg = registMsgR.getData();
 | 
			
		||||
            }
 | 
			
		||||
            // 时间戳转换
 | 
			
		||||
            long timestamp = switchDataVo.getTimestamp();
 | 
			
		||||
            long millis = timestamp * 1000;
 | 
			
		||||
@@ -186,9 +177,7 @@ public class ProcessSwitchCollectDataService {
 | 
			
		||||
                switchInfos.forEach(switchInfo -> {
 | 
			
		||||
                    switchInfo.setClientId(clientId);
 | 
			
		||||
                    switchInfo.setCreateTime(createTime);
 | 
			
		||||
                    if(registMsgR != null && registMsgR.getData()!=null && registMsgR.getData().getSnmpCollectAddr()!=null){
 | 
			
		||||
                        switchInfo.setSwitchIp(registMsgR.getData().getSnmpCollectAddr());
 | 
			
		||||
                    }
 | 
			
		||||
                    switchInfo.setSwitchIp(switchDataVo.getSwitchIp());
 | 
			
		||||
                    InitialSwitchInfoTemp tempInfo = tempMap.get(switchInfo.getName());
 | 
			
		||||
                    if (tempInfo != null) {
 | 
			
		||||
                        // 计算inSpeed
 | 
			
		||||
@@ -212,9 +201,7 @@ public class ProcessSwitchCollectDataService {
 | 
			
		||||
                switchInfos.forEach(switchInfo -> {
 | 
			
		||||
                    switchInfo.setClientId(clientId);
 | 
			
		||||
                    switchInfo.setCreateTime(createTime);
 | 
			
		||||
                    if(registMsgR != null && registMsgR.getData()!=null && registMsgR.getData().getSnmpCollectAddr()!=null){
 | 
			
		||||
                        switchInfo.setSwitchIp(registMsgR.getData().getSnmpCollectAddr());
 | 
			
		||||
                    }
 | 
			
		||||
                    switchInfo.setSwitchIp(switchDataVo.getSwitchIp());
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
            // 清空临时表对应switch信息
 | 
			
		||||
 
 | 
			
		||||
@@ -19,10 +19,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
        <result property="switchType"    column="switch_type"    />
 | 
			
		||||
        <result property="deployDevice"    column="deploy_device"    />
 | 
			
		||||
        <result property="resourceType"    column="resource_type"    />
 | 
			
		||||
        <result property="priority"    column="priority"    />
 | 
			
		||||
    </resultMap>
 | 
			
		||||
 | 
			
		||||
    <sql id="selectRmMonitorPolicyVo">
 | 
			
		||||
        select id, template_id, resource_group_id, policy_name, description, status, deploy_time, create_time, update_time, create_by, update_by, switch_type, deploy_device, resource_type from rm_monitor_policy
 | 
			
		||||
        select id, template_id, resource_group_id, policy_name, description, status, deploy_time, create_time, update_time, create_by, update_by, switch_type, deploy_device, resource_type, priority from rm_monitor_policy
 | 
			
		||||
    </sql>
 | 
			
		||||
 | 
			
		||||
    <select id="selectRmMonitorPolicyList" parameterType="RmMonitorPolicy" resultMap="RmMonitorPolicyResult">
 | 
			
		||||
@@ -30,11 +31,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
        <where>
 | 
			
		||||
            <if test="templateId != null "> and template_id = #{templateId}</if>
 | 
			
		||||
            <if test="resourceType != null "> and resource_type = #{resourceType}</if>
 | 
			
		||||
            <if test="resourceType != null "> and resource_type = #{resourceType}</if>
 | 
			
		||||
            <if test="resourceGroupId != null "> and resource_group_id = #{resourceGroupId}</if>
 | 
			
		||||
            <if test="policyName != null  and policyName != ''"> and policy_name like concat('%', #{policyName}, '%')</if>
 | 
			
		||||
            <if test="description != null  and description != ''"> and description = #{description}</if>
 | 
			
		||||
            <if test="status != null  and status != ''"> and status = #{status}</if>
 | 
			
		||||
            <if test="deployTime != null "> and deploy_time = #{deployTime}</if>
 | 
			
		||||
            <if test="priority != null "> and priority = #{priority}</if>
 | 
			
		||||
            <if test="queryName != null and queryName != ''">
 | 
			
		||||
                and (policy_name like concat('%', #{queryName}, '%')
 | 
			
		||||
                or template_id in (select id from rm_monitor_template where template_name like concat('%', #{queryName}, '%'))
 | 
			
		||||
@@ -65,6 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
            <if test="switchType != null">switch_type,</if>
 | 
			
		||||
            <if test="deployDevice != null">deploy_device,</if>
 | 
			
		||||
            <if test="resourceType != null">resource_type,</if>
 | 
			
		||||
            <if test="priority != null">priority,</if>
 | 
			
		||||
        </trim>
 | 
			
		||||
        <trim prefix="values (" suffix=")" suffixOverrides=",">
 | 
			
		||||
            <if test="templateId != null">#{templateId},</if>
 | 
			
		||||
@@ -80,6 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
            <if test="switchType != null">#{switchType},</if>
 | 
			
		||||
            <if test="deployDevice != null">#{deployDevice},</if>
 | 
			
		||||
            <if test="resourceType != null">#{resourceType},</if>
 | 
			
		||||
            <if test="priority != null">#{priority},</if>
 | 
			
		||||
        </trim>
 | 
			
		||||
    </insert>
 | 
			
		||||
 | 
			
		||||
@@ -99,6 +104,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
            <if test="switchType != null">switch_type = #{switchType},</if>
 | 
			
		||||
            <if test="deployDevice != null">deploy_device = #{deployDevice},</if>
 | 
			
		||||
            <if test="resourceType != null">resource_type = #{resourceType},</if>
 | 
			
		||||
            <if test="priority != null">priority = #{priority},</if>
 | 
			
		||||
        </trim>
 | 
			
		||||
        where id = #{id}
 | 
			
		||||
    </update>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user