From 200698ff03b3ffe01311a29b6ca274d5f94851f5 Mon Sep 17 00:00:00 2001 From: nieziyan Date: Thu, 21 Dec 2023 19:58:01 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A1.=E7=9B=91=E6=8E=A7=E9=A1=B9?= =?UTF-8?q?=E4=B8=8E=E6=9C=8D=E5=8A=A1=E5=99=A8=E7=BB=91=E5=AE=9A=202.?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=9B=91=E6=8E=A7=E6=95=B0=E6=8D=AE=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/MonitorConstant.java | 4 + .../modules/base/entity/monitor/Servers.java | 14 --- .../jeecg/modules/aspect/StatusAspect.java | 89 ++++++++++++++----- .../modules/feignclient/MonitorAlarm.java | 36 +++++--- .../modules/mapper/xml/AlarmItemMapper.xml | 1 - .../modules/service/IAlarmItemService.java | 2 + .../service/impl/AlarmItemServiceImpl.java | 49 ++-------- .../service/impl/SysServerServiceImpl.java | 13 +-- 8 files changed, 118 insertions(+), 90 deletions(-) delete mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/monitor/Servers.java diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MonitorConstant.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MonitorConstant.java index a15cef67..51312ff7 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MonitorConstant.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MonitorConstant.java @@ -2,6 +2,10 @@ package org.jeecg.common.constant; public interface MonitorConstant { + Integer pageNo = 1; + + Integer pageSize = 99; + // 监控项名称 String ITEM_CPUUSED = "cpuUtilization"; String ITEM_SWAPUSED = "swapUtilization"; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/monitor/Servers.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/monitor/Servers.java deleted file mode 100644 index cf589ab9..00000000 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/monitor/Servers.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.jeecg.modules.base.entity.monitor; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import lombok.Data; - -import java.io.Serializable; -import java.util.List; - -@Data -@JsonIgnoreProperties(ignoreUnknown = true) -public class Servers implements Serializable { - - private List records; -} diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/aspect/StatusAspect.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/aspect/StatusAspect.java index 2dda0e0b..4854cfdc 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/aspect/StatusAspect.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/aspect/StatusAspect.java @@ -1,14 +1,19 @@ package org.jeecg.modules.aspect; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.netease.qiye.qiyeopenplatform.sdk.QiyeOpenPlatSDK; import feign.FeignException; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.MonitorConstant; import org.jeecg.common.constant.RedisConstant; import org.jeecg.common.constant.SymbolConstant; @@ -17,7 +22,8 @@ import org.jeecg.common.util.JDBCUtil; import org.jeecg.common.util.RedisUtil; import org.jeecg.modules.base.dto.NameValue; import org.jeecg.modules.base.entity.monitor.Host; -import org.jeecg.modules.base.entity.monitor.Servers; +import org.jeecg.modules.base.entity.monitor.Item; +import org.jeecg.modules.base.entity.postgre.AlarmItem; import org.jeecg.modules.base.entity.postgre.SysDatabase; import org.jeecg.modules.base.entity.postgre.SysEmail; import org.jeecg.modules.base.entity.postgre.SysServer; @@ -28,15 +34,15 @@ import org.jeecg.modules.qiyeEmail.base.InstanceSDK; import org.jeecg.modules.qiyeEmail.base.RParam; import org.jeecg.modules.qiyeEmail.base.dto.AccountInfo; import org.jeecg.modules.qiyeEmail.service.Account; -import org.jeecg.modules.service.IAlarmRuleService; -import org.jeecg.modules.service.ISysDatabaseService; -import org.jeecg.modules.service.ISysEmailService; -import org.jeecg.modules.service.ISysServerService; +import org.jeecg.modules.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; import static org.jeecg.modules.base.enums.Qiye.IS; @@ -64,6 +70,9 @@ public class StatusAspect { @Autowired private IAlarmRuleService alarmRuleService; + @Autowired + private IAlarmItemService alarmItemService; + // 新增|修改邮箱服务器信息后 异步更新其状态信息 @Async @AfterReturning("execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.update(..)) || " + @@ -106,20 +115,43 @@ public class StatusAspect { String ipAddress = server.getIpAddress(); try { String token = ManageUtil.getToken(); - Servers servers = monitorAlarm.listApp(ipAddress, MonitorConstant.SERVER_APP, token).getResult(); - // 获取所有监控主机信息 - List hosts = servers.getRecords(); - for (Host host : hosts) { - String code = host.getCode(); - if (!StrUtil.equals(ipAddress, code)) - continue; - server.setHostId(host.getHostId()); - status = host.getStatus(); + Page hostPage = monitorAlarm.listApp(ipAddress, MonitorConstant.SERVER_APP, + MonitorConstant.pageNo, MonitorConstant.pageSize, token).getResult(); + if (ObjectUtil.isNull(hostPage) || CollUtil.isEmpty(hostPage.getRecords())){ + redisUtil.hset(key, id, new NameValue(name, status)); + return; } + List hosts = hostPage.getRecords(); + Host host = null; + for (Host oneHost : hosts) { + String code = oneHost.getCode(); + if (StrUtil.equals(ipAddress, code)) + host = oneHost; + } + if (ObjectUtil.isNull(host)){ + redisUtil.hset(key, id, new NameValue(name, status)); + return; + } + status = host.getStatus(); + String hostId = host.getHostId(); + server.setHostId(hostId); // 更新该服务器状态信息 redisUtil.hset(key, id, new NameValue(name, status)); // 更新该服务器的HostId serverService.updateById(server); + // 同步服务器监控项 + Page itemPage = monitorAlarm.allItems(hostId, + MonitorConstant.pageNo, MonitorConstant.pageSize, token).getResult(); + if (ObjectUtil.isNull(itemPage) || CollUtil.isEmpty(itemPage.getRecords())) + return; + List items = itemPage.getRecords(); + List alarmItems = new ArrayList<>(); + items.forEach(item -> { + AlarmItem alarmItem = BeanUtil.copyProperties(item, AlarmItem.class); + alarmItem.setId(item.getItemId()); + alarmItems.add(alarmItem); + }); + alarmItemService.saveOrUpdateBatch(alarmItems); }catch (FeignException.Unauthorized e){ ManageUtil.refreshToken(); log.warn("向运管系统查询Hosts信息异常: Token失效,已刷新Token"); @@ -129,15 +161,32 @@ public class StatusAspect { } /* - * 删除Email|Database|Server时 同步删除Redis和数据库中相关联的预警规则 - * */ + * Server时 同步删除数据库中相关联的监控项&报警规则 + * */ @Async - @AfterReturning("execution(* org.jeecg.modules.service.impl.SysServerServiceImpl.deleteById(..)) ||" + - "execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.deleteById(..)) || " + - "execution(* org.jeecg.modules.service.impl.SysDatabaseServiceImpl.deleteById(..))") - public void deleteRules(JoinPoint point){ + @AfterReturning(value = "execution(* org.jeecg.modules.service.impl.SysServerServiceImpl.deleteById(..))", returning = "result") + public void deleteItems(JoinPoint point, Object result){ + if (ObjectUtil.isNotNull(result)){ + String hostId = ((Result) result).getResult(); + // 删除服务器相关联的监控项 + alarmItemService.deleteByHostId(hostId); + } + // 删除服务器相关联的报警规则 Object[] args = point.getArgs(); if (ArrayUtil.length(args) > 0) alarmRuleService.deleteBySourceId((String) args[0]); } + + /* + * 删除Email|Database时 同步删除Redis和数据库中相关联的预警规则 + * */ + @Async + @AfterReturning("execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.deleteById(..)) || " + + "execution(* org.jeecg.modules.service.impl.SysDatabaseServiceImpl.deleteById(..))") + public void deleteRules(JoinPoint point){ + Object[] args = point.getArgs(); + // 删除数据库和邮箱相关联的报警规则 + if (ArrayUtil.length(args) > 0) + alarmRuleService.deleteBySourceId((String) args[0]); + } } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/feignclient/MonitorAlarm.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/feignclient/MonitorAlarm.java index 3017fff6..c01fa34c 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/feignclient/MonitorAlarm.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/feignclient/MonitorAlarm.java @@ -1,15 +1,19 @@ package org.jeecg.modules.feignclient; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import kotlin.reflect.jvm.internal.impl.descriptors.Visibilities; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.base.dto.LoginResult; import org.jeecg.modules.base.dto.LoginVo; import org.jeecg.modules.base.entity.monitor.Host; +import org.jeecg.modules.base.entity.monitor.Item; import org.jeecg.modules.base.entity.monitor.ItemHistory; -import org.jeecg.modules.base.entity.monitor.Servers; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.*; +import java.util.List; + @Component @FeignClient(name = "monitorAlarm", url = "${monitor.url}") public interface MonitorAlarm { @@ -20,18 +24,30 @@ public interface MonitorAlarm { // --------------------后端专用------------------- @GetMapping("/omms/device/monitor/list") // 获取所有 服务器/数据库服务 信息 - Result listApp(@RequestParam("type") String type, - @RequestHeader("X-Access-Token") String token); + Result> listApp(@RequestParam("type") String type, + @RequestParam("pageNo") Integer pageNo, + @RequestParam("pageSize") Integer pageSize, + @RequestHeader("X-Access-Token") String token); @GetMapping("/omms/device/monitor/list") // 获取所有 服务器/数据库服务 信息 - Result listApp(@RequestParam("code") String code, - @RequestParam("type") String type, - @RequestHeader("X-Access-Token") String token); + Result> listApp(@RequestParam("code") String code, + @RequestParam("type") String type, + @RequestParam("pageNo") Integer pageNo, + @RequestParam("pageSize") Integer pageSize, + @RequestHeader("X-Access-Token") String token); @GetMapping("/omms/device/monitor/list") // 获取所有在线 服务器/数据库服务 信息 - Result listOnApp(@RequestParam("status") String status, - @RequestParam("type") String type, - @RequestHeader("X-Access-Token") String token); + Result> listOnApp(@RequestParam("status") String status, + @RequestParam("type") String type, + @RequestParam("pageNo") Integer pageNo, + @RequestParam("pageSize") Integer pageSize, + @RequestHeader("X-Access-Token") String token); + + @GetMapping("/omms/device/monitor/queryAllItems") + Result> allItems(@RequestParam("hostId") String hostId, + @RequestParam("pageNo") Integer pageNo, + @RequestParam("pageSize") Integer pageSize, + @RequestHeader("X-Access-Token") String token); @GetMapping("/omms/device/monitor/queryHostDetails") // 获取服务器摘要信息 Result summary(@RequestParam("hostId") String hostId, @@ -98,7 +114,7 @@ public interface MonitorAlarm { @RequestParam String status, @RequestHeader("X-Access-Token") String token); - // 数据库相关 + // -------------------------------------------数据库相关----------------------------------------------------- @GetMapping("/omms/monitor/db/item/detail") Result dbDetail(@RequestParam("hostId") String hostId, @RequestHeader("X-Access-Token") String token); diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmItemMapper.xml b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmItemMapper.xml index 4b330790..03eb4e23 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmItemMapper.xml +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmItemMapper.xml @@ -1,7 +1,6 @@ -