优化监控看板、初始化mtr模块

This commit is contained in:
gaoyutao
2025-11-17 18:06:37 +08:00
parent 68e042d9fc
commit bd65b27605
54 changed files with 2858 additions and 245 deletions
@@ -1,7 +1,6 @@
package com.ruoyi.system.config;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.mapper.RmResourceRegistrationMapper;
import com.ruoyi.system.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -9,7 +8,6 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
@@ -36,17 +34,11 @@ public class TableScheduleConfig {
@Autowired
private IAllInterfaceNameService allInterfaceNameService;
@Autowired
private IEpsServerRevenueConfigService epsServerRevenueConfigService;
@Autowired
private IRmEpsTopologyManagementService rmEpsTopologyManagementService;
@Autowired
private IEpsMethodChangeRecordService epsMethodChangeRecordService;
@Autowired
private IRmMonitorConfigService rmMonitorConfigService;
@Autowired
private IRmMonitorConfigDetailsService rmMonitorConfigDetailsService;
@Autowired
private RmResourceRegistrationMapper rmResourceRegistrationMapper;
// 每月25号创建下月表
@Scheduled(cron = "0 0 0 25 * ?")
@@ -54,70 +46,13 @@ public class TableScheduleConfig {
public void createNextMonthTables() {
epsInitialTrafficDataService.createNextMonthTables();
}
/**
* 每5分钟计算配置好的总流量
*/
@Scheduled(cron = "0 1/5 * * * ?")
public void sumTrafficMyMonitorConfig() {
// 查询所有配置
List<RmMonitorConfig> rmMonitorConfigList = rmMonitorConfigService.selectRmMonitorConfigList(new RmMonitorConfig());
if (rmMonitorConfigList == null || rmMonitorConfigList.isEmpty()) {
return;
}
for (RmMonitorConfig rmMonitorConfig : rmMonitorConfigList) {
// 判断资源类型
if("1".equals(rmMonitorConfig.getResourceType()) || "3".equals(rmMonitorConfig.getResourceType())){
if("3".equals(rmMonitorConfig.getResourceType())){
if(rmMonitorConfig.getBusinessName() == null){
log.warn("不存在业务");
continue;
}
// 根据业务代码查询服务器clientId
RmResourceRegistration queryRegist = new RmResourceRegistration();
queryRegist.setBusinessName(rmMonitorConfig.getBusinessName());
List<RmResourceRegistration> registrationList = rmResourceRegistrationMapper.getRegistrationTableInfoList(queryRegist);
StringBuilder clientIds = new StringBuilder();
if (registrationList != null && !registrationList.isEmpty()) {
for (RmResourceRegistration registration : registrationList) {
if (registration.getClientId() != null) {
if (clientIds.length() > 0) {
clientIds.append("\n");
}
clientIds.append(registration.getClientId());
}
}
}
rmMonitorConfig.setDeployDevice(clientIds.toString());
}
List<EpsInitialTrafficData> serverTrafficList = epsInitialTrafficDataService.getServerTrafficByMonitorView(rmMonitorConfig);
// 计算结果落入临时表
for (EpsInitialTrafficData epsInitialTrafficData : serverTrafficList) {
RmMonitorConfigDetails configDetails = new RmMonitorConfigDetails();
configDetails.setMonitorId(rmMonitorConfig.getId());
configDetails.setCreateTime(epsInitialTrafficData.getCreateTime());
// 查询该数据是否存在
List<RmMonitorConfigDetails> exitsList = rmMonitorConfigDetailsService.selectRmMonitorConfigDetailsList(configDetails);
if(exitsList == null || exitsList.isEmpty()){
configDetails.setInSpeed(new BigDecimal(epsInitialTrafficData.getInSpeed() == null ? "0" : epsInitialTrafficData.getInSpeed()));
configDetails.setOutSpeed(new BigDecimal(epsInitialTrafficData.getOutSpeed() == null ? "0" : epsInitialTrafficData.getOutSpeed()));
configDetails.setDeployDevice(rmMonitorConfig.getDeployDevice());
rmMonitorConfigDetailsService.insertRmMonitorConfigDetails(configDetails);
}
}
}else{
List<InitialSwitchInfoDetails> switchInfoDetailsList = initialSwitchInfoDetailsService.getMonitorViewDetails(rmMonitorConfig);
for (InitialSwitchInfoDetails initialSwitchInfoDetails : switchInfoDetailsList) {
RmMonitorConfigDetails configDetails = new RmMonitorConfigDetails();
configDetails.setMonitorId(rmMonitorConfig.getId());
configDetails.setCreateTime(initialSwitchInfoDetails.getCreateTime());
// 查询该数据是否存在
List<RmMonitorConfigDetails> exitsList = rmMonitorConfigDetailsService.selectRmMonitorConfigDetailsList(configDetails);
if(exitsList == null || exitsList.isEmpty()){
configDetails.setInSpeed(initialSwitchInfoDetails.getInSpeed());
configDetails.setOutSpeed(initialSwitchInfoDetails.getOutSpeed());
configDetails.setDeployDevice(rmMonitorConfig.getDeployDevice());
rmMonitorConfigDetailsService.insertRmMonitorConfigDetails(configDetails);
}
}
}
}
public void sumTrafficMyMonitorConfigScheduled() {
rmMonitorConfigService.sumTrafficMyMonitorConfig(null);
}
// 每天0点执行 计算95带宽值/日
@@ -1,18 +1,16 @@
package com.ruoyi.system.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.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.domain.RmMonitorConfigDetails;
import com.ruoyi.system.service.IRmMonitorConfigDetailsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@@ -29,73 +27,6 @@ public class RmMonitorConfigDetailsController extends BaseController
@Autowired
private IRmMonitorConfigDetailsService rmMonitorConfigDetailsService;
/**
* 查询监控看板详情列表
*/
@RequiresPermissions("system:monitorConfigDetails:list")
@GetMapping("/list")
public TableDataInfo list(RmMonitorConfigDetails rmMonitorConfigDetails)
{
startPage();
List<RmMonitorConfigDetails> list = rmMonitorConfigDetailsService.selectRmMonitorConfigDetailsList(rmMonitorConfigDetails);
return getDataTable(list);
}
/**
* 导出监控看板详情列表
*/
@RequiresPermissions("system:monitorConfigDetails:export")
@Log(title = "监控看板详情", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, RmMonitorConfigDetails rmMonitorConfigDetails)
{
List<RmMonitorConfigDetails> list = rmMonitorConfigDetailsService.selectRmMonitorConfigDetailsList(rmMonitorConfigDetails);
ExcelUtil<RmMonitorConfigDetails> util = new ExcelUtil<RmMonitorConfigDetails>(RmMonitorConfigDetails.class);
util.exportExcel(response, list, "监控看板详情数据");
}
/**
* 获取监控看板详情详细信息
*/
@RequiresPermissions("system:monitorConfigDetails:query")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(rmMonitorConfigDetailsService.selectRmMonitorConfigDetailsById(id));
}
/**
* 新增监控看板详情
*/
@RequiresPermissions("system:monitorConfigDetails:add")
@Log(title = "监控看板详情", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody RmMonitorConfigDetails rmMonitorConfigDetails)
{
return toAjax(rmMonitorConfigDetailsService.insertRmMonitorConfigDetails(rmMonitorConfigDetails));
}
/**
* 修改监控看板详情
*/
@RequiresPermissions("system:monitorConfigDetails:edit")
@Log(title = "监控看板详情", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody RmMonitorConfigDetails rmMonitorConfigDetails)
{
return toAjax(rmMonitorConfigDetailsService.updateRmMonitorConfigDetails(rmMonitorConfigDetails));
}
/**
* 删除监控看板详情
*/
@RequiresPermissions("system:monitorConfigDetails:remove")
@Log(title = "监控看板详情", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(rmMonitorConfigDetailsService.deleteRmMonitorConfigDetailsByIds(ids));
}
/**
* 监控看板-详情视图 出入流量
*/
@@ -103,7 +34,7 @@ public class RmMonitorConfigDetailsController extends BaseController
@PostMapping("/getTrafficByMonitorView")
public AjaxResult getTrafficByMonitorView(@RequestBody RmMonitorConfigDetails queryParam)
{
Map<String, Object> echartsData = rmMonitorConfigDetailsService.getTrafficByMonitorView(queryParam);
List<Map<String, Object>> echartsData = rmMonitorConfigDetailsService.getTrafficByMonitorView(queryParam);
return success(echartsData);
}
}
@@ -25,8 +25,8 @@ public class InitialSwitchInfoDetails extends BaseEntity
@Excel(name = "客户端ID")
private String clientId;
/** 网络接口名称(如eth0、ens33等) */
@Excel(name = "网络接口名称(如eth0、ens33等)")
/** 接口名称 */
@Excel(name = "接口名称")
private String name;
/** 接收流量(字节) */
@@ -41,16 +41,16 @@ public class InitialSwitchInfoDetails extends BaseEntity
@Excel(name = "接口状态(up/down等)")
private String status;
/** 接口类型(ethernet/wireless等) */
@Excel(name = "接口类型(ethernet/wireless等)")
/** 接口类型*/
@Excel(name = "接口类型")
private String type;
/** 接收流量(bytes/s */
@Excel(name = "接收流量", readConverterExp = "b=ytes/s")
/** 接收流量(bits/s */
@Excel(name = "接收流量")
private BigDecimal inSpeed;
/** 发送流量(bytes/s */
@Excel(name = "发送流量", readConverterExp = "b=ytes/s")
/** 发送流量(bits/s */
@Excel(name = "发送流量")
private BigDecimal outSpeed;
/** 发送或接收流量的最大值 */
private BigDecimal maxSpeed;
@@ -37,11 +37,11 @@ public class RmMonitorConfigDetails extends BaseEntity
private BigDecimal outBytes;
/** 接收流量(bit/s */
@Excel(name = "接收流量", readConverterExp = "b=it/s")
@Excel(name = "接收流量bit/s")
private BigDecimal inSpeed;
/** 发送流量(bit/s */
@Excel(name = "发送流量", readConverterExp = "b=it/s")
@Excel(name = "发送流量bit/s")
private BigDecimal outSpeed;
/** 开始时间 */
private String startTime;
@@ -1,7 +1,9 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.system.domain.RmMonitorConfigDetails;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 监控看板详情Mapper接口
@@ -51,6 +53,8 @@ public interface RmMonitorConfigDetailsMapper
*/
public int deleteRmMonitorConfigDetailsById(Long id);
public int deleteRmMonitorConfigDetailsByMonitorIds(Long[] monitorId);
/**
* 批量删除监控看板详情
*
@@ -58,4 +62,7 @@ public interface RmMonitorConfigDetailsMapper
* @return 结果
*/
public int deleteRmMonitorConfigDetailsByIds(Long[] ids);
@Transactional(rollbackFor = Exception.class)
int batchInsertRmMonitorConfigDetails(List<RmMonitorConfigDetails> batchInsertList);
}
@@ -113,7 +113,7 @@ public interface IInitialSwitchInfoDetailsService
/**
* 监控看板-详情视图 出入流量
* @param initialSwitchInfoDetails
* @param rmMonitorConfig
* @return
*/
List<InitialSwitchInfoDetails> getMonitorViewDetails(RmMonitorConfig rmMonitorConfig);
@@ -66,5 +66,7 @@ public interface IRmMonitorConfigDetailsService
* @param queryParam
* @return
*/
Map<String, Object> getTrafficByMonitorView(RmMonitorConfigDetails queryParam);
List<Map<String, Object>> getTrafficByMonitorView(RmMonitorConfigDetails queryParam);
int batchInsertRmMonitorConfigDetails(List<RmMonitorConfigDetails> batchInsertList);
}
@@ -1,8 +1,9 @@
package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.system.domain.RmMonitorConfig;
import java.util.List;
/**
* 监控配置Service接口
*
@@ -58,4 +59,8 @@ public interface IRmMonitorConfigService
* @return 结果
*/
public int deleteRmMonitorConfigById(Long id);
public void sumTrafficMyMonitorConfig(Long id);
void asyncAfterInsert(Long id);
}
@@ -7,7 +7,6 @@ import com.ruoyi.system.domain.*;
import com.ruoyi.system.enums.ReviewEnum;
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.EpsInitialTrafficDataService;
import com.ruoyi.system.service.IRmMonitorConfigService;
import com.ruoyi.system.util.CalculateUtil;
import com.ruoyi.system.util.DateUtil;
import com.ruoyi.system.util.TableRouterUtil;
@@ -53,8 +52,6 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
@Autowired
private RmRegistrationMachineMapper rmRegistrationMachineMapper;
@Autowired
private IRmMonitorConfigService rmMonitorConfigService;
@Autowired
private RmResourceRegistrationMapper rmResourceRegistrationMapper;
@Override
public void createNextMonthTables() {
@@ -5,7 +5,6 @@ import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.web.page.PageDomain;
import com.ruoyi.system.domain.EpsInitialTrafficData;
import com.ruoyi.system.domain.EpsNodeBandwidth;
import com.ruoyi.system.domain.RmMonitorConfig;
import com.ruoyi.system.domain.RmSwitchManagement;
import com.ruoyi.system.mapper.EpsNodeBandwidthMapper;
import com.ruoyi.system.mapper.RmSwitchManagementMapper;
@@ -334,32 +333,27 @@ public class EpsNodeBandwidthServiceImpl implements IEpsNodeBandwidthService
*/
@Override
public List<EpsNodeBandwidth> getListByMonitorView(EpsNodeBandwidth epsNodeBandwidth) {
// 查询概览配置内容
RmMonitorConfig rmMonitorConfig = rmMonitorConfigService.selectRmMonitorConfigById(epsNodeBandwidth.getMonitorId());
if(rmMonitorConfig != null){
// 拿到部署设备
String deoloyDevice = rmMonitorConfig.getDeployDevice();
if(deoloyDevice == null){
return new ArrayList<>();
}
String clientIds = deoloyDevice.replace("\n",",");
epsNodeBandwidth.setClientIds(clientIds);
if(epsNodeBandwidth.getCalculationMode() == null){
// 计算方式 默认1000
epsNodeBandwidth.setCalculationMode("1000");
}
if(epsNodeBandwidth.getResourceType() == null){
// 资源类型 默认服务器
epsNodeBandwidth.setResourceType("1");
}
if(epsNodeBandwidth.getBandwidthType() == null){
// 默认日95值
epsNodeBandwidth.setBandwidthType("1");
}
List<EpsNodeBandwidth> list = epsNodeBandwidthMapper.getListByMonitorView(epsNodeBandwidth);
return list;
// 拿到部署设备
String deoloyDevice = epsNodeBandwidth.getClientIds();
if(deoloyDevice == null){
return new ArrayList<>();
}
return new ArrayList<>();
String clientIds = deoloyDevice.replace("\n",",");
epsNodeBandwidth.setClientIds(clientIds);
if(epsNodeBandwidth.getCalculationMode() == null){
// 计算方式 默认1000
epsNodeBandwidth.setCalculationMode("1000");
}
if(epsNodeBandwidth.getResourceType() == null){
// 资源类型 默认服务器
epsNodeBandwidth.setResourceType("1");
}
if(epsNodeBandwidth.getBandwidthType() == null){
// 默认日95值
epsNodeBandwidth.setBandwidthType("1");
}
List<EpsNodeBandwidth> list = epsNodeBandwidthMapper.getListByMonitorView(epsNodeBandwidth);
return list;
}
// 动态生成复合键
@@ -10,7 +10,6 @@ import com.ruoyi.system.domain.*;
import com.ruoyi.system.enums.ReviewEnum;
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.IInitialSwitchInfoDetailsService;
import com.ruoyi.system.service.IRmMonitorConfigService;
import com.ruoyi.system.util.CalculateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@@ -61,7 +60,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
@Autowired
private EpsBusinessDeployMapper epsBusinessDeployMapper;
@Autowired
private IRmMonitorConfigService rmMonitorConfigService;
private RmMonitorConfigMapper rmMonitorConfigMapper;
private static final String DATE_TIME_FORMATTER = "yyyy-MM-dd HH:mm:ss";
@@ -965,32 +964,27 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
*/
@Override
public List<InitialSwitchInfoDetails> geSwitchListByMonitorView(InitialSwitchInfoDetails initialSwitchInfoDetails) {
// 查询概览配置内容
RmMonitorConfig rmMonitorConfig = rmMonitorConfigService.selectRmMonitorConfigById(initialSwitchInfoDetails.getMonitorId());
if(rmMonitorConfig != null){
// 拿到选中的交换机
String resources = rmMonitorConfig.getDeployDevice();
String clientIds = Arrays.stream(resources.split(","))
.map(msg -> msg.split(";"))
.filter(resource -> resource.length >= 3)
.map(resource -> resource[1])
.collect(Collectors.joining(","));
String interfaceNames = Arrays.stream(resources.split(","))
.map(msg -> msg.split(";"))
.filter(resource -> resource.length >= 3)
.map(resource -> resource[2])
.collect(Collectors.joining(","));
// 查询流量信息
initialSwitchInfoDetails.setClientIds(clientIds);
initialSwitchInfoDetails.setInterfaceNames(interfaceNames);
PageDomain pageDomain = new PageDomain();
pageDomain.setPageNum(initialSwitchInfoDetails.getPageNum());
pageDomain.setPageSize(initialSwitchInfoDetails.getPageSize());
startPage(pageDomain);
List<InitialSwitchInfoDetails> list = initialSwitchInfoDetailsMapper.geSwitchListByMonitorView(initialSwitchInfoDetails);
return list;
}
return new ArrayList<>();
// 拿到选中的交换机
String resources = initialSwitchInfoDetails.getClientIds();
String clientIds = Arrays.stream(resources.split(","))
.map(msg -> msg.split(";"))
.filter(resource -> resource.length >= 3)
.map(resource -> resource[1])
.collect(Collectors.joining(","));
String interfaceNames = Arrays.stream(resources.split(","))
.map(msg -> msg.split(";"))
.filter(resource -> resource.length >= 3)
.map(resource -> resource[2])
.collect(Collectors.joining(","));
// 查询流量信息
initialSwitchInfoDetails.setClientIds(clientIds);
initialSwitchInfoDetails.setInterfaceNames(interfaceNames);
PageDomain pageDomain = new PageDomain();
pageDomain.setPageNum(initialSwitchInfoDetails.getPageNum());
pageDomain.setPageSize(initialSwitchInfoDetails.getPageSize());
startPage(pageDomain);
List<InitialSwitchInfoDetails> list = initialSwitchInfoDetailsMapper.geSwitchListByMonitorView(initialSwitchInfoDetails);
return list;
}
/**
@@ -8,15 +8,13 @@ import com.ruoyi.system.domain.RmMonitorConfigDetails;
import com.ruoyi.system.mapper.RmMonitorConfigDetailsMapper;
import com.ruoyi.system.mapper.RmMonitorConfigMapper;
import com.ruoyi.system.service.IRmMonitorConfigDetailsService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.function.Function;
/**
@@ -113,14 +111,41 @@ public class RmMonitorConfigDetailsServiceImpl implements IRmMonitorConfigDetail
* @return
*/
@Override
public Map<String, Object> getTrafficByMonitorView(RmMonitorConfigDetails queryParam) {
public List<Map<String, Object>> getTrafficByMonitorView(RmMonitorConfigDetails queryParam) {
List<Map<String, Object>> resultMapList = new ArrayList<>();
if(queryParam.getMonitorId() != null){
// 根据id查询配置信息
RmMonitorConfig rmMonitorConfig = rmMonitorConfigMapper.selectRmMonitorConfigById(queryParam.getMonitorId());
Map<String, Object> map = processViewData(queryParam);
map.put("rmMonitorConfig", rmMonitorConfig);
resultMapList.add(map);
}else{
// 查询所有配置
List<RmMonitorConfig> rmMonitorConfigs = rmMonitorConfigMapper.selectRmMonitorConfigList(new RmMonitorConfig());
if (rmMonitorConfigs != null && !rmMonitorConfigs.isEmpty()) {
for (RmMonitorConfig rmMonitorConfig : rmMonitorConfigs) {
RmMonitorConfigDetails rmMonitorConfigDetails = new RmMonitorConfigDetails();
BeanUtils.copyProperties(queryParam, rmMonitorConfigDetails);
rmMonitorConfigDetails.setMonitorId(rmMonitorConfig.getId());
Map<String, Object> map = processViewData(rmMonitorConfigDetails);
map.put("rmMonitorConfig", rmMonitorConfig);
resultMapList.add(map);
}
}
}
return resultMapList;
}
public Map<String, Object> processViewData(RmMonitorConfigDetails queryParam){
// 查询概览配置内容
RmMonitorConfig rmMonitorConfig = rmMonitorConfigMapper.selectRmMonitorConfigById(queryParam.getMonitorId());
if(rmMonitorConfig != null){
// 拿到开始时间
String startTime = rmMonitorConfig.getMonitorStartTime();
queryParam.setStartTime(startTime);
if(queryParam.getEndTime() == null){
queryParam.setEndTime(DateUtils.dateTimeNow("yyyy-MM-dd HH:mm:ss"));
}
List<RmMonitorConfigDetails> list = rmMonitorConfigDetailsMapper.selectRmMonitorConfigDetailsList(queryParam);
if(list == null){
list = new ArrayList<>();
@@ -141,6 +166,10 @@ public class RmMonitorConfigDetailsServiceImpl implements IRmMonitorConfigDetail
info != null && info.getInSpeed() != null ?
info.getInSpeed().divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("deployDevice", info ->
info != null && info.getDeployDevice() != null ?
info.getDeployDevice() :
null);
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsDataAutoPadding(
list, RmMonitorConfigDetails::getCreateTime, extractors, queryParam.getStartTime(), queryParam.getEndTime()
);
@@ -150,6 +179,11 @@ public class RmMonitorConfigDetailsServiceImpl implements IRmMonitorConfigDetail
e.printStackTrace();
}
}
return null;
return new HashMap<>();
}
@Override
public int batchInsertRmMonitorConfigDetails(List<RmMonitorConfigDetails> batchInsertList) {
return rmMonitorConfigDetailsMapper.batchInsertRmMonitorConfigDetails(batchInsertList);
}
}
@@ -1,12 +1,22 @@
package com.ruoyi.system.service.impl;
import java.util.List;
import com.ruoyi.common.core.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.mapper.RmMonitorConfigDetailsMapper;
import com.ruoyi.system.mapper.RmMonitorConfigMapper;
import com.ruoyi.system.domain.RmMonitorConfig;
import com.ruoyi.system.mapper.RmResourceRegistrationMapper;
import com.ruoyi.system.service.EpsInitialTrafficDataService;
import com.ruoyi.system.service.IInitialSwitchInfoDetailsService;
import com.ruoyi.system.service.IRmMonitorConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 监控配置Service业务层处理
@@ -15,10 +25,22 @@ import com.ruoyi.system.service.IRmMonitorConfigService;
* @date 2025-11-12
*/
@Service
@Slf4j
public class RmMonitorConfigServiceImpl implements IRmMonitorConfigService
{
@Autowired
private RmMonitorConfigMapper rmMonitorConfigMapper;
@Autowired
private RmMonitorConfigDetailsMapper rmMonitorConfigDetailsMapper;
@Autowired
private EpsInitialTrafficDataService epsInitialTrafficDataService;
@Autowired
private IInitialSwitchInfoDetailsService initialSwitchInfoDetailsService;
@Autowired
private RmResourceRegistrationMapper rmResourceRegistrationMapper;
@Autowired
@Lazy
private IRmMonitorConfigService self;
/**
* 查询监控配置
@@ -29,7 +51,8 @@ public class RmMonitorConfigServiceImpl implements IRmMonitorConfigService
@Override
public RmMonitorConfig selectRmMonitorConfigById(Long id)
{
return rmMonitorConfigMapper.selectRmMonitorConfigById(id);
RmMonitorConfig rmMonitorConfig = rmMonitorConfigMapper.selectRmMonitorConfigById(id);
return rmMonitorConfig;
}
/**
@@ -41,7 +64,8 @@ public class RmMonitorConfigServiceImpl implements IRmMonitorConfigService
@Override
public List<RmMonitorConfig> selectRmMonitorConfigList(RmMonitorConfig rmMonitorConfig)
{
return rmMonitorConfigMapper.selectRmMonitorConfigList(rmMonitorConfig);
List<RmMonitorConfig> list = rmMonitorConfigMapper.selectRmMonitorConfigList(rmMonitorConfig);
return list;
}
/**
@@ -54,7 +78,21 @@ public class RmMonitorConfigServiceImpl implements IRmMonitorConfigService
public int insertRmMonitorConfig(RmMonitorConfig rmMonitorConfig)
{
rmMonitorConfig.setCreateTime(DateUtils.getNowDate());
return rmMonitorConfigMapper.insertRmMonitorConfig(rmMonitorConfig);
rmMonitorConfigMapper.insertRmMonitorConfig(rmMonitorConfig);
// 异步触发流量汇总
self.asyncAfterInsert(rmMonitorConfig.getId());
return 1;
}
@Async
@Override
public void asyncAfterInsert(Long monitorConfigId) {
try {
log.info("开始异步处理监控配置 {} 的流量汇总", monitorConfigId);
sumTrafficMyMonitorConfig(monitorConfigId);
log.info("监控配置 {} 流量汇总完成", monitorConfigId);
} catch (Exception e) {
log.error("监控配置 {} 流量汇总异常", monitorConfigId, e);
}
}
/**
@@ -79,7 +117,10 @@ public class RmMonitorConfigServiceImpl implements IRmMonitorConfigService
@Override
public int deleteRmMonitorConfigByIds(Long[] ids)
{
return rmMonitorConfigMapper.deleteRmMonitorConfigByIds(ids);
int configRows = rmMonitorConfigMapper.deleteRmMonitorConfigByIds(ids);
// 删除详情
rmMonitorConfigDetailsMapper.deleteRmMonitorConfigDetailsByMonitorIds(ids);
return configRows;
}
/**
@@ -93,4 +134,106 @@ public class RmMonitorConfigServiceImpl implements IRmMonitorConfigService
{
return rmMonitorConfigMapper.deleteRmMonitorConfigById(id);
}
/**
* 配置好的数据求和
*/
@Override
public void sumTrafficMyMonitorConfig(Long id) {
List<RmMonitorConfig> rmMonitorConfigList = new ArrayList<>();
if(id != null){
RmMonitorConfig rmMonitorConfig = rmMonitorConfigMapper.selectRmMonitorConfigById(id);
rmMonitorConfigList.add(rmMonitorConfig);
}else{
// 查询所有配置
rmMonitorConfigList = rmMonitorConfigMapper.selectRmMonitorConfigList(new RmMonitorConfig());
}
if (rmMonitorConfigList == null || rmMonitorConfigList.isEmpty()) {
return;
}
for (RmMonitorConfig rmMonitorConfig : rmMonitorConfigList) {
// 判断资源类型
if("1".equals(rmMonitorConfig.getResourceType()) || "3".equals(rmMonitorConfig.getResourceType())){
if("3".equals(rmMonitorConfig.getResourceType())){
if(rmMonitorConfig.getBusinessName() == null){
log.warn("不存在业务");
continue;
}
// 根据业务代码查询服务器clientId
RmResourceRegistration queryRegist = new RmResourceRegistration();
queryRegist.setBusinessName(rmMonitorConfig.getBusinessName());
List<RmResourceRegistration> registrationList = rmResourceRegistrationMapper.getRegistrationTableInfoList(queryRegist);
StringBuilder clientIds = new StringBuilder();
if (registrationList != null && !registrationList.isEmpty()) {
for (RmResourceRegistration registration : registrationList) {
if (registration.getClientId() != null) {
if (clientIds.length() > 0) {
clientIds.append("\n");
}
clientIds.append(registration.getClientId());
}
}
}
rmMonitorConfig.setDeployDevice(clientIds.toString());
}
List<EpsInitialTrafficData> serverTrafficList = epsInitialTrafficDataService.getServerTrafficByMonitorView(rmMonitorConfig);
RmMonitorConfigDetails configDetailsQuery = new RmMonitorConfigDetails();
configDetailsQuery.setMonitorId(rmMonitorConfig.getId());
// 查询该数据是否存在
List<RmMonitorConfigDetails> exitsList = rmMonitorConfigDetailsMapper.selectRmMonitorConfigDetailsList(configDetailsQuery);
// 将已存在记录的时间转换为Set便于快速查找
Set<Date> existingTimeSet = exitsList.stream()
.map(RmMonitorConfigDetails::getCreateTime)
.collect(Collectors.toSet());
// 批量准备插入数据
List<RmMonitorConfigDetails> batchInsertList = new ArrayList<>();
// 计算结果落入临时表
for (EpsInitialTrafficData epsInitialTrafficData : serverTrafficList) {
// 使用Set快速判断是否存在,替代数据库查询
if (!existingTimeSet.contains(epsInitialTrafficData.getCreateTime())) {
RmMonitorConfigDetails configDetails = new RmMonitorConfigDetails();
configDetails.setMonitorId(rmMonitorConfig.getId());
configDetails.setCreateTime(epsInitialTrafficData.getCreateTime());
configDetails.setInSpeed(new BigDecimal(epsInitialTrafficData.getInSpeed() == null ? "0" : epsInitialTrafficData.getInSpeed()));
configDetails.setOutSpeed(new BigDecimal(epsInitialTrafficData.getOutSpeed() == null ? "0" : epsInitialTrafficData.getOutSpeed()));
configDetails.setDeployDevice(rmMonitorConfig.getDeployDevice());
batchInsertList.add(configDetails);
}
}
// 批量插入
if(!batchInsertList.isEmpty()){
rmMonitorConfigDetailsMapper.batchInsertRmMonitorConfigDetails(batchInsertList);
}
}else{
List<InitialSwitchInfoDetails> switchInfoDetailsList = initialSwitchInfoDetailsService.getMonitorViewDetails(rmMonitorConfig);
RmMonitorConfigDetails configDetailsQuery = new RmMonitorConfigDetails();
configDetailsQuery.setMonitorId(rmMonitorConfig.getId());
// 查询该数据是否存在
List<RmMonitorConfigDetails> exitsList = rmMonitorConfigDetailsMapper.selectRmMonitorConfigDetailsList(configDetailsQuery);
// 将已存在记录的时间转换为Set便于快速查找
Set<Date> existingTimeSet = exitsList.stream()
.map(RmMonitorConfigDetails::getCreateTime)
.collect(Collectors.toSet());
// 批量准备插入数据
List<RmMonitorConfigDetails> batchInsertList = new ArrayList<>();
for (InitialSwitchInfoDetails initialSwitchInfoDetails : switchInfoDetailsList) {
// 使用Set快速判断是否存在,替代数据库查询
if (!existingTimeSet.contains(initialSwitchInfoDetails.getCreateTime())) {
RmMonitorConfigDetails configDetails = new RmMonitorConfigDetails();
configDetails.setMonitorId(rmMonitorConfig.getId());
configDetails.setCreateTime(initialSwitchInfoDetails.getCreateTime());
configDetails.setInSpeed(initialSwitchInfoDetails.getInSpeed());
configDetails.setOutSpeed(initialSwitchInfoDetails.getOutSpeed());
configDetails.setDeployDevice(rmMonitorConfig.getDeployDevice());
batchInsertList.add(configDetails);
}
// 批量插入
if(!batchInsertList.isEmpty()){
rmMonitorConfigDetailsMapper.batchInsertRmMonitorConfigDetails(batchInsertList);
}
}
}
}
}
}
@@ -176,7 +176,7 @@ public class RmSwitchManagementServiceImpl implements IRmSwitchManagementService
interfaceName.getId().toString(),
clientId,
interfaceName.getInterfaceName(),
switchName
switchName, switchManagement.getId().toString()
);
interfaceName.setValue(valueStr);
interfaceName.setLabel(interfaceName.getInterfaceName());
@@ -94,4 +94,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<delete id="deleteRmMonitorConfigDetailsByMonitorIds" parameterType="Long">
delete from rm_monitor_config_details where monitor_id in
<foreach item="monitorId" collection="array" open="(" separator="," close=")">
#{monitorId}
</foreach>
</delete>
<insert id="batchInsertRmMonitorConfigDetails" parameterType="java.util.List">
insert IGNORE into rm_monitor_config_details
(monitor_id, deploy_device, in_bytes, out_bytes, in_speed, out_speed, create_by, update_by, create_time, update_time)
values
<foreach collection="list" item="item" separator=",">
(
#{item.monitorId},
#{item.deployDevice},
#{item.inBytes},
#{item.outBytes},
#{item.inSpeed},
#{item.outSpeed},
#{item.createBy},
#{item.updateBy},
#{item.createTime},
#{item.updateTime}
)
</foreach>
</insert>
</mapper>