diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/TableScheduleConfig.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/TableScheduleConfig.java index fb44059..81db79e 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/TableScheduleConfig.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/TableScheduleConfig.java @@ -89,8 +89,10 @@ public class TableScheduleConfig { .thenRun(() -> calculateServerMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1024")) .thenRun(() -> calculateSwitchMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1000")) .thenRun(() -> calculateSwitchMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1024")) - .thenRun(() -> calculateServerAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime)) - .thenRun(() -> calculateSwitchAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime)) + .thenRun(() -> calculateServerAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1000")) + .thenRun(() -> calculateServerAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1024")) + .thenRun(() -> calculateSwitchAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1000")) + .thenRun(() -> calculateSwitchAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1024")) .exceptionally(e -> { log.error("月度带宽计算链执行异常", e); // 仅保留最终异常捕获 return null; @@ -145,7 +147,7 @@ public class TableScheduleConfig { /** * 计算服务器月平均95带宽值 */ - private void calculateServerAvgMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime) { + private void calculateServerAvgMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime, String calculationMode) { log.info("开始计算服务器月平均95带宽值..."); try { EpsNodeBandwidth epsNodeBandwidth = new EpsNodeBandwidth(); @@ -154,7 +156,7 @@ public class TableScheduleConfig { List snList = allInterfaceNameService.getAllDeviceSn(new AllInterfaceName()); for (AllInterfaceName allInterfaceName : snList) { - processServerAvgBandwidth(epsNodeBandwidth, allInterfaceName); + processServerAvgBandwidth(epsNodeBandwidth, allInterfaceName, calculationMode); } log.info("服务器月平均95带宽值计算完成"); } catch (Exception e) { @@ -165,7 +167,7 @@ public class TableScheduleConfig { /** * 处理单个服务器的平均带宽计算 */ - private void processServerAvgBandwidth(EpsNodeBandwidth epsNodeBandwidth, AllInterfaceName allInterfaceName) { + private void processServerAvgBandwidth(EpsNodeBandwidth epsNodeBandwidth, AllInterfaceName allInterfaceName, String calculationMode) { final String deviceSn = allInterfaceName.getDeviceSn(); try { @@ -216,6 +218,7 @@ public class TableScheduleConfig { // 创建业务带宽对象 EpsNodeBandwidth bandwidthWithBiz = new EpsNodeBandwidth(); bandwidthWithBiz.setHardwareSn(deviceSn); + bandwidthWithBiz.setCalculationMode(calculationMode); bandwidthWithBiz.setNodeName(serverConfig.getNodeName()); bandwidthWithBiz.setStartTime(epsNodeBandwidth.getStartTime()); bandwidthWithBiz.setEndTime(epsNodeBandwidth.getEndTime()); @@ -244,6 +247,7 @@ public class TableScheduleConfig { // 5. 处理正常情况(无业务变更或无需处理变更) EpsNodeBandwidth normalBandwidth = new EpsNodeBandwidth(); normalBandwidth.setHardwareSn(deviceSn); + normalBandwidth.setCalculationMode(calculationMode); normalBandwidth.setNodeName(serverConfig.getNodeName()); normalBandwidth.setStartTime(epsNodeBandwidth.getStartTime()); normalBandwidth.setEndTime(epsNodeBandwidth.getEndTime()); @@ -260,7 +264,7 @@ public class TableScheduleConfig { /** * 计算交换机月平均95带宽值 */ - private void calculateSwitchAvgMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime) { + private void calculateSwitchAvgMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime, String calculationMode) { log.info("开始计算交换机月平均95带宽值..."); try { EpsNodeBandwidth epsNodeBandwidth = new EpsNodeBandwidth(); @@ -269,7 +273,7 @@ public class TableScheduleConfig { List switchSnList = allInterfaceNameService.getAllSwitchSn(new AllInterfaceName()); for (AllInterfaceName switchSnMsg : switchSnList) { - processSwitchAvgBandwidth(epsNodeBandwidth, switchSnMsg); + processSwitchAvgBandwidth(epsNodeBandwidth, switchSnMsg, calculationMode); } log.info("交换机月平均95带宽值计算完成"); } catch (Exception e) { @@ -280,7 +284,7 @@ public class TableScheduleConfig { /** * 处理单个交换机的平均带宽计算 */ - private void processSwitchAvgBandwidth(EpsNodeBandwidth epsNodeBandwidth, AllInterfaceName switchSnMsg) { + private void processSwitchAvgBandwidth(EpsNodeBandwidth epsNodeBandwidth, AllInterfaceName switchSnMsg, String calculationMode) { final String switchSn = switchSnMsg.getSwitchSn(); try { @@ -346,6 +350,7 @@ public class TableScheduleConfig { // 创建业务带宽对象 EpsNodeBandwidth bandwidthWithBiz = new EpsNodeBandwidth(); bandwidthWithBiz.setSwitchSn(switchSn); + bandwidthWithBiz.setCalculationMode(calculationMode); bandwidthWithBiz.setInterfaceName(topology.getInterfaceName()); bandwidthWithBiz.setHardwareSn(serverSn); bandwidthWithBiz.setNodeName(topology.getServerName()); @@ -377,6 +382,7 @@ public class TableScheduleConfig { // 5. 处理普通情况(无变更记录) EpsNodeBandwidth normalBandwidth = new EpsNodeBandwidth(); normalBandwidth.setSwitchSn(switchSn); + normalBandwidth.setCalculationMode(calculationMode); normalBandwidth.setInterfaceName(topology.getInterfaceName()); normalBandwidth.setHardwareSn(topology.getServerSn()); normalBandwidth.setNodeName(topology.getServerName()); @@ -394,6 +400,7 @@ public class TableScheduleConfig { // 5. 处理机房出口情况 EpsNodeBandwidth normalBandwidth = new EpsNodeBandwidth(); normalBandwidth.setSwitchSn(switchSn); + normalBandwidth.setCalculationMode(calculationMode); normalBandwidth.setInterfaceName(topology.getInterfaceName()); normalBandwidth.setInterfaceLinkDeviceType(topology.getConnectedDeviceType()); normalBandwidth.setStartTime(epsNodeBandwidth.getStartTime()); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/ResourceMonitorController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/ResourceMonitorController.java new file mode 100644 index 0000000..aa4f23a --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/ResourceMonitorController.java @@ -0,0 +1,67 @@ +package com.ruoyi.system.controller; + +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; +import com.ruoyi.system.service.EpsInitialTrafficDataService; +import com.ruoyi.system.service.IRmResourceGroupService; +import com.ruoyi.system.service.IRmResourceRegistrationService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 资源监控API + * + * @author gyt + * @date 2025-08-25 + */ +@RestController +@RequestMapping("/resourceMonitor") +public class ResourceMonitorController extends BaseController +{ + @Autowired + private EpsInitialTrafficDataService epsInitialTrafficDataService; + @Autowired + private IRmResourceGroupService rmResourceGroupService; + @Autowired + private IRmResourceRegistrationService rmResourceRegistrationService; + + /** + * 获取资源分组列表 + * @return + */ + @GetMapping("resourceGroupList") + public AjaxResult resourceGroupList(){ + RmResourceGroup rmResourceGroup = new RmResourceGroup(); + return success(rmResourceGroupService.selectRmResourceGroupList(rmResourceGroup)); + } + + /** + * 服务器整体发送带宽利用率 + * @return + */ + @GetMapping("trafficRateByServer") + public AjaxResult trafficRateByServer(){ + return success(epsInitialTrafficDataService.trafficRateByServer()); + } + + /** + * 获取资源列表 + * @return + */ + @PostMapping("getRegisterListByGroupId") + public TableDataInfo getRegisterListByGroupId(@RequestBody RmResourceGroup rmResourceGroup){ + // 拿到注册信息 + PageDomain pageDomain = new PageDomain(); + pageDomain.setPageNum(rmResourceGroup.getPageNum()); + pageDomain.setPageSize(rmResourceGroup.getPageSize()); + startPage(pageDomain); + List list = rmResourceGroupService.getRegisterList(rmResourceGroup); + return getDataTable(list); + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsNodeBandwidthServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsNodeBandwidthServiceImpl.java index c238dec..b32fa95 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsNodeBandwidthServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsNodeBandwidthServiceImpl.java @@ -329,6 +329,24 @@ public class EpsNodeBandwidthServiceImpl implements IEpsNodeBandwidthService )); mapList.add(nodeData); }); + if("2".equals(epsNodeBandwidth.getResourceType())){ + // 按interfaceName 升序(处理 null 值) + mapList.sort((map1, map2) -> { + // 按 interfaceName 升序(处理 null 值) + String interfaceName1 = (String) map1.get("interfaceName"); + String interfaceName2 = (String) map2.get("interfaceName"); + + if (interfaceName1 == null && interfaceName2 == null) { + return 0; // 两者都为 null,视为相等 + } else if (interfaceName1 == null) { + return -1; // null 排在前面(升序) + } else if (interfaceName2 == null) { + return 1; // null 排在前面(升序) + } else { + return interfaceName1.compareTo(interfaceName2); // 正常比较 + } + }); + } return mapList; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java index 7909b5a..4bf000c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java @@ -457,6 +457,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe } } if("2".equals(rmEpsTopologyManagement.getConnectedDeviceType())){ + queryParam.setServerSn(null); calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/EpsNodeBandwidthMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/EpsNodeBandwidthMapper.xml index cdf9fee..4146927 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/EpsNodeBandwidthMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/EpsNodeBandwidthMapper.xml @@ -248,6 +248,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and business_id = #{businessId} + + and calculation_mode = #{calculationMode} + diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialBandwidthTrafficController.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialBandwidthTrafficController.java index 7f8ffc4..328c541 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialBandwidthTrafficController.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialBandwidthTrafficController.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; /** * 初始带宽流量Controller @@ -94,4 +95,40 @@ public class InitialBandwidthTrafficController extends BaseController { return toAjax(initialBandwidthTrafficService.deleteInitialBandwidthTrafficByIds(ids)); } + + + /** + * 网络接口基础信息 + * @param initialBandwidthTraffic + * @return + */ + @RequiresPermissions("rocketmq:traffic:list") + @PostMapping("/netInterfaceDetailsMsg") + public AjaxResult netInterfaceDetailsMsg(@RequestBody InitialBandwidthTraffic initialBandwidthTraffic) { + InitialBandwidthTraffic netInterfaceDetailsMsg = initialBandwidthTrafficService.getNetInterfaceDetailsMsg(initialBandwidthTraffic); + return success(netInterfaceDetailsMsg); + } + + /** + * 查询eth0流量信息并封装为多折线ECharts图表数据 + */ + @RequiresPermissions("rocketmq:traffic:list") + @PostMapping("/netInterfaceTrafficEcharts") + public AjaxResult netInterfaceTrafficEcharts(@RequestBody InitialBandwidthTraffic initialBandwidthTraffic) { + Map echartsData = initialBandwidthTrafficService.netInterfaceTrafficEcharts(initialBandwidthTraffic); + return success(echartsData); + } + + /** + * eth0丢包数 + * @param initialBandwidthTraffic + * @return + */ + @RequiresPermissions("rocketmq:traffic:list") + @PostMapping("/netInterfaceDroppedEcharts") + public AjaxResult netInterfaceDroppedEcharts(@RequestBody InitialBandwidthTraffic initialBandwidthTraffic) { + Map echartsData = initialBandwidthTrafficService.netInterfaceDroppedEcharts(initialBandwidthTraffic); + return success(echartsData); + } + } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialCpuInfoController.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialCpuInfoController.java index dd0f25e..9e0cfc9 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialCpuInfoController.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialCpuInfoController.java @@ -1,6 +1,5 @@ package com.ruoyi.rocketmq.controller; -import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -15,8 +14,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; -import java.util.*; -import java.util.stream.Collectors; +import java.util.List; +import java.util.Map; /** * CPU监控信息Controller @@ -108,40 +107,16 @@ public class InitialCpuInfoController extends BaseController @RequiresPermissions("rocketmq:cpuInfo:list") @PostMapping("/cpuLoadEcharts") public AjaxResult cpuLoadEcharts(@RequestBody InitialCpuInfo initialCpuInfo) { - // 1. 查询原始CPU监控数据并按时间排序 - List list = initialCpuInfoService.selectInitialCpuInfoList(initialCpuInfo) - .stream() - .sorted(Comparator.comparing(InitialCpuInfo::getCreateTime)) - .collect(Collectors.toList()); - - // 2. 封装为ECharts图表数据格式 - Map echartsData = new HashMap<>(); - - // 确保X轴和Y轴数据顺序一致的处理 - List xAxisData = new ArrayList<>(); - List load1Data = new ArrayList<>(); - List load5Data = new ArrayList<>(); - List load15Data = new ArrayList<>(); - List utiData = new ArrayList<>(); - - for (InitialCpuInfo info : list) { - xAxisData.add(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", info.getCreateTime())); - load1Data.add(info.getAvg1()); - load5Data.add(info.getAvg5()); - load15Data.add(info.getAvg15()); - utiData.add(info.getUti()); - } - - // 构建Y轴数据 - Map yData = new HashMap<>(); - yData.put("load1Data", load1Data); - yData.put("load5Data", load5Data); - yData.put("load15Data", load15Data); - yData.put("utiData", utiData); - - echartsData.put("xData", xAxisData); - echartsData.put("yData", yData); - + Map echartsData = initialCpuInfoService.cupLoadEcharts(initialCpuInfo); + return success(echartsData); + } + /** + * 查询CPU监控信息列表并封装为多折线ECharts图表数据 + */ + @RequiresPermissions("rocketmq:cpuInfo:list") + @PostMapping("/cpuTimeEcharts") + public AjaxResult cpuTimeEcharts(@RequestBody InitialCpuInfo initialCpuInfo) { + Map echartsData = initialCpuInfoService.cpuTimeEcharts(initialCpuInfo); return success(echartsData); } } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialMemoryInfoController.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialMemoryInfoController.java index f1a75e8..8bae1ed 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialMemoryInfoController.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialMemoryInfoController.java @@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; /** * 内存监控信息Controller @@ -99,4 +100,55 @@ public class InitialMemoryInfoController extends BaseController { return toAjax(initialMemoryInfoService.deleteInitialMemoryInfoByIds(ids)); } + + /** + * 查询交换空间可用量监控数据 + */ + @RequiresPermissions("rocketmq:systemInfo:list") + @PostMapping("/swapSizeFreeEcharts") + public AjaxResult swapSizeFreeEcharts(@RequestBody InitialMemoryInfo initialMemoryInfo) { + Map echartsData = initialMemoryInfoService.swapSizeFreeEcharts(initialMemoryInfo); + return AjaxResult.success(echartsData); + } + + /** + * 查询内存利用率监控数据 + */ + @RequiresPermissions("rocketmq:systemInfo:list") + @PostMapping("/untilzationEcharts") + public AjaxResult untilzationEcharts(@RequestBody InitialMemoryInfo initialMemoryInfo) { + Map echartsData = initialMemoryInfoService.untilzationEcharts(initialMemoryInfo); + return AjaxResult.success(echartsData); + } + + /** + * 查询内存可用量监控数据(KB) + */ + @RequiresPermissions("rocketmq:systemInfo:list") + @PostMapping("/availableMemoryEcharts") + public AjaxResult availableMemoryEcharts(@RequestBody InitialMemoryInfo initialMemoryInfo) { + Map echartsData = initialMemoryInfoService.availableMemoryEcharts(initialMemoryInfo); + return AjaxResult.success(echartsData); + } + + /** + * 查询交换空间百分比监控数据 + */ + @RequiresPermissions("rocketmq:systemInfo:list") + @PostMapping("/swapSizePercentEcharts") + public AjaxResult swapSizePercentEcharts(@RequestBody InitialMemoryInfo initialMemoryInfo) { + Map echartsData = initialMemoryInfoService.swapSizePercentEcharts(initialMemoryInfo); + return AjaxResult.success(echartsData); + } + + /** + * 查询可用内存百分比监控数据 + */ + @RequiresPermissions("rocketmq:systemInfo:list") + @PostMapping("/percentEcharts") + public AjaxResult percentEcharts(@RequestBody InitialMemoryInfo initialMemoryInfo) { + Map echartsData = initialMemoryInfoService.percentEcharts(initialMemoryInfo); + return AjaxResult.success(echartsData); + } + } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialMountPointInfoController.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialMountPointInfoController.java index 9dd0101..c48360b 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialMountPointInfoController.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialMountPointInfoController.java @@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; /** * 挂载点监控信息Controller @@ -99,4 +100,35 @@ public class InitialMountPointInfoController extends BaseController { return toAjax(initialMountPointInfoService.deleteInitialMountPointInfoByIds(ids)); } + /** + * 获取挂载点监控信息详细信息 + */ + @RequiresPermissions("rocketmq:mountPointInfo:query") + @PostMapping(value = "/pointDetailsMsg") + public AjaxResult pointDetailsMsg(@RequestBody InitialMountPointInfo initialMountPointInfo) + { + InitialMountPointInfo mountPointInfo = initialMountPointInfoService.pointDetailsMsg(initialMountPointInfo); + return success(mountPointInfo); + } + /** + * 获取挂载文件系统/的空间图形 + */ + @RequiresPermissions("rocketmq:mountPointInfo:query") + @PostMapping(value = "/spaceEcharts") + public AjaxResult spaceEcharts(@RequestBody InitialMountPointInfo initialMountPointInfo) + { + Map echartsData = initialMountPointInfoService.spaceEcharts(initialMountPointInfo); + return success(echartsData); + } + /** + * 获取挂载文件系统/的空间利用率图形 + */ + @RequiresPermissions("rocketmq:mountPointInfo:query") + @PostMapping(value = "/spaceRateEcharts") + public AjaxResult spaceRateEcharts(@RequestBody InitialMountPointInfo initialMountPointInfo) + { + Map echartsData = initialMountPointInfoService.spaceRateEcharts(initialMountPointInfo); + return success(echartsData); + } + } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialSystemInfoController.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialSystemInfoController.java index 116011f..04c2b0a 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialSystemInfoController.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/controller/InitialSystemInfoController.java @@ -9,12 +9,14 @@ import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.rocketmq.domain.InitialSystemInfo; +import com.ruoyi.rocketmq.domain.vo.SystemMsgVo; import com.ruoyi.rocketmq.service.IInitialSystemInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; /** * 系统监控信息Controller @@ -99,4 +101,39 @@ public class InitialSystemInfoController extends BaseController { return toAjax(initialSystemInfoService.deleteInitialSystemInfoByIds(ids)); } + /** + * 查询系统进程监控信息列表并封装为多折线ECharts图表数据 + * @param initialSystemInfo + * @return + */ + @RequiresPermissions("rocketmq:systemInfo:list") + @PostMapping("/systemProcessEcharts") + public AjaxResult systemProcessEcharts(@RequestBody InitialSystemInfo initialSystemInfo) { + Map echartsData = initialSystemInfoService.systemProcessEcharts(initialSystemInfo); + return success(echartsData); + } + /** + * 查询系统登陆用户数(个)监控信息列表并封装为多折线ECharts图表数据 + * @param initialSystemInfo + * @return + */ + @RequiresPermissions("rocketmq:systemInfo:list") + @PostMapping("/systemUserNumEcharts") + public AjaxResult systemUserNumEcharts(@RequestBody InitialSystemInfo initialSystemInfo) { + Map echartsData = initialSystemInfoService.systemUserNumEcharts(initialSystemInfo); + return success(echartsData); + } + + /** + * 系统基础信息 + * @param initialSystemInfo + * @return + */ + @RequiresPermissions("rocketmq:systemInfo:list") + @PostMapping("/systemDetailsMsg") + public AjaxResult systemDetailsMsg(@RequestBody InitialSystemInfo initialSystemInfo) { + SystemMsgVo systemDetailsMsg = initialSystemInfoService.getSystemDetailsMsg(initialSystemInfo); + return success(systemDetailsMsg); + } + } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialBandwidthTraffic.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialBandwidthTraffic.java index b40d281..f185eb8 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialBandwidthTraffic.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/InitialBandwidthTraffic.java @@ -68,5 +68,9 @@ public class InitialBandwidthTraffic extends BaseEntity private String duplex; /** 协商速度 */ private String speed; + /** 开始时间 */ + private String startTime; + /** 结束时间 */ + private String endTime; } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/vo/SystemMsgVo.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/vo/SystemMsgVo.java new file mode 100644 index 0000000..a82d0b1 --- /dev/null +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/domain/vo/SystemMsgVo.java @@ -0,0 +1,30 @@ +package com.ruoyi.rocketmq.domain.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class SystemMsgVo { + + /** 总内存(GB) */ + private Long memoryTotal; + /** 操作系统 */ + private String os; + /** 操作系统架构 */ + private String arch; + /** 最大进程数 */ + private Long maxProc; + /** 硬盘总可用空间(GB) */ + private BigDecimal diskSizeTotal; + /** 系统启动时间(Unix时间戳) */ + private Long bootTime; + /** 系统描述(如Linux 5.4.0-80-generic) */ + private String uname; + /** 系统本地时间(如2023-08-15 14:30:00) */ + private String localTime; + /** 系统正常运行时间(秒) */ + private Long upTime; + /** cpu数量 */ + private Long num; +} diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialBandwidthTrafficMapper.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialBandwidthTrafficMapper.java index 12566b9..ad13b23 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialBandwidthTrafficMapper.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialBandwidthTrafficMapper.java @@ -71,4 +71,16 @@ public interface InitialBandwidthTrafficMapper * @param data 流量数据实体类 */ int batchInsert(InitialBandwidthTraffic data); + /** + * 网络接口基础信息 + * @param initialBandwidthTraffic + * @return + */ + InitialBandwidthTraffic getNetInterfaceDetailsMsg(InitialBandwidthTraffic initialBandwidthTraffic); + /** + * 查询eth0流量信息并封装为多折线ECharts图表数据 + * @param condition + * @return + */ + List getNetTrafficList(InitialBandwidthTraffic condition); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialCpuInfoMapper.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialCpuInfoMapper.java index b074ff7..ea5710f 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialCpuInfoMapper.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialCpuInfoMapper.java @@ -67,4 +67,6 @@ public interface InitialCpuInfoMapper * @return 结果 */ public int batchInsertInitialCpuInfo(@Param("list") List list); + + InitialCpuInfo getCpuInfoByClientId(String clientId); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialMemoryInfoMapper.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialMemoryInfoMapper.java index 2945de4..9168636 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialMemoryInfoMapper.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialMemoryInfoMapper.java @@ -68,4 +68,11 @@ public interface InitialMemoryInfoMapper * @return 结果 */ public int batchInsertInitialMemoryInfo(@Param("list") List list); + + /** + * 根据唯一id获取内存信息 + * @param clientId + * @return + */ + public InitialMemoryInfo getMemoryInfoByClientId(String clientId); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialMountPointInfoMapper.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialMountPointInfoMapper.java index f0b9ec3..ed3207d 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialMountPointInfoMapper.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialMountPointInfoMapper.java @@ -67,4 +67,11 @@ public interface InitialMountPointInfoMapper * @return 结果 */ public int batchInsertInitialMountPointInfo(@Param("list") List list); + + /** + * 挂载文件系统基础信息 + * @param clientId + * @return + */ + InitialMountPointInfo pointDetailsMsg(String clientId); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialSystemInfoMapper.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialSystemInfoMapper.java index 8e998a8..a60619f 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialSystemInfoMapper.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/mapper/InitialSystemInfoMapper.java @@ -1,6 +1,7 @@ package com.ruoyi.rocketmq.mapper; import com.ruoyi.rocketmq.domain.InitialSystemInfo; +import com.ruoyi.rocketmq.domain.vo.SystemMsgVo; import org.springframework.data.repository.query.Param; import java.util.List; @@ -67,4 +68,6 @@ public interface InitialSystemInfoMapper * @return 结果 */ int batchInsertInitialSystemInfo(@Param("list") List list); + + SystemMsgVo getSystemMsgByClientId(String clientId); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialBandwidthTrafficService.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialBandwidthTrafficService.java index 944146e..f41380a 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialBandwidthTrafficService.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialBandwidthTrafficService.java @@ -3,6 +3,7 @@ package com.ruoyi.rocketmq.service; import com.ruoyi.rocketmq.domain.InitialBandwidthTraffic; import java.util.List; +import java.util.Map; /** * 初始带宽流量Service接口 @@ -70,5 +71,24 @@ public interface IInitialBandwidthTrafficService * @param data 流量数据 */ void batchInsert(InitialBandwidthTraffic data); + /** + * 网络接口基础信息 + * @param initialBandwidthTraffic + * @return + */ + InitialBandwidthTraffic getNetInterfaceDetailsMsg(InitialBandwidthTraffic initialBandwidthTraffic); + /** + * 查询eth0流量信息并封装为多折线ECharts图表数据 + * @param initialBandwidthTraffic + * @return + */ + Map netInterfaceTrafficEcharts(InitialBandwidthTraffic initialBandwidthTraffic); + + /** + * 查询eth0流量信息丢包数并封装为折线ECharts图表数据 + * @param initialBandwidthTraffic + * @return + */ + Map netInterfaceDroppedEcharts(InitialBandwidthTraffic initialBandwidthTraffic); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialCpuInfoService.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialCpuInfoService.java index 09579fc..550c20b 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialCpuInfoService.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialCpuInfoService.java @@ -3,6 +3,7 @@ package com.ruoyi.rocketmq.service; import com.ruoyi.rocketmq.domain.InitialCpuInfo; import java.util.List; +import java.util.Map; /** * CPU监控信息Service接口 @@ -66,4 +67,8 @@ public interface IInitialCpuInfoService * @return 结果 */ public int batchInsertInitialCpuInfo(List list); + + Map cupLoadEcharts(InitialCpuInfo initialCpuInfo); + + Map cpuTimeEcharts(InitialCpuInfo initialCpuInfo); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialMemoryInfoService.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialMemoryInfoService.java index d021a58..5676732 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialMemoryInfoService.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialMemoryInfoService.java @@ -3,6 +3,7 @@ package com.ruoyi.rocketmq.service; import com.ruoyi.rocketmq.domain.InitialMemoryInfo; import java.util.List; +import java.util.Map; /** * 内存监控信息Service接口 @@ -66,4 +67,27 @@ public interface IInitialMemoryInfoService * @return 结果 */ public int batchInsertInitialMemoryInfo(List list); + + /** + * 内存信息echarts图 + * @param initialMemoryInfo + * @return + */ + Map swapSizeFreeEcharts(InitialMemoryInfo initialMemoryInfo); + /** + * 查询内存利用率监控数据 + */ + Map untilzationEcharts(InitialMemoryInfo initialMemoryInfo); + /** + * 查询内存可用量监控数据(KB) + */ + Map availableMemoryEcharts(InitialMemoryInfo initialMemoryInfo); + /** + * 查询交换空间百分比监控数据 + */ + Map swapSizePercentEcharts(InitialMemoryInfo initialMemoryInfo); + /** + * 查询可用内存百分比监控数据 + */ + Map percentEcharts(InitialMemoryInfo initialMemoryInfo); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialMountPointInfoService.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialMountPointInfoService.java index 1f91329..bc3533d 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialMountPointInfoService.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialMountPointInfoService.java @@ -4,6 +4,7 @@ import com.ruoyi.rocketmq.domain.InitialMountPointInfo; import org.springframework.data.repository.query.Param; import java.util.List; +import java.util.Map; /** * 挂载点监控信息Service接口 @@ -67,4 +68,19 @@ public interface IInitialMountPointInfoService * @return 结果 */ public int batchInsertInitialMountPointInfo(@Param("list") List list); + /** + * 获取挂载点监控信息详细信息 + */ + InitialMountPointInfo pointDetailsMsg(InitialMountPointInfo initialMountPointInfo); + /** + * 获取挂载点监控信息的空间图形 + */ + Map spaceEcharts(InitialMountPointInfo initialMountPointInfo); + + /** + * 获取挂载文件/的空间利用率 + * @param initialMountPointInfo + * @return + */ + Map spaceRateEcharts(InitialMountPointInfo initialMountPointInfo); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialSystemInfoService.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialSystemInfoService.java index 8c3fd93..de69790 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialSystemInfoService.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/IInitialSystemInfoService.java @@ -1,8 +1,10 @@ package com.ruoyi.rocketmq.service; import com.ruoyi.rocketmq.domain.InitialSystemInfo; +import com.ruoyi.rocketmq.domain.vo.SystemMsgVo; import java.util.List; +import java.util.Map; /** * 系统监控信息Service接口 @@ -67,4 +69,25 @@ public interface IInitialSystemInfoService * @return 结果 */ public int batchInsertInitialSystemInfo(List initialSystemInfo); + + /** + * 系统进程(个) + * @param initialSystemInfo + * @return + */ + Map systemProcessEcharts(InitialSystemInfo initialSystemInfo); + + /** + * 登录用户数(个) + * @param initialSystemInfo + * @return + */ + Map systemUserNumEcharts(InitialSystemInfo initialSystemInfo); + + /** + * 系统基础信息 + * @param initialSystemInfo + * @return + */ + SystemMsgVo getSystemDetailsMsg(InitialSystemInfo initialSystemInfo); } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialBandwidthTrafficServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialBandwidthTrafficServiceImpl.java index 664a507..4b11ff4 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialBandwidthTrafficServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialBandwidthTrafficServiceImpl.java @@ -4,6 +4,7 @@ import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.rocketmq.domain.InitialBandwidthTraffic; import com.ruoyi.rocketmq.mapper.InitialBandwidthTrafficMapper; import com.ruoyi.rocketmq.service.IInitialBandwidthTrafficService; +import com.ruoyi.rocketmq.utils.EchartsDataUtils; import com.ruoyi.rocketmq.utils.TableRouterUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -14,10 +15,8 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.time.ZoneId; -import java.util.Date; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -175,5 +174,81 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf } }); } + /** + * 网络接口基础信息 + * @param initialBandwidthTraffic + * @return + */ + @Override + public InitialBandwidthTraffic getNetInterfaceDetailsMsg(InitialBandwidthTraffic initialBandwidthTraffic) { + if (initialBandwidthTraffic.getCreateTime() == null) { + initialBandwidthTraffic.setCreateTime(DateUtils.getNowDate()); + } + LocalDateTime createTime = initialBandwidthTraffic.getCreateTime().toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + initialBandwidthTraffic.setTableName(TableRouterUtil.getTableName(createTime)); + InitialBandwidthTraffic detailsMsg = initialBandwidthTrafficMapper.getNetInterfaceDetailsMsg(initialBandwidthTraffic); + return detailsMsg; + } + + /** + * 分表查询需要的信息 + * @param initialBandwidthTraffic + * @return + */ + public List getListByTableName(InitialBandwidthTraffic initialBandwidthTraffic){ + // 获取涉及的表名 + Set tableNames = TableRouterUtil.getTableNamesBetween(initialBandwidthTraffic.getStartTime(), initialBandwidthTraffic.getEndTime()); + // 并行查询各表 + List list = tableNames.parallelStream() + .flatMap(tableName -> { + InitialBandwidthTraffic condition = new InitialBandwidthTraffic(); + condition.setTableName(tableName); + condition.setStartTime(initialBandwidthTraffic.getStartTime()); + condition.setEndTime(initialBandwidthTraffic.getEndTime()); + return initialBandwidthTrafficMapper.getNetTrafficList(condition).stream(); + }) + .collect(Collectors.toList()); + return list; + } + /** + * 查询eth0流量信息并封装为多折线ECharts图表数据 + * @param initialBandwidthTraffic + * @return + */ + @Override + public Map netInterfaceTrafficEcharts(InitialBandwidthTraffic initialBandwidthTraffic) { + // 流量信息 + List list = getListByTableName(initialBandwidthTraffic); + Map> extractors = new LinkedHashMap<>(); + extractors.put("inSpeedData", info -> safeConvertToKB(info.getInSpeed())); + extractors.put("outSpeedData", info -> safeConvertToKB(info.getOutSpeed())); + + return EchartsDataUtils.buildEchartsData(list, InitialBandwidthTraffic::getCreateTime, extractors); + } + // 安全转换方法(处理可能的NumberFormatException) + private Double safeConvertToKB(String byteValue) { + try { + return byteValue == null ? 0.0 : Double.parseDouble(byteValue) / 1024.0; + } catch (NumberFormatException e) { + return 0.0; // 或根据业务需求返回null/抛出异常 + } + } + /** + * 查询eth0流量信息丢包数并封装为折线ECharts图表数据 + * @param initialBandwidthTraffic + * @return + */ + @Override + public Map netInterfaceDroppedEcharts(InitialBandwidthTraffic initialBandwidthTraffic) { + // 流量信息 + List list = getListByTableName(initialBandwidthTraffic); + Map> extractors = new LinkedHashMap<>(); + extractors.put("inDroppedData", info -> info.getInDropped()); + extractors.put("outDroppedData", info -> info.getOutDropped()); + + return EchartsDataUtils.buildEchartsData(list, InitialBandwidthTraffic::getCreateTime, extractors); + } } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialCpuInfoServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialCpuInfoServiceImpl.java index 6c24fd5..0cd96ab 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialCpuInfoServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialCpuInfoServiceImpl.java @@ -4,13 +4,19 @@ import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.rocketmq.domain.InitialCpuInfo; import com.ruoyi.rocketmq.mapper.InitialCpuInfoMapper; import com.ruoyi.rocketmq.service.IInitialCpuInfoService; +import com.ruoyi.rocketmq.utils.EchartsDataUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.function.Function; + +import static com.ruoyi.rocketmq.utils.EchartsDataUtils.convertMicrosecondsToSeconds; /** * CPU监控信息Service业务层处理 @@ -115,4 +121,43 @@ public class InitialCpuInfoServiceImpl implements IInitialCpuInfoService throw new RuntimeException("批量保存失败",e); } } + + /** + * cpu负载 + * @param initialCpuInfo + * @return + */ + @Override + public Map cupLoadEcharts(InitialCpuInfo initialCpuInfo) { + // 查询原始CPU监控数据并按时间排序 + List list = initialCpuInfoMapper.selectInitialCpuInfoList(initialCpuInfo); + + Map> extractors = new LinkedHashMap<>(); + extractors.put("load1Data", InitialCpuInfo::getAvg1); + extractors.put("load5Data", InitialCpuInfo::getAvg5); + extractors.put("load15Data", InitialCpuInfo::getAvg15); + extractors.put("utiData", InitialCpuInfo::getUti); + + return EchartsDataUtils.buildEchartsData(list, InitialCpuInfo::getCreateTime, extractors); + } + /** + * cpu时间(s) + * @param initialCpuInfo + * @return + */ + @Override + public Map cpuTimeEcharts(InitialCpuInfo initialCpuInfo) { + List list = initialCpuInfoMapper.selectInitialCpuInfoList(initialCpuInfo); + + Map> extractors = new LinkedHashMap<>(); + extractors.put("normalData", info -> convertMicrosecondsToSeconds(info.getNormal())); + extractors.put("idleData", info -> convertMicrosecondsToSeconds(info.getIdle())); + extractors.put("iowaitData", InitialCpuInfo::getIowait); + extractors.put("systemData", info -> convertMicrosecondsToSeconds(info.getSystem())); + extractors.put("norespData", InitialCpuInfo::getNoresp); + extractors.put("userpData", info -> convertMicrosecondsToSeconds(info.getUser())); + + return EchartsDataUtils.buildEchartsData(list,InitialCpuInfo::getCreateTime, extractors); + } + } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialMemoryInfoServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialMemoryInfoServiceImpl.java index 2664938..dd46548 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialMemoryInfoServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialMemoryInfoServiceImpl.java @@ -4,13 +4,17 @@ import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.rocketmq.domain.InitialMemoryInfo; import com.ruoyi.rocketmq.mapper.InitialMemoryInfoMapper; import com.ruoyi.rocketmq.service.IInitialMemoryInfoService; +import com.ruoyi.rocketmq.utils.EchartsDataUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.function.Function; /** * 内存监控信息Service业务层处理 @@ -115,4 +119,68 @@ public class InitialMemoryInfoServiceImpl implements IInitialMemoryInfoService throw new RuntimeException("批量保存失败",e); } } + /** + * 交换卷/文件的可用空间(字节) + * @param initialMemoryInfo + * @return + */ + @Override + public Map swapSizeFreeEcharts(InitialMemoryInfo initialMemoryInfo) { + List list = initialMemoryInfoMapper.selectInitialMemoryInfoList(initialMemoryInfo); + Map> extractors = new LinkedHashMap<>(); + extractors.put("swapSizeFreeData", InitialMemoryInfo::getSwapSizeFree); + return EchartsDataUtils.buildEchartsData(list, InitialMemoryInfo::getCreateTime, extractors); + } + + /** + * 内存利用率 + * @param initialMemoryInfo + * @return + */ + @Override + public Map untilzationEcharts(InitialMemoryInfo initialMemoryInfo) { + List list = initialMemoryInfoMapper.selectInitialMemoryInfoList(initialMemoryInfo); + Map> extractors = new LinkedHashMap<>(); + extractors.put("untilzationData", InitialMemoryInfo::getUntilzation); + return EchartsDataUtils.buildEchartsData(list, InitialMemoryInfo::getCreateTime, extractors); + } + + /** + * 可用内存(KB) + * @param initialMemoryInfo + * @return + */ + @Override + public Map availableMemoryEcharts(InitialMemoryInfo initialMemoryInfo) { + List list = initialMemoryInfoMapper.selectInitialMemoryInfoList(initialMemoryInfo); + Map> extractors = new LinkedHashMap<>(); + extractors.put("availableData", info -> info.getAvailable() / 1024.0); + return EchartsDataUtils.buildEchartsData(list, InitialMemoryInfo::getCreateTime, extractors); + } + + /** + * 可用交换空间百分比(%) + * @param initialMemoryInfo + * @return + */ + @Override + public Map swapSizePercentEcharts(InitialMemoryInfo initialMemoryInfo) { + List list = initialMemoryInfoMapper.selectInitialMemoryInfoList(initialMemoryInfo); + Map> extractors = new LinkedHashMap<>(); + extractors.put("swapSizePercentData", InitialMemoryInfo::getSwapSizePercent); + return EchartsDataUtils.buildEchartsData(list, InitialMemoryInfo::getCreateTime, extractors); + } + + /** + * 可用内存百分比(%) + * @param initialMemoryInfo + * @return + */ + @Override + public Map percentEcharts(InitialMemoryInfo initialMemoryInfo) { + List list = initialMemoryInfoMapper.selectInitialMemoryInfoList(initialMemoryInfo); + Map> extractors = new LinkedHashMap<>(); + extractors.put("percentData", InitialMemoryInfo::getPercent); + return EchartsDataUtils.buildEchartsData(list, InitialMemoryInfo::getCreateTime, extractors); + } } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialMountPointInfoServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialMountPointInfoServiceImpl.java index 58d6348..3b81aba 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialMountPointInfoServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialMountPointInfoServiceImpl.java @@ -4,13 +4,17 @@ import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.rocketmq.domain.InitialMountPointInfo; import com.ruoyi.rocketmq.mapper.InitialMountPointInfoMapper; import com.ruoyi.rocketmq.service.IInitialMountPointInfoService; +import com.ruoyi.rocketmq.utils.EchartsDataUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.function.Function; /** * 挂载点监控信息Service业务层处理 @@ -114,4 +118,36 @@ public class InitialMountPointInfoServiceImpl implements IInitialMountPointInfoS throw new RuntimeException("批量保存失败",e); } } + + @Override + public InitialMountPointInfo pointDetailsMsg(InitialMountPointInfo initialMountPointInfo) { + return initialMountPointInfoMapper.pointDetailsMsg(initialMountPointInfo.getClientId()); + } + + /** + * 获取挂载点监控信息的空间图形 + * @param initialMountPointInfo + * @return + */ + @Override + public Map spaceEcharts(InitialMountPointInfo initialMountPointInfo) { + List list = initialMountPointInfoMapper.selectInitialMountPointInfoList(initialMountPointInfo); + Map> extractors = new LinkedHashMap<>(); + extractors.put("vfsFreeData", info -> info.getVfsFree() / 1024.0); + extractors.put("vfsTotalData", info -> info.getVfsTotal() / 1024.0); + return EchartsDataUtils.buildEchartsData(list,InitialMountPointInfo::getCreateTime, extractors); + } + + /** + * 获取挂载文件/的空间利用率 + * @param initialMountPointInfo + * @return + */ + @Override + public Map spaceRateEcharts(InitialMountPointInfo initialMountPointInfo) { + List list = initialMountPointInfoMapper.selectInitialMountPointInfoList(initialMountPointInfo); + Map> extractors = new LinkedHashMap<>(); + extractors.put("vfsUtilData", InitialMountPointInfo::getVfsUtil); + return EchartsDataUtils.buildEchartsData(list,InitialMountPointInfo::getCreateTime, extractors); + } } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSystemInfoServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSystemInfoServiceImpl.java index bedec4a..618336c 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSystemInfoServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSystemInfoServiceImpl.java @@ -1,16 +1,25 @@ package com.ruoyi.rocketmq.service.impl; import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.rocketmq.domain.InitialCpuInfo; +import com.ruoyi.rocketmq.domain.InitialMemoryInfo; import com.ruoyi.rocketmq.domain.InitialSystemInfo; +import com.ruoyi.rocketmq.domain.vo.SystemMsgVo; +import com.ruoyi.rocketmq.mapper.InitialCpuInfoMapper; +import com.ruoyi.rocketmq.mapper.InitialMemoryInfoMapper; import com.ruoyi.rocketmq.mapper.InitialSystemInfoMapper; import com.ruoyi.rocketmq.service.IInitialSystemInfoService; +import com.ruoyi.rocketmq.utils.EchartsDataUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.function.Function; /** * 系统监控信息Service业务层处理 @@ -24,6 +33,10 @@ public class InitialSystemInfoServiceImpl implements IInitialSystemInfoService { @Autowired private InitialSystemInfoMapper initialSystemInfoMapper; + @Autowired + private InitialMemoryInfoMapper initialMemoryInfoMapper; + @Autowired + private InitialCpuInfoMapper initialCpuInfoMapper; /** * 查询系统监控信息 @@ -115,4 +128,51 @@ public class InitialSystemInfoServiceImpl implements IInitialSystemInfoService throw new RuntimeException("批量保存失败",e); } } + /** + * 系统进程(个) + * @param initialSystemInfo + * @return + */ + @Override + public Map systemProcessEcharts(InitialSystemInfo initialSystemInfo) { + List list = initialSystemInfoMapper.selectInitialSystemInfoList(initialSystemInfo); + + Map> extractors = new LinkedHashMap<>(); + extractors.put("runProcNumData", InitialSystemInfo::getRunProcNum); + extractors.put("procNumData", InitialSystemInfo::getProcNum); + + return EchartsDataUtils.buildEchartsData(list,InitialSystemInfo::getCreateTime, extractors); + } + /** + * 登录用户数(个) + * @param initialSystemInfo + * @return + */ + @Override + public Map systemUserNumEcharts(InitialSystemInfo initialSystemInfo) { + List list = initialSystemInfoMapper.selectInitialSystemInfoList(initialSystemInfo); + + Map> extractors = new LinkedHashMap<>(); + extractors.put("usersNumData", InitialSystemInfo::getUsersNum); + + return EchartsDataUtils.buildEchartsData(list,InitialSystemInfo::getCreateTime, extractors); + } + + /** + * 系统基础信息 + * @param initialSystemInfo + * @return + */ + @Override + public SystemMsgVo getSystemDetailsMsg(InitialSystemInfo initialSystemInfo) { + // 获取总内存信息 + InitialMemoryInfo memoryInfo = initialMemoryInfoMapper.getMemoryInfoByClientId(initialSystemInfo.getClientId()); + // 获取cpu数量 + InitialCpuInfo cpuInfo = initialCpuInfoMapper.getCpuInfoByClientId(initialSystemInfo.getClientId()); + // 获取系统信息 + SystemMsgVo systemMsgVo = initialSystemInfoMapper.getSystemMsgByClientId(initialSystemInfo.getClientId()); + systemMsgVo.setNum(cpuInfo.getNum()); + systemMsgVo.setMemoryTotal(memoryInfo.getTotal()); + return systemMsgVo; + } } diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/utils/EchartsDataUtils.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/utils/EchartsDataUtils.java new file mode 100644 index 0000000..f23a199 --- /dev/null +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/utils/EchartsDataUtils.java @@ -0,0 +1,53 @@ +package com.ruoyi.rocketmq.utils; + +import com.ruoyi.common.core.utils.DateUtils; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class EchartsDataUtils { + + /** + * 构建ECharts图表数据 + * @param list 原始数据列表 + * @param timeExtractor 时间字段提取函数 + * @param dataExtractors 数据提取器Map (key: 数据名称, value: 数据提取函数) + * @param 数据类型泛型 + * @return 包含xData和yData的Map + */ + public static Map buildEchartsData( + List list, + Function timeExtractor, + Map> dataExtractors) { + + // 按时间排序 + List sortedList = list.stream() + .sorted(Comparator.comparing(timeExtractor)) + .collect(Collectors.toList()); + + // 准备X轴数据 + List xAxisData = sortedList.stream() + .map(item -> DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", timeExtractor.apply(item))) + .collect(Collectors.toList()); + + // 准备Y轴数据 + Map yData = new LinkedHashMap<>(); + dataExtractors.forEach((name, extractor) -> { + yData.put(name, sortedList.stream().map(extractor).collect(Collectors.toList())); + }); + + // 构建返回结果 + Map result = new HashMap<>(); + result.put("xData", xAxisData); + result.put("yData", yData); + return result; + } + + /** + * 微秒转秒 + */ + public static double convertMicrosecondsToSeconds(long microseconds) { + return microseconds / 1_000_000.0; + } +} \ No newline at end of file diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/utils/TableRouterUtil.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/utils/TableRouterUtil.java index c46d7db..daa710b 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/utils/TableRouterUtil.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/utils/TableRouterUtil.java @@ -7,14 +7,16 @@ import java.util.Set; public class TableRouterUtil { + // 日期格式 + private static final DateTimeFormatter YEAR_MONTH_FORMAT = + DateTimeFormatter.ofPattern("yyyy_MM"); + private static final DateTimeFormatter DATE_TIME_FORMATTER = + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 表名前缀 private static final String TABLE_PREFIX = "eps_initial_traffic"; // 表名前缀 private static final String TABLE_PREFIX_INITIAL = "initial_bandwidth_traffic"; - // 日期格式 - private static final DateTimeFormatter YEAR_MONTH_FORMAT = - DateTimeFormatter.ofPattern("yyyy_MM"); /** * 根据创建时间获取表名 @@ -43,24 +45,36 @@ public class TableRouterUtil { /** * 获取时间范围内涉及的所有表名 - * @param startTime 开始时间(包含) - * @param endTime 结束时间(包含) + * @param startTime 开始时间 (格式: "yyyy-MM-dd HH:mm:ss") + * @param endTime 结束时间 (格式: "yyyy-MM-dd HH:mm:ss") * @return 按时间顺序排列的表名集合 */ - public static Set getTableNamesBetween(LocalDateTime startTime, LocalDateTime endTime) { - validateTimeRange(startTime, endTime); + public static Set getTableNamesBetween(String startTime, String endTime) { + LocalDateTime start = parseDateTime(startTime); + LocalDateTime end = parseDateTime(endTime); + validateTimeRange(start, end); Set tableNames = new LinkedHashSet<>(); - LocalDateTime current = startTime.withHour(0).withMinute(0).withSecond(0); + LocalDateTime current = start.withHour(0).withMinute(0).withSecond(0); - while (!current.isAfter(endTime)) { + while (!current.isAfter(end)) { tableNames.add(getTableName(current)); current = current.plusDays(1); } return tableNames; } - + // 解析字符串为LocalDateTime + private static LocalDateTime parseDateTime(String dateTimeStr) { + if (dateTimeStr == null || dateTimeStr.trim().isEmpty()) { + throw new IllegalArgumentException("时间字符串不能为空"); + } + try { + return LocalDateTime.parse(dateTimeStr, DATE_TIME_FORMATTER); + } catch (Exception e) { + throw new IllegalArgumentException("时间格式必须为: yyyy-MM-dd HH:mm:ss", e); + } + } // 获取日期区间 private static String getDayRange(int day) { diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialBandwidthTrafficMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialBandwidthTrafficMapper.xml index 7685770..4f4ee68 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialBandwidthTrafficMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialBandwidthTrafficMapper.xml @@ -20,6 +20,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + select id, name, mac, status, type, ipV4, in_dropped, out_dropped, in_speed, out_speed, create_time, update_time, create_by, update_by, client_id from initial_bandwidth_traffic + select id, `name`, mac, status, `type`, ipV4, in_dropped, out_dropped, in_speed, out_speed, + create_time, update_time, create_by, update_by, client_id, duplex, speed + from ${tableName} + where client_id = #{clientId} and `name` like 'eth0%' + limit 1 + + \ No newline at end of file diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialCpuInfoMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialCpuInfoMapper.xml index 5ec803e..3c867d7 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialCpuInfoMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialCpuInfoMapper.xml @@ -179,4 +179,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ) + \ No newline at end of file diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialMemoryInfoMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialMemoryInfoMapper.xml index 65b4e8f..7410e67 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialMemoryInfoMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialMemoryInfoMapper.xml @@ -141,4 +141,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ) + + \ No newline at end of file diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialMountPointInfoMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialMountPointInfoMapper.xml index eb7970f..58958fe 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialMountPointInfoMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialMountPointInfoMapper.xml @@ -135,4 +135,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ) + + \ No newline at end of file diff --git a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialSystemInfoMapper.xml b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialSystemInfoMapper.xml index 8c6ea2b..644325a 100644 --- a/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialSystemInfoMapper.xml +++ b/ruoyi-rocketmq/src/main/resources/mapper/rocketmq/InitialSystemInfoMapper.xml @@ -34,6 +34,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and client_id = #{clientId} + and create_time >= #{startTime} + and create_time <= #{endTime} order by create_time desc @@ -182,4 +184,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ) + + \ No newline at end of file