From 263d014cc1398ddb29d71ff43654f3bf9afb6ad6 Mon Sep 17 00:00:00 2001 From: nieziyan Date: Thu, 7 Dec 2023 19:01:54 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=AE=8C=E5=96=84Monitor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeecg/modules/base/dto/NameString.java | 17 +++ .../org/jeecg/modules/base/dto/NameValue.java | 17 +++ .../jeecg/modules/DatabaseStatusFetcher.java | 20 ++-- .../controller/SysDatabaseController.java | 5 + .../controller/SysEmailController.java | 5 + .../controller/SysEmailLogController.java | 11 +- .../controller/SysServerController.java | 5 + .../modules/databaseStatus/ConnFetcher.java | 6 + .../modules/databaseStatus/ConnFetcher1.java | 107 ++++++++++++++++++ .../jeecg/modules/qiyeEmail/base/RParam.java | 8 +- .../modules/qiyeEmail/service/MailBox.java | 2 + .../modules/service/IAlarmRuleService.java | 2 + .../modules/service/ISysDatabaseService.java | 2 + .../modules/service/ISysEmailService.java | 2 + .../modules/service/ISysServerService.java | 2 + .../service/impl/AlarmRuleServiceImpl.java | 21 ++++ .../service/impl/SysDatabaseServiceImpl.java | 36 ++++-- .../service/impl/SysEmailLogServiceImpl.java | 7 +- .../service/impl/SysEmailServiceImpl.java | 44 ++++--- .../service/impl/SysServerServiceImpl.java | 42 +++++-- .../feignclient/AbnormalAlarmClient.java | 11 +- .../jeecg/modules/quartz/job/DatabaseJob.java | 21 ++-- .../jeecg/modules/quartz/job/EmailJob.java | 17 ++- .../jeecg/modules/quartz/job/ServerJob.java | 13 ++- .../armd-abnormal-alarm-start/pom.xml | 9 ++ .../src/main/resources/application.yml | 2 +- 26 files changed, 359 insertions(+), 75 deletions(-) create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NameString.java create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NameValue.java create mode 100644 jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/databaseStatus/ConnFetcher1.java diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NameString.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NameString.java new file mode 100644 index 00000000..7831f43d --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NameString.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.base.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class NameString implements Serializable { + + private String name; + + private String value; +} diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NameValue.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NameValue.java new file mode 100644 index 00000000..338ad40f --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NameValue.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.base.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.Value; +import java.io.Serializable; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class NameValue implements Serializable { + + private String name; + + private Boolean value; +} diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/DatabaseStatusFetcher.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/DatabaseStatusFetcher.java index 3dd5e632..6fb84a9c 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/DatabaseStatusFetcher.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/DatabaseStatusFetcher.java @@ -1,12 +1,13 @@ package org.jeecg.modules; -import org.jeecg.common.constant.DBSQL; -import org.jeecg.common.util.JDBCUtil; +import com.netease.qiye.qiyeopenplatform.sdk.QiyeOpenPlatSDK; import org.jeecg.modules.base.entity.postgre.SysDatabase; import org.jeecg.modules.databaseStatus.ConnFetcher; +import org.jeecg.modules.qiyeEmail.base.InstanceSDK; +import org.jeecg.modules.qiyeEmail.base.RParam; +import org.jeecg.modules.qiyeEmail.service.MailBox; import org.jeecg.modules.service.ISysDatabaseService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import java.util.List; @@ -27,12 +28,11 @@ public class DatabaseStatusFetcher { } public static void main(String[] args) { - String url = "jdbc:oracle:thin:@82.157.234.81:1521:XE"; - String driver = "oracle.jdbc.OracleDriver"; - String user = "configuration"; - String pass = "123456"; - - JdbcTemplate template = JDBCUtil.template(url, driver, user, pass); - System.out.println(template.queryForObject(DBSQL.DBSTATUS_CONN_OR, Integer.class)); + QiyeOpenPlatSDK platSDK = InstanceSDK.getInstance(); + RParam rParam = new RParam(); + rParam.setAccountName("cnndc.rn.ng"); + rParam.setDomain("ndc.org.cn"); + Integer unreadMsg = MailBox.unreadMsg(platSDK, rParam); + System.out.println(unreadMsg); } } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysDatabaseController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysDatabaseController.java index 839ef822..1d28d228 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysDatabaseController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysDatabaseController.java @@ -93,4 +93,9 @@ public class SysDatabaseController { public void updateStatus(@RequestBody SysDatabase sysDatabase){ sysDatabaseService.updateById(sysDatabase); } + + @GetMapping("getNameById") + public String getServerName(@RequestParam String id){ + return sysDatabaseService.getNameById(id); + } } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailController.java index eaa01c94..f717b337 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailController.java @@ -69,4 +69,9 @@ public class SysEmailController { List sourceDtos = sysEmailService.listAll(); return Result.OK(sourceDtos); } + + @GetMapping("getNameById") + public String getServerName(@RequestParam String id){ + return sysEmailService.getNameById(id); + } } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailLogController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailLogController.java index b71e7eb6..56c2fd8d 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailLogController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailLogController.java @@ -6,6 +6,7 @@ import io.swagger.annotations.ApiOperation; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.RedisConstant; import org.jeecg.common.util.RedisUtil; +import org.jeecg.modules.base.dto.NameValue; import org.jeecg.modules.service.ISysEmailLogService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -31,8 +32,14 @@ public class SysEmailLogController { @ApiOperation("邮箱服务器状态") public Result status(@RequestParam("emailId") String emailId){ String statusKey = RedisConstant.EMAIL_STATUS; - Boolean emailSatus = (Boolean) redisUtil.hget(statusKey, emailId); - return Result.OK(ObjectUtil.isNotNull(emailSatus) && emailSatus); + NameValue nameValue = (NameValue) redisUtil.hget(statusKey, emailId); + boolean online = false; + if (ObjectUtil.isNotNull(nameValue)){ + Boolean value = nameValue.getValue(); + if (ObjectUtil.isNotNull(value)) + online = value; + } + return Result.OK(online); } @GetMapping("space") diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysServerController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysServerController.java index bd976ffe..622e229b 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysServerController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysServerController.java @@ -85,4 +85,9 @@ public class SysServerController { @RequestParam(defaultValue = "10") Integer pageSize){ return sysServerService.details_AlarmInfo(sourceId, pageNo, pageSize); } + + @GetMapping("getNameById") + public String getServerName(@RequestParam String id){ + return sysServerService.getNameById(id); + } } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/databaseStatus/ConnFetcher.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/databaseStatus/ConnFetcher.java index 51b132ab..40551f74 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/databaseStatus/ConnFetcher.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/databaseStatus/ConnFetcher.java @@ -45,6 +45,7 @@ public class ConnFetcher implements Runnable{ Iterator iterator = CollUtil .addAll(new ArrayList<>() ,databases).iterator(); LocalDateTime now = LocalDateTime.now(); + long start = System.currentTimeMillis(); while (iterator.hasNext()) { try { SysDatabase database= iterator.next(); @@ -54,7 +55,10 @@ public class ConnFetcher implements Runnable{ String dbDriver = database.getDbDriver(); String dbUsername = database.getDbUsername(); String dbPassword = database.getDbPassword(); + long getConn1 = System.currentTimeMillis(); JdbcTemplate template = JDBCUtil.template(dbUrl, dbDriver, dbUsername, dbPassword); + long getConn2 = System.currentTimeMillis(); + System.out.println("耗时: "+ (getConn2 - getConn1) + ", 连接[" + dbUrl + "]"); if (ObjectUtil.isNull(template)) { iterator.remove(); continue; @@ -99,6 +103,8 @@ public class ConnFetcher implements Runnable{ log.error("ConnFetcher采集数据库连接数异常: {}", e.getMessage()); } } + long end = System.currentTimeMillis(); + System.out.println("执行耗时: " + (end - start) + "ms"); } } } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/databaseStatus/ConnFetcher1.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/databaseStatus/ConnFetcher1.java new file mode 100644 index 00000000..eee9349c --- /dev/null +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/databaseStatus/ConnFetcher1.java @@ -0,0 +1,107 @@ +package org.jeecg.modules.databaseStatus; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.constant.DBSQL; +import org.jeecg.common.constant.enums.DbType; +import org.jeecg.common.util.JDBCUtil; +import org.jeecg.common.util.SpringContextUtils; +import org.jeecg.modules.base.dto.DatabaseStatusConn; +import org.jeecg.modules.base.entity.postgre.SysDatabase; +import org.jeecg.modules.service.IDatabaseStatusConnService; +import org.springframework.jdbc.core.JdbcTemplate; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import static org.jeecg.common.constant.enums.DbType.typeOf; + +/* +* 收集数据源的连接数信息 入库 +* */ +@Slf4j +public class ConnFetcher1 implements Runnable{ + + private List databases; + + private IDatabaseStatusConnService connService; + + public ConnFetcher1(List databases) { + this.databases = databases; + connService = SpringContextUtils.getBean(IDatabaseStatusConnService.class); + } + + @Override + public void run() { + if (CollUtil.isEmpty(databases)) return; + List statusList = new ArrayList<>(); + while (true){ + Iterator iterator = CollUtil + .addAll(new ArrayList<>() ,databases).iterator(); + LocalDateTime now = LocalDateTime.now(); + long start = System.currentTimeMillis(); + while (iterator.hasNext()) { + try { + SysDatabase database= iterator.next(); + String databaseId = database.getId(); + String dbType = database.getDbType(); + String dbUrl = database.getDbUrl(); + String dbDriver = database.getDbDriver(); + String dbUsername = database.getDbUsername(); + String dbPassword = database.getDbPassword(); + long getConn1 = System.currentTimeMillis(); + JdbcTemplate template = JDBCUtil.template(dbUrl, dbDriver, dbUsername, dbPassword); + long getConn2 = System.currentTimeMillis(); + System.out.println("耗时: "+ (getConn2 - getConn1) + ", 连接[" + dbUrl + "]"); + if (ObjectUtil.isNull(template)) { + iterator.remove(); + continue; + } + Integer conn = null; + // 根据数据库类型选择执行哪种数据库的状态查询SQL + DbType dbTypeE = typeOf(dbType); + if (ObjectUtil.isNotNull(dbTypeE)){ + switch (dbTypeE){ + case POSTGRESQL: + conn = template.queryForObject(DBSQL.DBSTATUS_CONN_PG, Integer.class); + break; + case ORACLE: + conn = template.queryForObject(DBSQL.DBSTATUS_CONN_OR, Integer.class); + break; + case MYSQL55: + // ... + break; + case MYSQL57: + // ... + break; + default: + break; + } + } + // 如果conn == null 说明数据源类型不确定 + if (ObjectUtil.isNull(conn)) { + iterator.remove(); + continue; + } + DatabaseStatusConn databaseStatus = new DatabaseStatusConn(); + databaseStatus.setConnNum(conn); + databaseStatus.setDatabaseId(databaseId); + databaseStatus.setCollectTime(now); + // 数据达到一定数量,进行批量保存 + statusList.add(databaseStatus); + if (statusList.size() == 100){ + connService.saveBatch(statusList); + statusList = new ArrayList<>(); + } + }catch (Exception e){ + log.error("ConnFetcher采集数据库连接数异常: {}", e.getMessage()); + } + } + long end = System.currentTimeMillis(); + System.out.println("执行耗时: " + (end - start) + "ms"); + } + } +} diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/qiyeEmail/base/RParam.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/qiyeEmail/base/RParam.java index 9f0a4e94..8e167f71 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/qiyeEmail/base/RParam.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/qiyeEmail/base/RParam.java @@ -8,15 +8,17 @@ public class RParam { // 获取账号配额信息 相关参数 private String domain; // 必须 - private String account_name; // 必须 + private String accountName; // 必须 // 获取企业邮箱域名列表 相关参数 private String orgOpenId; // 必须 private Boolean showAliasDomain; // 必须 - public RParam(String account_name, String domain) { - this.account_name = account_name; + private String fid = "1"; // 邮箱文件夹 ID,使用英文半角逗号分开,默认传 1,5 1-收件箱;2-草稿箱;3-已发送;4-已删除;5-垃圾邮件 + + public RParam(String accountName, String domain) { + this.accountName = accountName; this.domain = domain; } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/qiyeEmail/service/MailBox.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/qiyeEmail/service/MailBox.java index efaec3da..6bfb09b0 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/qiyeEmail/service/MailBox.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/qiyeEmail/service/MailBox.java @@ -13,6 +13,8 @@ public class MailBox { public static Integer unreadMsg(QiyeOpenPlatSDK platSDK, RParam rParam){ Q q = Q.init(rParam); + if (ObjectUtil.isNull(platSDK)) + return -1; R> result = platSDK.commonInvoke(q, MailBoxAPI.UNREADMSG); Map data = result.getData(); if (ObjectUtil.isNull(data)) diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmRuleService.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmRuleService.java index 13659712..1a7af46c 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmRuleService.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmRuleService.java @@ -20,4 +20,6 @@ public interface IAlarmRuleService extends IService { Result getSourceByType(String sourceType); Result updateStatus(String alarmRuleId,Integer enabled); + + void deleteBySourceId(String sourceId); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysDatabaseService.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysDatabaseService.java index c2706553..f6888a80 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysDatabaseService.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysDatabaseService.java @@ -34,4 +34,6 @@ public interface ISysDatabaseService extends IService { List spaceInfo(String id); void status2Redis(); + + String getNameById(String id); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysEmailService.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysEmailService.java index a9e0d553..053b31f8 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysEmailService.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysEmailService.java @@ -28,4 +28,6 @@ public interface ISysEmailService extends IService { List listAll(); void status2Redis(); + + String getNameById(String id); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysServerService.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysServerService.java index 5878e6c4..9ded0902 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysServerService.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysServerService.java @@ -35,4 +35,6 @@ public interface ISysServerService extends IService { Result details_AlarmInfo(String sourceId, Integer pageNo, Integer pageSize); void status2Redis(); + + String getNameById(String id); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmRuleServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmRuleServiceImpl.java index a29f93da..d0e5b50f 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmRuleServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmRuleServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,9 +30,11 @@ import org.jeecg.modules.service.ISysEmailService; import org.jeecg.modules.service.ISysServerService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.util.*; +import java.util.stream.Collectors; import static org.jeecg.modules.base.enums.Enabled.ENABLED; import static org.jeecg.modules.base.enums.SourceType.*; @@ -144,6 +147,24 @@ public class AlarmRuleServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(AlarmRule::getSourceId, sourceId); + List alarmRules = list(wrapper); + // 删除数据库中的规则 + List ids = alarmRules.stream() + .map(AlarmRule::getId).collect(Collectors.toList()); + removeBatchByIds(ids); + // 收集待删除规则的Redis Key + List keys = alarmRules.stream() + .map(rule -> RedisConstant.PREFIX_RULE + rule.getSourceType() + StrUtil.COLON + rule.getId()) + .collect(Collectors.toList()); + // 删除Redis中的规则 + redisUtil.del(ArrayUtil.toArray(keys, String.class)); + } + /* * 系统启动后将所有警告规则放到Redis缓存 **/ diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysDatabaseServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysDatabaseServiceImpl.java index 8eca574a..1986ec40 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysDatabaseServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysDatabaseServiceImpl.java @@ -15,10 +15,8 @@ import org.jeecg.common.constant.enums.DbType; import org.jeecg.common.system.vo.DictModel; import org.jeecg.common.util.JDBCUtil; import org.jeecg.common.util.RedisUtil; -import org.jeecg.modules.base.dto.DBInfo; -import org.jeecg.modules.base.dto.DatabaseDto; -import org.jeecg.modules.base.dto.SourceDto; -import org.jeecg.modules.base.dto.SpaceInfo; +import org.jeecg.common.util.SpringContextUtils; +import org.jeecg.modules.base.dto.*; import org.jeecg.modules.base.entity.postgre.SysDatabase; import org.jeecg.modules.base.bizVo.SourceVo; import org.jeecg.modules.entity.AlarmHistory; @@ -26,6 +24,7 @@ import org.jeecg.modules.feignclient.SystemClient; import org.jeecg.modules.mapper.DBRowMapper; import org.jeecg.modules.mapper.SpaceRowMapper; import org.jeecg.modules.mapper.SysDatabaseMapper; +import org.jeecg.modules.service.IAlarmRuleService; import org.jeecg.modules.service.ISysDatabaseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; @@ -72,10 +71,15 @@ public class SysDatabaseServiceImpl extends ServiceImpl statusMap = redisUtil.hmget(statusKey); for (DatabaseDto databaseDto : databaseDtos) { + boolean online = false; String id = databaseDto.getId(); String type = databaseDto.getType(); - Boolean online = (Boolean) statusMap.get(id); - if (ObjectUtil.isNull(online)) online = false; + NameValue nameValue = (NameValue) statusMap.get(id); + if (ObjectUtil.isNotNull(nameValue)){ + Boolean value = nameValue.getValue(); + if (ObjectUtil.isNotNull(value)) + online = value; + } String dataBaseType = dataSourceMap.get(type); databaseDto.setDataBaseType(dataBaseType) .setOnline(online).setSlowQuery("328/s") @@ -181,6 +185,9 @@ public class SysDatabaseServiceImpl extends ServiceImpl statusMap = new HashMap<>(); for (SysDatabase database : databases) { String id = database.getId(); + String name = database.getName(); String dbUrl = database.getDbUrl(); String dbDriver = database.getDbDriver(); String dbUsername = database.getDbUsername(); String dbPassword = database.getDbPassword(); boolean isConn = JDBCUtil.isConnection(dbUrl, dbDriver, dbUsername, dbPassword); - statusMap.put(id, isConn); + statusMap.put(id, new NameValue(name, isConn)); } // 将数据源连接状态更新到reids String statusKey = RedisConstant.DATABASE_STATUS; redisUtil.hmset(statusKey, statusMap); } + @Override + public String getNameById(String id) { + String key = RedisConstant.DATABASE_STATUS; + if (redisUtil.hHasKey(key, id)){ + NameValue nV = (NameValue) redisUtil.hget(key, id); + if (ObjectUtil.isNotNull(nV)) + return nV.getName(); + } + return getById(id).getName(); + } + private List dbInfoPG(SysDatabase sysDatabase, String dbName, RowMapper mapper){ String dbUrl = sysDatabase.getDbUrl(); String dbDriver = sysDatabase.getDbDriver(); @@ -390,13 +409,14 @@ public class SysDatabaseServiceImpl extends ServiceImpl i capacity = usedQuota + " MB"; } } - Boolean online = (Boolean) statusMap.get(id); - if (ObjectUtil.isNull(online)) online = false; + NameValue nameValue = (NameValue) statusMap.get(id); + boolean online = false; + if (ObjectUtil.isNotNull(nameValue)){ + Boolean value = nameValue.getValue(); + if (ObjectUtil.isNotNull(value)) + online = value; + } emailDto.setOnline(online).setStoerCapacity(capacity).setStoerRed(true) .setToday(todayMap.getOrDefault(id, 0)) .setYesterday(yestMap.getOrDefault(id, 0)) @@ -179,6 +179,9 @@ public class SysEmailServiceImpl extends ServiceImpl i boolean success = this.removeById(id); if (success){ delStatus(id); + // 同步删除Redis和数据库中的预警规则 + IAlarmRuleService alarmRuleService = SpringContextUtils.getBean(IAlarmRuleService.class); + alarmRuleService.deleteBySourceId(id); return Result.OK(Prompt.DELETE_SUCC); } return Result.error(Prompt.DELETE_ERR); @@ -242,22 +245,35 @@ public class SysEmailServiceImpl extends ServiceImpl i Map statusMap = new HashMap<>(); for (SysEmail email : emails) { String id = email.getId(); + String name = email.getName(); boolean isConn = EmailUtil.isConnection(email); - statusMap.put(id, isConn); + statusMap.put(id, new NameValue(name, isConn)); } // 将邮箱服务器连接状态更新到reids String statusKey = RedisConstant.EMAIL_STATUS; redisUtil.hmset(statusKey, statusMap); } + @Override + public String getNameById(String id) { + String key = RedisConstant.EMAIL_STATUS; + if (redisUtil.hHasKey(key, id)){ + NameValue nV = (NameValue) redisUtil.hget(key, id); + if (ObjectUtil.isNotNull(nV)) + return nV.getName(); + } + return getById(id).getName(); + } + /* * 新增|修改邮箱服务信息后更新邮箱服务状态值 * */ private void saveOrUpdateStatus(SysEmail email){ String id = email.getId(); + String name = email.getName(); boolean isConn = EmailUtil.isConnection(email); String statusKey = RedisConstant.EMAIL_STATUS; - redisUtil.hset(statusKey, id, isConn); + redisUtil.hset(statusKey, id, new NameValue(name, isConn)); } /* @@ -276,7 +292,7 @@ public class SysEmailServiceImpl extends ServiceImpl i if (ArrayUtil.length(info) < 2) return Qiye.NOT.getValue(); String domain = info[1]; - List domains = Account.domains(); + List domains = ListUtil.toList("ndc.org.cn",""); boolean contains = CollUtil.contains(domains, domain); return contains ? Qiye.IS.getValue() : Qiye.NOT.getValue(); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysServerServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysServerServiceImpl.java index e716279c..eb885afc 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysServerServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysServerServiceImpl.java @@ -21,11 +21,9 @@ import org.jeecg.common.constant.RedisConstant; import org.jeecg.common.util.NumUtil; import org.jeecg.common.util.PageUtil; import org.jeecg.common.util.RedisUtil; +import org.jeecg.common.util.SpringContextUtils; import org.jeecg.modules.ServerStatusManager; -import org.jeecg.modules.base.dto.AlarmInfo; -import org.jeecg.modules.base.dto.BasicInfo; -import org.jeecg.modules.base.dto.ServerDto; -import org.jeecg.modules.base.dto.SourceDto; +import org.jeecg.modules.base.dto.*; import org.jeecg.modules.base.entity.monitor.Host; import org.jeecg.modules.base.entity.monitor.Item; import org.jeecg.modules.base.entity.monitor.Servers; @@ -35,6 +33,7 @@ import org.jeecg.modules.base.enums.ServerStatus; import org.jeecg.modules.entity.AlarmHistory; import org.jeecg.modules.feignclient.MonitorAlarm; import org.jeecg.modules.mapper.SysServerMapper; +import org.jeecg.modules.service.IAlarmRuleService; import org.jeecg.modules.service.ISysServerService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -90,7 +89,14 @@ public class SysServerServiceImpl extends ServiceImpl 0); // 设置服务器状态信息 - serverDto.setStatus((String) statusMap.getOrDefault(id, ServerStatus.UNKNOWN.getValue())); + NameString nameValue = (NameString)statusMap.get(id); + String status = ServerStatus.UNKNOWN.getValue(); + if (ObjectUtil.isNotNull(nameValue)){ + String value = nameValue.getValue(); + if (StrUtil.isNotBlank(value)) + status = value; + } + serverDto.setStatus(status); // 设置服务器的硬件使用情况信息 Host host = hostMap.get(hostId); if (ObjectUtil.isNull(host)) @@ -176,6 +182,9 @@ public class SysServerServiceImpl extends ServiceImpl hostMap = hosts.stream().collect(Collectors.toMap(Host::getHostId, Host -> Host)); for (SysServer server : sysServers) { String hostId = server.getHostId(); + String name = server.getName(); String serverId = server.getId(); Host host = hostMap.get(hostId); // 获取该服务器的状态并保存 if (ObjectUtil.isNotNull(host)) { - values.put(serverId, host.getStatus()); + String status = host.getStatus(); + values.put(serverId, new NameString(name, status)); continue; } // 当前服务器不在监控服务器列表 将它的状态设置为未知 - values.put(serverId, ServerStatus.UNKNOWN.getValue()); + values.put(serverId, new NameString(name, ServerStatus.UNKNOWN.getValue())); } redisUtil.hmset(key, values); }catch (Exception e){ @@ -327,12 +338,24 @@ public class SysServerServiceImpl extends ServiceImpl sysServers){ String key = RedisConstant.SERVER_STATUS; Map values = new HashMap<>(); for (SysServer sysServer : sysServers) { String id = sysServer.getId(); - values.put(id, ServerStatus.UNKNOWN.getValue()); + String name = sysServer.getName(); + values.put(id, new NameString(name, ServerStatus.UNKNOWN.getValue())); } redisUtil.hmset(key, values); } @@ -343,6 +366,7 @@ public class SysServerServiceImpl extends ServiceImpl getSender(); + @GetMapping("/sysEmail/getNameById") + String getEmailName(@RequestParam String id); + /* AlarmContactGroupMemberController下相关接口 */ @GetMapping("/alarmContactGroupMember/userIds") Result> userIds(@RequestParam String groupId); @@ -39,9 +42,13 @@ public interface AbnormalAlarmClient { boolean syncServerItem(); /* SysDatabaseController下相关接口 */ - @GetMapping("/sysDatabase/getById") - SysDatabase getDatabase(@RequestParam String sourceId); + @GetMapping("/sysDatabase/getNameById") + String getDatabaseName(@RequestParam String id); @PutMapping("/sysDatabase/updateStatus") void updateDatabase(@RequestBody SysDatabase database); + + /* SysServerController下相关接口 */ + @GetMapping("/sysServer/getNameById") + String getServerName(@RequestParam String id); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java index 681a412b..ce0f4e70 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java @@ -16,6 +16,7 @@ import org.jeecg.common.util.JDBCUtil; import org.jeecg.common.util.NumUtil; import org.jeecg.common.util.RedisStreamUtil; import org.jeecg.common.util.SpringContextUtils; +import org.jeecg.modules.base.dto.NameValue; import org.jeecg.modules.base.entity.Rule; import org.jeecg.modules.base.entity.monitor.ItemHistory; import org.jeecg.modules.base.entity.postgre.AlarmLog; @@ -69,11 +70,9 @@ public class DatabaseJob extends Monitor implements Job{ if (blank1 || blank2 || hasKey) continue; - // 根据sourceId查询Database信息 + // 根据sourceId查询Database信息(缓存) String sourceId = alarmRule.getSourceId(); - // 查询数据库信息 该SQL占用较多PG的连接 - /*SysDatabase database = getAlarmClient().getDatabase(sourceId); - if (ObjectUtil.isNull(database)) continue;*/ + String databaseName = getAlarmClient().getDatabaseName(sourceId); // 根据监控项id选择要查询的监控项信息 Item item = Item.of(itemId); @@ -100,8 +99,9 @@ public class DatabaseJob extends Monitor implements Job{ alarmLog.setOperator(operator); alarmLog.setAlarmValue(StrUtil.toString(current)); String ruleName = alarmRule.getName(); - String message = "您设定的预警规则:"+ruleName+"," + - "预警信息为:"+ operator + ",当前值为:" + current; + String message = String.format("您的数据库: [%s]", databaseName); + message += String.format(",设定的预警规则: %s", ruleName); + message += String.format(",预警信息为: %s,当前值为: %s", operator, current); alarmLog.setAlarmInfo(message); getAlarmClient().create(alarmLog); @@ -116,9 +116,9 @@ public class DatabaseJob extends Monitor implements Job{ getSendMessage().send(message, groupId, notific); } } catch (JsonProcessingException e) { - log.error("Database预警规则{}解析失败: {}", operator, e.getMessage()); + log.error("Database预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); }catch (RuntimeException e){ - log.error("Database监控异常: {}",e.getMessage()); + log.error("Database监控异常: {}", e.getMessage()); } } destroy(); @@ -130,8 +130,9 @@ public class DatabaseJob extends Monitor implements Job{ private Integer isConnection(String databaseId){ int res = 1; String statusKey = RedisConstant.DATABASE_STATUS; - Boolean status = (Boolean)getRedisUtil().hget(statusKey, databaseId); - if (ObjectUtil.isNull(status) || !status) res = 0; + NameValue nameValue = (NameValue)getRedisUtil().hget(statusKey, databaseId); + if (ObjectUtil.isNull(nameValue) || ObjectUtil.isNull(nameValue.getValue()) || !nameValue.getValue()) + res = 0; return res; } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/EmailJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/EmailJob.java index dee631b8..25408dae 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/EmailJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/EmailJob.java @@ -9,6 +9,7 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.constant.RedisConstant; import org.jeecg.common.util.NumUtil; +import org.jeecg.modules.base.dto.NameValue; import org.jeecg.modules.base.entity.Rule; import org.jeecg.modules.base.entity.postgre.AlarmLog; import org.jeecg.modules.base.entity.postgre.AlarmRule; @@ -55,7 +56,9 @@ public class EmailJob extends Monitor implements Job{ if (blank1 || blank2 || hasKey) continue; + // 根据sourceId查询Eamil信息(缓存) String sourceId = alarmRule.getSourceId(); + String emailName = getAlarmClient().getEmailName(sourceId); // 根据监控项id选择要查询的监控项信息 Item item = Item.of(itemId); @@ -82,8 +85,9 @@ public class EmailJob extends Monitor implements Job{ alarmLog.setOperator(operator); alarmLog.setAlarmValue(StrUtil.toString(current)); String ruleName = alarmRule.getName(); - String message = "您设定的预警规则:"+ruleName+"," + - "预警信息为:"+ operator + ",当前值为:" + current; + String message = String.format("您的Email: [%s]", emailName); + message += String.format(",设定的预警规则: %s", ruleName); + message += String.format(",预警信息为: %s,当前值为: %s", operator, current); alarmLog.setAlarmInfo(message); getAlarmClient().create(alarmLog); @@ -98,9 +102,9 @@ public class EmailJob extends Monitor implements Job{ getSendMessage().send(message, groupId, notific); } } catch (JsonProcessingException e) { - log.error("Email预警规则{}解析失败: {}", operator, e.getMessage()); + log.error("Email预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); }catch (RuntimeException e){ - log.error("Email监控异常: {}",e.getMessage()); + log.error("Email监控异常: {}", e.getMessage()); } } destroy(); @@ -112,8 +116,9 @@ public class EmailJob extends Monitor implements Job{ private Integer isConnection(String emailId){ int res = 1; String statusKey = RedisConstant.EMAIL_STATUS; - Boolean status = (Boolean)getRedisUtil().hget(statusKey, emailId); - if (ObjectUtil.isNull(status) || !status) res = 0; + NameValue nameValue = (NameValue)getRedisUtil().hget(statusKey, emailId); + if (ObjectUtil.isNull(nameValue) || ObjectUtil.isNull(nameValue.getValue()) || !nameValue.getValue()) + res = 0; return res; } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java index 83b9cb83..70904d81 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java @@ -77,6 +77,10 @@ public class ServerJob extends Monitor implements Job { if (blank1 || blank2 || hasKey) continue; + // 根据sourceId查询Server信息(缓存) + String sourceId = alarmRule.getSourceId(); + String serverName = getAlarmClient().getServerName(sourceId); + // 向运管查询监控项数据 Result result = getMonitorSystem().itemBack(itemId, 0, start, end); Double current = result.getResult().getNow(); @@ -94,8 +98,9 @@ public class ServerJob extends Monitor implements Job { alarmLog.setOperator(operator); alarmLog.setAlarmValue(StrUtil.toString(current)); String ruleName = alarmRule.getName(); - String message = "您设定的预警规则:"+ruleName+"," + - "预警信息为:"+ operator + ",当前值为:" + current; + String message = String.format("您的服务器: [%s]", serverName); + message += String.format(",设定的预警规则: %s", ruleName); + message += String.format(",预警信息为: %s,当前值为: %s", operator, current); alarmLog.setAlarmInfo(message); getAlarmClient().create(alarmLog); @@ -110,9 +115,9 @@ public class ServerJob extends Monitor implements Job { getSendMessage().send(message, groupId, notific); } } catch (JsonProcessingException e) { - log.error("Server预警规则:{}解析失败,失败原因:{}!", operator, e.getMessage()); + log.error("Server预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); }catch (RuntimeException e){ - log.error("Server监控异常:{}",e.getMessage()); + log.error("Server监控异常: {}", e.getMessage()); } } destroy(); diff --git a/jeecg-server-cloud/armd-abnormal-alarm-start/pom.xml b/jeecg-server-cloud/armd-abnormal-alarm-start/pom.xml index 8c7f40a2..f49111e2 100644 --- a/jeecg-server-cloud/armd-abnormal-alarm-start/pom.xml +++ b/jeecg-server-cloud/armd-abnormal-alarm-start/pom.xml @@ -18,6 +18,15 @@ jeecg-module-abnormal-alarm 3.5.1 + diff --git a/jeecg-server-cloud/armd-spectrum-analysis-start/src/main/resources/application.yml b/jeecg-server-cloud/armd-spectrum-analysis-start/src/main/resources/application.yml index 79f51140..3deaf293 100644 --- a/jeecg-server-cloud/armd-spectrum-analysis-start/src/main/resources/application.yml +++ b/jeecg-server-cloud/armd-spectrum-analysis-start/src/main/resources/application.yml @@ -15,5 +15,5 @@ spring: config: import: - optional:nacos:armd.yaml - - optional:nacos:armd-@profile.name@1.yaml + - optional:nacos:armd-@profile.name@.yaml - optional:nacos:armd-analysis-@profile.name@.yaml