From 4f13875e01b7f8e917847f0e3e5f085025c27d7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BC=9A=E7=BC=96=E7=A8=8B=E7=9A=84=E7=8E=8B=E5=AD=A6?= =?UTF-8?q?=E9=95=BF?= <71161318+wang1027-wqh@users.noreply.github.com> Date: Sun, 10 Apr 2022 20:51:30 +0800 Subject: [PATCH] [monitor]feature: Alarm and receiving Chinese and English support (#82) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 代码名称优化 #huacheng * fix: msgtype更正名称 #huacheng * fix: 企业微信更正名称 #huacheng * feat: Alarm and receiving Chinese and English support #huacheng Co-authored-by: tomsun28 --- .../alert/controller/AlertsController.java | 40 +++++++------- .../java/com/usthe/alert/dao/AlertDao.java | 15 ++++-- .../com/usthe/alert/dto/AlertPriorityNum.java | 9 +++- .../com/usthe/alert/dto/AlertSummary.java | 28 +++++++--- .../com/usthe/alert/service/AlertService.java | 33 ++++++++---- .../alert/service/impl/AlertServiceImpl.java | 17 ++++-- .../usthe/common/entity/alerter/Alert.java | 43 ++++++++++----- .../common/entity/manager/NoticeReceiver.java | 52 ++++++++++++++----- .../common/entity/manager/NoticeRule.java | 44 ++++++++++++---- .../component/alerter/DispatchAlarm.java | 44 +++++++++------- .../controller/NoticeConfigController.java | 37 +++++++------ .../manager/controller/SummaryController.java | 6 ++- .../com/usthe/manager/dao/MonitorDao.java | 22 +++++--- .../usthe/manager/service/MailService.java | 8 +-- .../usthe/manager/service/MonitorService.java | 35 +++++++++---- .../manager/service/NoticeConfigService.java | 44 +++++++++++----- .../service/impl/MonitorServiceImpl.java | 10 +++- 17 files changed, 333 insertions(+), 154 deletions(-) diff --git a/alerter/src/main/java/com/usthe/alert/controller/AlertsController.java b/alerter/src/main/java/com/usthe/alert/controller/AlertsController.java index 3482efa..290fd74 100644 --- a/alerter/src/main/java/com/usthe/alert/controller/AlertsController.java +++ b/alerter/src/main/java/com/usthe/alert/controller/AlertsController.java @@ -30,11 +30,12 @@ import java.util.List; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; /** - * 告警管理API + * Alarm Management API 告警管理API + * * @author tom * @date 2021/12/9 10:32 */ -@Api(tags = "告警批量管理API") +@Api(tags = "en: Alarm batch management API, zh:告警批量管理API") @RestController @RequestMapping(path = "/alerts", produces = {APPLICATION_JSON_VALUE}) public class AlertsController { @@ -43,23 +44,23 @@ public class AlertsController { private AlertService alertService; @GetMapping - @ApiOperation(value = "查询告警列表", notes = "根据查询过滤项获取告警信息列表") + @ApiOperation(value = "Get a list of alarm information based on query filter items", notes = "根据查询过滤项获取告警信息列表") public ResponseEntity>> getAlerts( - @ApiParam(value = "告警ID", example = "6565466456") @RequestParam(required = false) List ids, - @ApiParam(value = "告警监控对象ID", example = "6565463543") @RequestParam(required = false) Long monitorId, - @ApiParam(value = "告警级别", example = "6565463543") @RequestParam(required = false) Byte priority, - @ApiParam(value = "告警状态", example = "6565463543") @RequestParam(required = false) Byte status, - @ApiParam(value = "告警内容模糊查询", example = "linux") @RequestParam(required = false) String content, - @ApiParam(value = "排序字段,默认id", example = "name") @RequestParam(defaultValue = "id") String sort, - @ApiParam(value = "排序方式,asc:升序,desc:降序", example = "desc") @RequestParam(defaultValue = "desc") String order, - @ApiParam(value = "列表当前分页", example = "0") @RequestParam(defaultValue = "0") int pageIndex, - @ApiParam(value = "列表分页数量", example = "8") @RequestParam(defaultValue = "8") int pageSize) { + @ApiParam(value = "en: Alarm ID List,zh: 告警IDS", example = "6565466456") @RequestParam(required = false) List ids, + @ApiParam(value = "en: Alarm monitor object ID,zh: 告警监控对象ID", example = "6565463543") @RequestParam(required = false) Long monitorId, + @ApiParam(value = "en: Alarm level,zh: 告警级别", example = "6565463543") @RequestParam(required = false) Byte priority, + @ApiParam(value = "en: Alarm Status,zh: 告警状态", example = "6565463543") @RequestParam(required = false) Byte status, + @ApiParam(value = "en: Alarm content fuzzy query,zh:告警内容模糊查询", example = "linux") @RequestParam(required = false) String content, + @ApiParam(value = "en: Sort field, default id,zh: 排序字段,默认id", example = "name") @RequestParam(defaultValue = "id") String sort, + @ApiParam(value = "en: Sort Type,zh: 排序方式,asc:升序,desc:降序", example = "desc") @RequestParam(defaultValue = "desc") String order, + @ApiParam(value = "en: List current page,zh: 列表当前分页", example = "0") @RequestParam(defaultValue = "0") int pageIndex, + @ApiParam(value = "en: Number of list pagination,zh: 列表分页数量", example = "8") @RequestParam(defaultValue = "8") int pageSize) { Specification specification = (root, query, criteriaBuilder) -> { List andList = new ArrayList<>(); if (ids != null && !ids.isEmpty()) { - CriteriaBuilder.In inPredicate= criteriaBuilder.in(root.get("id")); + CriteriaBuilder.In inPredicate = criteriaBuilder.in(root.get("id")); for (long id : ids) { inPredicate.value(id); } @@ -92,10 +93,9 @@ public class AlertsController { } @DeleteMapping - @ApiOperation(value = "批量删除告警", notes = "根据告警ID列表批量删除告警") + @ApiOperation(value = "Delete alarms in batches", notes = "根据告警ID列表批量删除告警") public ResponseEntity> deleteAlertDefines( - @ApiParam(value = "告警IDs", example = "6565463543") @RequestParam(required = false) List ids - ) { + @ApiParam(value = "en:Alarm List ID,zh: 告警IDs", example = "6565463543") @RequestParam(required = false) List ids) { if (ids != null && !ids.isEmpty()) { alertService.deleteAlerts(new HashSet<>(ids)); } @@ -104,10 +104,10 @@ public class AlertsController { } @PutMapping(path = "/status/{status}") - @ApiOperation(value = "批量修改告警状态", notes = "批量修改告警状态,设置已读未读") + @ApiOperation(value = "Batch modify alarm status, set read and unread", notes = "批量修改告警状态,设置已读未读") public ResponseEntity> applyAlertDefinesStatus( - @ApiParam(value = "告警状态值", example = "0") @PathVariable Byte status, - @ApiParam(value = "告警IDs", example = "6565463543") @RequestParam(required = false) List ids) { + @ApiParam(value = "en:Alarm status value,zh: 告警状态值", example = "0") @PathVariable Byte status, + @ApiParam(value = "en:Alarm List IDS,zh: 告警IDS", example = "6565463543") @RequestParam(required = false) List ids) { if (ids != null && status != null && !ids.isEmpty()) { alertService.editAlertStatus(status, ids); } @@ -116,7 +116,7 @@ public class AlertsController { } @GetMapping(path = "/summary") - @ApiOperation(value = "获取告警统计信息", notes = "获取告警统计信息") + @ApiOperation(value = "Get alarm statistics", notes = "获取告警统计信息") public ResponseEntity> getAlertsSummary() { AlertSummary alertSummary = alertService.getAlertsSummary(); Message message = new Message<>(alertSummary); diff --git a/alerter/src/main/java/com/usthe/alert/dao/AlertDao.java b/alerter/src/main/java/com/usthe/alert/dao/AlertDao.java index 56ac51f..73fae7d 100644 --- a/alerter/src/main/java/com/usthe/alert/dao/AlertDao.java +++ b/alerter/src/main/java/com/usthe/alert/dao/AlertDao.java @@ -12,30 +12,35 @@ import java.util.List; import java.util.Set; /** - * Alert 数据库操作 + * Alert Database Operations Alert数据库表操作 + * * @author tom * @date 2021/12/9 10:03 */ public interface AlertDao extends JpaRepository, JpaSpecificationExecutor { /** - * 根据ID列表删除告警 - * @param alertIds 告警ID列表 + * Delete alerts based on ID list 根据ID列表删除告警 + * + * @param alertIds Alert ID List 告警ID列表 */ void deleteAlertsByIdIn(Set alertIds); /** * 根据告警ID-状态值 更新告警状态 + * * @param status 状态值 - * @param ids 告警ID列表 + * @param ids 告警ID列表 */ @Modifying @Query("update Alert set status = :status where id in :ids") void updateAlertsStatus(@Param(value = "status") Byte status, @Param(value = "ids") List ids); /** + * Query the number of unhandled alarms of each alarm severity * 查询各个告警级别的未处理告警数量 - * @return 告警数量 + * + * @return Number of alerts 告警数量 */ @Query("select new com.usthe.alert.dto.AlertPriorityNum(mo.priority, count(mo.id)) from Alert mo where mo.status = 0 group by mo.priority") List findAlertPriorityNum(); diff --git a/alerter/src/main/java/com/usthe/alert/dto/AlertPriorityNum.java b/alerter/src/main/java/com/usthe/alert/dto/AlertPriorityNum.java index 81d590c..b687eec 100644 --- a/alerter/src/main/java/com/usthe/alert/dto/AlertPriorityNum.java +++ b/alerter/src/main/java/com/usthe/alert/dto/AlertPriorityNum.java @@ -4,7 +4,8 @@ import lombok.AllArgsConstructor; import lombok.Data; /** - * 监控级别告警数量 + * Number of monitoring level alarms 监控级别告警数量 + * * @author tom * @date 2022/3/6 19:52 */ @@ -12,7 +13,13 @@ import lombok.Data; @AllArgsConstructor public class AlertPriorityNum { + /** + * Alarm level 告警级别 + */ private byte priority; + /** + * count 数量 + */ private long num; } diff --git a/alerter/src/main/java/com/usthe/alert/dto/AlertSummary.java b/alerter/src/main/java/com/usthe/alert/dto/AlertSummary.java index 7a21d5c..47a3112 100644 --- a/alerter/src/main/java/com/usthe/alert/dto/AlertSummary.java +++ b/alerter/src/main/java/com/usthe/alert/dto/AlertSummary.java @@ -9,31 +9,43 @@ import lombok.NoArgsConstructor; import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_ONLY; /** - * 告警统计信息 + * Alarm Statistics Information 告警统计信息 + * * @author tom * @date 2022/3/6 19:25 */ @Data @AllArgsConstructor @NoArgsConstructor -@ApiModel(description = "告警统计信息") +@ApiModel(description = "en:Alarm Statistics Information,zh: 告警统计信息") public class AlertSummary { - @ApiModelProperty(value = "告警总数量(包括已处理未处理告警)", example = "134", accessMode = READ_ONLY, position = 0) + @ApiModelProperty(value = "Total number of alerts (including processed and unprocessed alerts)", + notes = "告警总数量(包括已处理未处理告警)", + example = "134", accessMode = READ_ONLY, position = 0) private long total; - @ApiModelProperty(value = "已处理告警数量", example = "34", accessMode = READ_ONLY, position = 1) + @ApiModelProperty(value = "Number of alerts handled", + notes = "已处理告警数量", + example = "34", accessMode = READ_ONLY, position = 1) private long dealNum; - @ApiModelProperty(value = "告警处理率", example = "39.34", accessMode = READ_ONLY, position = 2) + @ApiModelProperty(value = "Alarm handling rate", + notes = "告警处理率", + example = "39.34", accessMode = READ_ONLY, position = 2) private float rate; - @ApiModelProperty(value = "告警级别为警告告警的告警数量(指未处理告警)", example = "43", accessMode = READ_ONLY, position = 3) + @ApiModelProperty(value = "Number of alarms whose alarm severity is warning alarms (referring to unhandled alarms)", + notes = "告警级别为警告告警的告警数量(指未处理告警)", + example = "43", accessMode = READ_ONLY, position = 3) private long priorityWarningNum; - @ApiModelProperty(value = "告警级别为严重告警的告警数量(指未处理告警)", example = "56", accessMode = READ_ONLY, position = 4) + @ApiModelProperty(value = "Number of alarms whose alarm severity is critical alarms (referring to unhandled alarms)", + notes = "告警级别为严重告警的告警数量(指未处理告警)", + example = "56", accessMode = READ_ONLY, position = 4) private long priorityCriticalNum; - @ApiModelProperty(value = "告警级别为紧急告警的告警数量(指未处理告警)", example = "23", accessMode = READ_ONLY, position = 5) + @ApiModelProperty(value = "Number of alarms whose alarm severity is urgent alarms (referring to unhandled alarms)", + notes = "告警级别为紧急告警的告警数量(指未处理告警)", example = "23", accessMode = READ_ONLY, position = 5) private long priorityEmergencyNum; } diff --git a/alerter/src/main/java/com/usthe/alert/service/AlertService.java b/alerter/src/main/java/com/usthe/alert/service/AlertService.java index cca85d1..1037f3b 100644 --- a/alerter/src/main/java/com/usthe/alert/service/AlertService.java +++ b/alerter/src/main/java/com/usthe/alert/service/AlertService.java @@ -10,43 +10,54 @@ import java.util.HashSet; import java.util.List; /** + * Alarm information management interface * 告警信息管理接口 + * * @author tom * @date 2021/12/9 10:06 */ public interface AlertService { /** - * 新增告警 - * @param alert 告警实体 - * @throws RuntimeException 新增过程异常抛出 + * Add alarm record + * 新增告警记录 + * + * @param alert Alert entity 告警实体 + * @throws RuntimeException Add process exception throw 新增过程异常抛出 */ void addAlert(Alert alert) throws RuntimeException; /** + * Dynamic conditional query * 动态条件查询 - * @param specification 查询条件 - * @param pageRequest 分页参数 - * @return 查询结果 + * + * @param specification Query conditions 查询条件 + * @param pageRequest pagination parameters 分页参数 + * @return search result 查询结果 */ Page getAlerts(Specification specification, PageRequest pageRequest); /** + * Delete alarms in batches according to the alarm ID list * 根据告警ID列表批量删除告警 - * @param ids 告警IDs + * + * @param ids Alarm ID List 告警IDS */ void deleteAlerts(HashSet ids); /** + * Update the alarm status according to the alarm ID-status value * 根据告警ID-状态值 更新告警状态 - * @param status 待修改为的告警状态 - * @param ids 待修改的告警IDs + * + * @param status Alarm status to be modified 待修改为的告警状态 + * @param ids Alarm ID List to be modified 待修改的告警ID集合 */ void editAlertStatus(Byte status, List ids); /** - * 获取告警统计信息 - * @return 告警统计 + * Get alarm statistics information 获取告警统计信息 + * + * @return Alarm statistics information 告警统计 */ AlertSummary getAlertsSummary(); diff --git a/alerter/src/main/java/com/usthe/alert/service/impl/AlertServiceImpl.java b/alerter/src/main/java/com/usthe/alert/service/impl/AlertServiceImpl.java index 9958022..b0e0058 100644 --- a/alerter/src/main/java/com/usthe/alert/service/impl/AlertServiceImpl.java +++ b/alerter/src/main/java/com/usthe/alert/service/impl/AlertServiceImpl.java @@ -20,7 +20,8 @@ import java.util.HashSet; import java.util.List; /** - * 告警信息服务实现 + * Realization of Alarm Information Service 告警信息服务实现 + * * @author tom * @date 2021/12/10 15:39 */ @@ -55,18 +56,24 @@ public class AlertServiceImpl implements AlertService { @Override public AlertSummary getAlertsSummary() { AlertSummary alertSummary = new AlertSummary(); + //Statistics on the alarm information in the alarm state + //统计正在告警状态下的告警信息 List priorityNums = alertDao.findAlertPriorityNum(); if (priorityNums != null) { for (AlertPriorityNum priorityNum : priorityNums) { switch (priorityNum.getPriority()) { case CommonConstants .ALERT_PRIORITY_CODE_WARNING: - alertSummary.setPriorityWarningNum(priorityNum.getNum());break; + alertSummary.setPriorityWarningNum(priorityNum.getNum()); + break; case CommonConstants.ALERT_PRIORITY_CODE_CRITICAL: - alertSummary.setPriorityCriticalNum(priorityNum.getNum());break; + alertSummary.setPriorityCriticalNum(priorityNum.getNum()); + break; case CommonConstants.ALERT_PRIORITY_CODE_EMERGENCY: - alertSummary.setPriorityEmergencyNum(priorityNum.getNum());break; - default: break; + alertSummary.setPriorityEmergencyNum(priorityNum.getNum()); + break; + default: + break; } } } diff --git a/common/src/main/java/com/usthe/common/entity/alerter/Alert.java b/common/src/main/java/com/usthe/common/entity/alerter/Alert.java index 11b6a1b..089b18d 100644 --- a/common/src/main/java/com/usthe/common/entity/alerter/Alert.java +++ b/common/src/main/java/com/usthe/common/entity/alerter/Alert.java @@ -23,7 +23,8 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_ONLY; import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE; /** - * 告警记录 + * Alarm record entity 告警记录实体 + * * @author tom * @date 2021/12/9 15:37 */ @@ -33,52 +34,68 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE; @Builder @AllArgsConstructor @NoArgsConstructor -@ApiModel(description = "告警记录实体") +@ApiModel(description = "en: Alarm record entity zh: 告警记录实体") public class Alert { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @ApiModelProperty(value = "告警记录实体主键索引ID", example = "87584674384", accessMode = READ_ONLY, position = 0) + @ApiModelProperty(value = "Alarm record entity primary key index ID", + notes = "告警记录实体主键索引ID", + example = "87584674384", accessMode = READ_ONLY, position = 0) private Long id; - @ApiModelProperty(value = "告警目标对象: 监控可用性-available 指标-app.metrics.field", + @ApiModelProperty(value = "Alert target object: monitor availability-available metrics-app.metrics.field", + notes = "告警目标对象: 监控可用性-available 指标-app.metrics.field", example = "1", accessMode = READ_WRITE, position = 1) @Length(max = 255) private String target; - @ApiModelProperty(value = "告警对象关联的监控ID", example = "87432674336", accessMode = READ_WRITE, position = 2) + @ApiModelProperty(value = "Monitoring ID associated with the alarm object", + notes = "告警对象关联的监控ID", + example = "87432674336", accessMode = READ_WRITE, position = 2) private Long monitorId; - @ApiModelProperty(value = "告警对象关联的监控名称", example = "Linux_192.132.23.1", - accessMode = READ_WRITE, position = 3) + @ApiModelProperty(value = "Monitoring name associated with the alarm object", + notes = "告警对象关联的监控名称", + example = "Linux_192.132.23.1", accessMode = READ_WRITE, position = 3) private String monitorName; - @ApiModelProperty(value = "告警关联的告警定义ID", example = "8743267443543", accessMode = READ_WRITE, position = 4) + @ApiModelProperty(value = "Alarm definition ID associated with the alarm", + notes = "告警关联的告警定义ID", + example = "8743267443543", accessMode = READ_WRITE, position = 4) private Long alertDefineId; - @ApiModelProperty(value = "告警级别 0:高-emergency-紧急告警-红色 1:中-critical-严重告警-橙色 2:低-warning-警告告警-黄色", + @ApiModelProperty(value = "Alarm level 0: high-emergency-critical alarm-red 1: medium-critical-critical alarm-orange 2: low-warning-warning alarm-yellow", + notes = "告警级别 0:高-emergency-紧急告警-红色 1:中-critical-严重告警-橙色 2:低-warning-警告告警-黄色", example = "1", accessMode = READ_WRITE, position = 5) @Min(0) @Max(2) private byte priority; - @ApiModelProperty(value = "告警通知实际内容", example = "linux_192.134.32.1: 534543534 cpu usage high", + @ApiModelProperty(value = "The actual content of the alarm notification", + notes = "告警通知实际内容", + example = "linux_192.134.32.1: 534543534 cpu usage high", accessMode = READ_WRITE, position = 6) @Length(max = 1024) private String content; - @ApiModelProperty(value = "告警状态: 0-正常告警(待处理) 1-阈值触发但未达到告警次数 2-恢复告警 3-已处理", + @ApiModelProperty(value = "Alarm status: 0-normal alarm (to be processed) 1-threshold triggered but not reached the number of alarms 2-recovered alarm 3-processed", + notes = "告警状态: 0-正常告警(待处理) 1-阈值触发但未达到告警次数 2-恢复告警 3-已处理", example = "1", accessMode = READ_WRITE, position = 7) @Min(0) @Max(2) private byte status; - @ApiModelProperty(value = "告警阈值触发次数", example = "3", accessMode = READ_WRITE, position = 8) + @ApiModelProperty(value = "Alarm threshold trigger times", + notes = "告警阈值触发次数", + example = "3", accessMode = READ_WRITE, position = 8) @Min(0) @Max(10) private int times; - @ApiModelProperty(value = "告警触发时间(毫秒时间戳)", example = "1612198922000", accessMode = READ_ONLY, position = 9) + @ApiModelProperty(value = "Alarm trigger time (timestamp in milliseconds)", + notes = "告警触发时间(毫秒时间戳)", + example = "1612198922000", accessMode = READ_ONLY, position = 9) @Column(insertable = false, updatable = false) private LocalDateTime gmtCreate; diff --git a/common/src/main/java/com/usthe/common/entity/manager/NoticeReceiver.java b/common/src/main/java/com/usthe/common/entity/manager/NoticeReceiver.java index 3faba36..c91716b 100644 --- a/common/src/main/java/com/usthe/common/entity/manager/NoticeReceiver.java +++ b/common/src/main/java/com/usthe/common/entity/manager/NoticeReceiver.java @@ -23,7 +23,9 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_ONLY; import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE; /** + * Message notification recipient entity * 消息通知接收人实体 + * * @author tomsun28 * @date 2021/11/13 22:19 */ @@ -33,56 +35,80 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE; @Builder @AllArgsConstructor @NoArgsConstructor -@ApiModel(description = "消息通知接收人实体") +@ApiModel(description = "en: Message notification recipient entity,zh:消息通知接收人实体") public class NoticeReceiver { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @ApiModelProperty(value = "接收人实体主键索引ID", example = "87584674384", accessMode = READ_ONLY, position = 0) + @ApiModelProperty(value = "Recipient entity primary key index ID", + notes = "接收人实体主键索引ID", + example = "87584674384", accessMode = READ_ONLY, position = 0) private Long id; - @ApiModelProperty(value = "接收人名称", example = "tom", accessMode = READ_WRITE, position = 1) + @ApiModelProperty(value = "Recipient name", + notes = "接收人名称", + example = "tom", accessMode = READ_WRITE, position = 1) @Length(max = 100) @NotNull private String name; - @ApiModelProperty(value = "通知信息方式: 0-手机短信 1-邮箱 2-webhook 3-微信公众号 4-企业微信机器人 5-钉钉机器人 6-飞书机器人", accessMode = READ_WRITE, position = 2) + @ApiModelProperty(value = "Notification information method: 0-SMS 1-Email 2-webhook 3-WeChat Official Account 4-Enterprise WeChat Robot 5-DingTalk Robot 6-FeiShu Robot", + notes = "通知信息方式: 0-手机短信 1-邮箱 2-webhook 3-微信公众号 4-企业微信机器人 5-钉钉机器人 6-飞书机器人", + accessMode = READ_WRITE, position = 2) @Min(0) @Max(8) @NotNull private Byte type; - @ApiModelProperty(value = "手机号, 通知方式为手机短信时有效", example = "18923435643", accessMode = READ_WRITE, position = 3) + @ApiModelProperty(value = "Mobile number: Valid when the notification method is SMS", + notes = "手机号 : 通知方式为手机短信时有效", + example = "18923435643", accessMode = READ_WRITE, position = 3) @Length(max = 100) private String phone; - @ApiModelProperty(value = "邮箱账号, 通知方式为邮箱时有效", example = "tom@qq.com", accessMode = READ_WRITE, position = 4) + @ApiModelProperty(value = "Email account: Valid when the notification method is email", + notes = "邮箱账号 : 通知方式为邮箱时有效", + example = "tom@qq.com", accessMode = READ_WRITE, position = 4) @Length(max = 100) private String email; - @ApiModelProperty(value = "URL地址, 通知方式为webhook有效", example = "https://www.tancloud.cn", accessMode = READ_WRITE, position = 5) + @ApiModelProperty(value = "URL address: The notification method is valid for webhook", + notes = "URL地址 : 通知方式为webhook有效", + example = "https://www.tancloud.cn", accessMode = READ_WRITE, position = 5) @Length(max = 300) private String hookUrl; - @ApiModelProperty(value = "openId, 通知方式为微信公众号或企业微信机器人有效", example = "343432", accessMode = READ_WRITE, position = 6) + @ApiModelProperty(value = "openId : The notification method is valid for WeChat official account or enterprise WeChat robot", + notes = "openId : 通知方式为微信公众号或企业微信机器人有效", + example = "343432", accessMode = READ_WRITE, position = 6) @Length(max = 300) private String wechatId; - @ApiModelProperty(value = "访问token, 通知方式为钉钉机器人有效", example = "34823984635647", accessMode = READ_WRITE, position = 7) + @ApiModelProperty(value = "Access token : The notification method is valid for DingTalk robot", + notes = "访问token : 通知方式为钉钉机器人有效", + example = "34823984635647", accessMode = READ_WRITE, position = 7) @Length(max = 300) private String accessToken; - @ApiModelProperty(value = "此条记录创建者", example = "tom", accessMode = READ_ONLY, position = 7) + @ApiModelProperty(value = "The creator of this record", + notes = "此条记录创建者", + example = "tom", accessMode = READ_ONLY, position = 7) private String creator; - @ApiModelProperty(value = "此条记录最新修改者", example = "tom", accessMode = READ_ONLY, position = 8) + @ApiModelProperty(value = "This record was last modified by", + notes = "此条记录最新修改者", + example = "tom", accessMode = READ_ONLY, position = 8) private String modifier; - @ApiModelProperty(value = "记录创建时间(毫秒时间戳)", example = "1612198922000", accessMode = READ_ONLY, position = 9) + @ApiModelProperty(value = "Record creation time (millisecond timestamp)", + notes = "记录创建时间(毫秒时间戳)", + example = "1612198922000", accessMode = READ_ONLY, position = 9) @Column(insertable = false, updatable = false) private LocalDateTime gmtCreate; - @ApiModelProperty(value = "记录最新修改时间(毫秒时间戳)", example = "1612198444000", accessMode = READ_ONLY, position = 10) + @ApiModelProperty(value = "Record the latest modification time (timestamp in milliseconds)", + notes = "记录最新修改时间(毫秒时间戳)", + example = "1612198444000", accessMode = READ_ONLY, position = 10) @Column(insertable = false, updatable = false) private LocalDateTime gmtUpdate; diff --git a/common/src/main/java/com/usthe/common/entity/manager/NoticeRule.java b/common/src/main/java/com/usthe/common/entity/manager/NoticeRule.java index 175dcc1..91391a6 100644 --- a/common/src/main/java/com/usthe/common/entity/manager/NoticeRule.java +++ b/common/src/main/java/com/usthe/common/entity/manager/NoticeRule.java @@ -21,7 +21,9 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_ONLY; import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE; /** + * Notification strategy entity * 通知策略 + * * @author tomsun28 * @date 2021/11/13 22:19 */ @@ -31,45 +33,65 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE; @Builder @AllArgsConstructor @NoArgsConstructor -@ApiModel(description = "通知策略实体") +@ApiModel(description = "en: Notify Policy Entity,zh: 通知策略实体") public class NoticeRule { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @ApiModelProperty(value = "通知策略实体主键索引ID", example = "87584674384", accessMode = READ_ONLY, position = 0) + @ApiModelProperty(value = "Notification Policy Entity Primary Key Index ID", + notes = "通知策略实体主键索引ID", + example = "87584674384", accessMode = READ_ONLY, position = 0) private Long id; - @ApiModelProperty(value = "策略名称", example = "dispatch-1", accessMode = READ_WRITE, position = 1) + @ApiModelProperty(value = "Policy name", + notes = "策略名称", + example = "dispatch-1", accessMode = READ_WRITE, position = 1) @Length(max = 100) @NotNull private String name; - @ApiModelProperty(value = "接收人ID", example = "4324324", accessMode = READ_WRITE, position = 2) + @ApiModelProperty(value = "Recipient ID", + notes = "接收人ID", + example = "4324324", accessMode = READ_WRITE, position = 2) @NotNull private Long receiverId; - @ApiModelProperty(value = "接收人标识", example = "tom", accessMode = READ_WRITE, position = 3) + @ApiModelProperty(value = "Recipient identification", + notes = "接收人标识", + example = "tom", accessMode = READ_WRITE, position = 3) @Length(max = 100) @NotNull private String receiverName; - @ApiModelProperty(value = "是否启用此策略", example = "true", accessMode = READ_WRITE, position = 4) + @ApiModelProperty(value = "Whether to enable this policy", + notes = "是否启用此策略", + example = "true", accessMode = READ_WRITE, position = 4) private boolean enable = true; - @ApiModelProperty(value = "是否转发所有", example = "false", accessMode = READ_WRITE, position = 5) + @ApiModelProperty(value = "Whether to forward all", + notes = "是否转发所有", + example = "false", accessMode = READ_WRITE, position = 5) private boolean filterAll = true; - @ApiModelProperty(value = "此条记录创建者", example = "tom", accessMode = READ_ONLY, position = 7) + @ApiModelProperty(value = "The creator of this record", + notes = "此条记录创建者", + example = "tom", accessMode = READ_ONLY, position = 7) private String creator; - @ApiModelProperty(value = "此条记录最新修改者", example = "tom", accessMode = READ_ONLY, position = 8) + @ApiModelProperty(value = "This record was last modified by", + notes = "此条记录最新修改者", + example = "tom", accessMode = READ_ONLY, position = 8) private String modifier; - @ApiModelProperty(value = "记录创建时间(毫秒时间戳)", example = "1612198922000", accessMode = READ_ONLY, position = 9) + @ApiModelProperty(value = "This record creation time (millisecond timestamp)", + notes = "记录创建时间(毫秒时间戳)", + example = "1612198922000", accessMode = READ_ONLY, position = 9) @Column(insertable = false, updatable = false) private LocalDateTime gmtCreate; - @ApiModelProperty(value = "记录最新修改时间(毫秒时间戳)", example = "1612198444000", accessMode = READ_ONLY, position = 10) + @ApiModelProperty(value = "Record the latest modification time (timestamp in milliseconds)", + notes = "记录最新修改时间(毫秒时间戳)", + example = "1612198444000", accessMode = READ_ONLY, position = 10) @Column(insertable = false, updatable = false) private LocalDateTime gmtUpdate; diff --git a/manager/src/main/java/com/usthe/manager/component/alerter/DispatchAlarm.java b/manager/src/main/java/com/usthe/manager/component/alerter/DispatchAlarm.java index a989688..ca01fe0 100644 --- a/manager/src/main/java/com/usthe/manager/component/alerter/DispatchAlarm.java +++ b/manager/src/main/java/com/usthe/manager/component/alerter/DispatchAlarm.java @@ -30,6 +30,7 @@ import java.util.Date; import java.util.List; /** + * Alarm information storage and distribution * 告警信息入库分发 * * @author tom @@ -71,7 +72,7 @@ public class DispatchAlarm { try { Alert alert = dataQueue.pollAlertData(); if (alert != null) { - // 判断告警类型入库 + // Determining alarm type storage 判断告警类型入库 storeAlertData(alert); // 通知分发 sendAlertDataListener(alert); @@ -87,7 +88,7 @@ public class DispatchAlarm { } private void storeAlertData(Alert alert) { - // todo 使用缓存不直接操作库 + // todo Using the cache does not directly manipulate the library 使用缓存不直接操作库 Monitor monitor = monitorService.getMonitor(alert.getMonitorId()); if (monitor == null) { log.warn("Dispatch alarm the monitorId: {} not existed, ignored.", alert.getMonitorId()); @@ -95,34 +96,38 @@ public class DispatchAlarm { } alert.setMonitorName(monitor.getName()); if (monitor.getStatus() == CommonConstants.UN_MANAGE_CODE) { + // When monitoring is not managed, ignore and silence its alarm messages // 当监控未管理时 忽略静默其告警信息 return; } if (monitor.getStatus() == CommonConstants.AVAILABLE_CODE) { if (CommonConstants.AVAILABLE.equals(alert.getTarget())) { + // Availability Alarm Need to change the monitoring status to unavailable // 可用性告警 需变更监控状态为不可用 monitorService.updateMonitorStatus(monitor.getId(), CommonConstants.UN_AVAILABLE_CODE); } else if (CommonConstants.REACHABLE.equals(alert.getTarget())) { + // Reachability alarm The monitoring status needs to be changed to unreachable // 可达性告警 需变更监控状态为不可达 monitorService.updateMonitorStatus(monitor.getId(), CommonConstants.UN_REACHABLE_CODE); } } else { + // If the alarm is restored, the monitoring state needs to be restored // 若是恢复告警 需对监控状态进行恢复 if (alert.getStatus() == CommonConstants.ALERT_STATUS_CODE_RESTORED) { monitorService.updateMonitorStatus(alert.getMonitorId(), CommonConstants.AVAILABLE_CODE); } } - // 告警落库 + // Alarm drop library 告警落库 alertService.addAlert(alert); } private void sendAlertDataListener(Alert alert) { - // todo 转发配置的邮件 微信 webhook + // todo Forward configured email WeChat webhook 转发配置的邮件 微信 webhook List receivers = matchReceiverByNoticeRules(alert); - // todo 发送通知这里暂时单线程 + // todo Send notification here temporarily single thread 发送通知这里暂时单线程 for (NoticeReceiver receiver : receivers) { switch (receiver.getType()) { - // todo 短信通知 + // todo SMS notification 短信通知 case 0: break; case 1: @@ -150,10 +155,11 @@ public class DispatchAlarm { } /** + * Send alert information through FeiShu * 通过飞书发送告警信息 * - * @param receiver 接收人 - * @param alert 告警信息 + * @param receiver Notification configuration information 通知配置信息 + * @param alert Alarm information 告警信息 */ private void sendFlyBookAlert(NoticeReceiver receiver, Alert alert) { FlyBookWebHookDto flyBookWebHookDto = new FlyBookWebHookDto(); @@ -199,10 +205,11 @@ public class DispatchAlarm { } /** + * Send alarm information through DingTalk robot * 通过钉钉机器人发送告警信息 * - * @param receiver 通知配置信息 - * @param alert 告警信息 + * @param receiver Notification configuration information 通知配置信息 + * @param alert Alarm information 告警信息 */ private void sendDingTalkRobotAlert(NoticeReceiver receiver, Alert alert) { DingTalkWebHookDto dingTalkWebHookDto = new DingTalkWebHookDto(); @@ -233,10 +240,11 @@ public class DispatchAlarm { } /** + * Send alarm information through enterprise WeChat * 通过企业微信发送告警信息 * - * @param receiver 通知配置信息 - * @param alert 告警信息 + * @param receiver Notification configuration information 通知配置信息 + * @param alert Alarm information 告警信息 */ private void sendWeWorkRobotAlert(NoticeReceiver receiver, Alert alert) { WeWorkWebHookDto weWorkWebHookDTO = new WeWorkWebHookDto(); @@ -296,23 +304,23 @@ public class DispatchAlarm { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); messageHelper.setSubject("TanCloud探云-监控告警"); - //设置发件人Email + //Set sender Email 设置发件人Email messageHelper.setFrom(emailFromUser); - //设定收件人Email + //Set recipient Email 设定收件人Email messageHelper.setTo(receiver.getEmail()); messageHelper.setSentDate(new Date()); - //构建邮件模版 + //Build email templates 构建邮件模版 String process = mailService.buildAlertHtmlTemplate(alert); - //设置邮件内容模版 + //Set Email Content Template 设置邮件内容模版 messageHelper.setText(process, true); javaMailSender.send(mimeMessage); } catch (Exception e) { - log.error("[邮箱告警] error,Exception information={}", e.getMessage()); + log.error("[Email Alert] Exception,Exception information={}", e.getMessage()); } } private List matchReceiverByNoticeRules(Alert alert) { - // todo 使用缓存 + // todo use cache 使用缓存 return noticeConfigService.getReceiverFilterRule(alert); } diff --git a/manager/src/main/java/com/usthe/manager/controller/NoticeConfigController.java b/manager/src/main/java/com/usthe/manager/controller/NoticeConfigController.java index 2aaf181..6e7d34f 100644 --- a/manager/src/main/java/com/usthe/manager/controller/NoticeConfigController.java +++ b/manager/src/main/java/com/usthe/manager/controller/NoticeConfigController.java @@ -28,11 +28,13 @@ import java.util.List; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; /** + * Message Notification Configuration API * 消息通知配置API + * * @author tom * @date 2021/12/16 16:18 */ -@Api(tags = "消息通知配置API") +@Api(tags = "en: Message Notification Configuration API,zh: 消息通知配置API") @RestController() @RequestMapping(value = "/notice", produces = {APPLICATION_JSON_VALUE}) public class NoticeConfigController { @@ -41,33 +43,36 @@ public class NoticeConfigController { private NoticeConfigService noticeConfigService; @PostMapping(path = "/receiver") - @ApiOperation(value = "新增接收人", notes = "新增一个接收人") + @ApiOperation(value = "Add a recipient", notes = "新增一个接收人") public ResponseEntity> addNewNoticeReceiver(@Valid @RequestBody NoticeReceiver noticeReceiver) { noticeConfigService.addReceiver(noticeReceiver); return ResponseEntity.ok(new Message<>("Add success")); } @PutMapping(path = "/receiver") - @ApiOperation(value = "修改接收人", notes = "修改已存在的接收人信息") + @ApiOperation(value = "Modify existing recipient information", notes = "修改已存在的接收人信息") public ResponseEntity> editNoticeReceiver(@Valid @RequestBody NoticeReceiver noticeReceiver) { noticeConfigService.editReceiver(noticeReceiver); return ResponseEntity.ok(new Message<>("Edit success")); } @DeleteMapping(path = "/receiver/{id}") - @ApiOperation(value = "删除指定接收人", notes = "删除已存在的接收人信息") + @ApiOperation(value = "Delete existing recipient information", notes = "删除已存在的接收人信息") public ResponseEntity> deleteNoticeReceiver( - @ApiParam(value = "接收人ID", example = "6565463543") @PathVariable("id") final Long receiverId) { - // 不存在或删除成功都返回成功 + @ApiParam(value = "en: Recipient ID,zh: 接收人ID", example = "6565463543") @PathVariable("id") final Long receiverId) { + // Returns success if it does not exist or if the deletion is successful + // todo 不存在或删除成功都返回成功 noticeConfigService.deleteReceiver(receiverId); return ResponseEntity.ok(new Message<>("Delete success")); } @GetMapping(path = "/receivers") - @ApiOperation(value = "查询消息通知接收人", notes = "根据查询过滤项获取消息通知接收人列表") + @ApiOperation(value = "Get a list of message notification recipients based on query filter items", + notes = "根据查询过滤项获取消息通知接收人列表") public ResponseEntity>> getReceivers( - @ApiParam(value = "接收人名称,模糊查询", example = "tom") @RequestParam(required = false) final String name) { + @ApiParam(value = "en: Recipient name,zh: 接收人名称,模糊查询", example = "tom") @RequestParam(required = false) final String name) { + //todo Writing can be optimized 写法可优化 Specification specification = (root, query, criteriaBuilder) -> { Predicate predicate = criteriaBuilder.conjunction(); if (name != null && !"".equals(name)) { @@ -83,32 +88,34 @@ public class NoticeConfigController { @PostMapping(path = "/rule") - @ApiOperation(value = "新增通知策略", notes = "新增一个通知策略") + @ApiOperation(value = "Add a notification policy", notes = "新增一个通知策略") public ResponseEntity> addNewNoticeRule(@Valid @RequestBody NoticeRule noticeRule) { noticeConfigService.addNoticeRule(noticeRule); return ResponseEntity.ok(new Message<>("Add success")); } @PutMapping(path = "/rule") - @ApiOperation(value = "修改通知策略", notes = "修改已存在的通知策略信息") + @ApiOperation(value = "Modify existing notification policy information", notes = "修改已存在的通知策略信息") public ResponseEntity> editNoticeRule(@Valid @RequestBody NoticeRule noticeRule) { noticeConfigService.editNoticeRule(noticeRule); return ResponseEntity.ok(new Message<>("Edit success")); } @DeleteMapping(path = "/rule/{id}") - @ApiOperation(value = "删除指定通知策略", notes = "删除已存在的通知策略信息") + @ApiOperation(value = "Delete existing notification policy information", notes = "删除已存在的通知策略信息") public ResponseEntity> deleteNoticeRule( - @ApiParam(value = "通知策略ID", example = "6565463543") @PathVariable("id") final Long ruleId) { - // 不存在或删除成功都返回成功 + @ApiParam(value = "en: Notification Policy ID,zh: 通知策略ID", example = "6565463543") @PathVariable("id") final Long ruleId) { + // Returns success if it does not exist or if the deletion is successful + // todo 不存在或删除成功都返回成功 noticeConfigService.deleteNoticeRule(ruleId); return ResponseEntity.ok(new Message<>("Delete success")); } @GetMapping(path = "/rules") - @ApiOperation(value = "查询消息通知策略", notes = "根据查询过滤项获取消息通知策略列表") + @ApiOperation(value = "Get a list of message notification policies based on query filter items", + notes = "根据查询过滤项获取消息通知策略列表") public ResponseEntity>> getRules( - @ApiParam(value = "接收人名称,模糊查询", example = "rule1") @RequestParam(required = false) final String name) { + @ApiParam(value = "en: Recipient name,zh: 接收人名称,模糊查询", example = "rule1") @RequestParam(required = false) final String name) { Specification specification = (root, query, criteriaBuilder) -> { Predicate predicate = criteriaBuilder.conjunction(); diff --git a/manager/src/main/java/com/usthe/manager/controller/SummaryController.java b/manager/src/main/java/com/usthe/manager/controller/SummaryController.java index 3bdfc1d..8de22fd 100644 --- a/manager/src/main/java/com/usthe/manager/controller/SummaryController.java +++ b/manager/src/main/java/com/usthe/manager/controller/SummaryController.java @@ -18,11 +18,13 @@ import java.util.List; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; /** + * System Summary Statistics API * 系统摘要统计API + * * @author tom * @date 2021/12/7 15:57 */ -@Api(tags = "系统摘要统计API") +@Api(tags = "en: System Summary Statistics API,zh: 系统摘要统计API") @RestController @RequestMapping(path = "/summary", produces = {APPLICATION_JSON_VALUE}) public class SummaryController { @@ -31,7 +33,7 @@ public class SummaryController { private MonitorService monitorService; @GetMapping - @ApiOperation(value = "查询应用类别监控统计", notes = "查询所有应用类别监控统计信息") + @ApiOperation(value = "Query all application category monitoring statistics", notes = "查询所有应用类别监控统计信息") public ResponseEntity> appMonitors() { List appsCount = monitorService.getAllAppMonitorsCount(); Message message = new Message<>(new Dashboard(appsCount)); diff --git a/manager/src/main/java/com/usthe/manager/dao/MonitorDao.java b/manager/src/main/java/com/usthe/manager/dao/MonitorDao.java index c479242..b70d2ac 100644 --- a/manager/src/main/java/com/usthe/manager/dao/MonitorDao.java +++ b/manager/src/main/java/com/usthe/manager/dao/MonitorDao.java @@ -14,6 +14,7 @@ import java.util.Set; /** * AuthResources 数据库操作 + * * @author tomsun28 * @date 2021/11/14 11:24 */ @@ -22,12 +23,14 @@ public interface MonitorDao extends JpaRepository, JpaSpecificati /** * 根据监控ID列表删除监控 + * * @param monitorIds 监控ID列表 */ void deleteAllByIdIn(Set monitorIds); /** * 根据监控ID列表查询监控 + * * @param monitorIds 监控ID列表 * @return 监控列表 */ @@ -35,6 +38,7 @@ public interface MonitorDao extends JpaRepository, JpaSpecificati /** * 根据监控类型查询监控 + * * @param app 监控类型 * @return 监控列表 */ @@ -42,29 +46,35 @@ public interface MonitorDao extends JpaRepository, JpaSpecificati /** * 查询已下发采集任务的监控 + * * @param status 监控状态 * @return 监控列表 */ List findMonitorsByStatusNotInAndAndJobIdNotNull(List status); /** - * 根据监控名称查询监控 - * @param name 监控名称 - * @return 监控列表 + * Query monitoring by monitoring name 根据监控名称查询监控 + * + * @param name monitoring name 监控名称 + * @return monitoring list 监控列表 */ Optional findMonitorByNameEquals(String name); /** + * Query the monitoring category - the number of monitoring corresponding to the status * 查询监控类别-状态对应的监控数量 - * @return 监控类别-状态与监控数量映射 + * + * @return Monitoring Category-Status and Monitoring Quantity Mapping 监控类别-状态与监控数量映射 */ @Query("select new com.usthe.manager.pojo.dto.AppCount(mo.app, mo.status, COUNT(mo.id)) from Monitor mo group by mo.app, mo.status") List findAppsStatusCount(); /** + * Update the status of the specified monitor * 更新指定监控的状态 - * @param id 监控ID - * @param status 监控状态 + * + * @param id Monitor ID 监控ID + * @param status 监控状态 Monitor Status */ @Modifying @Query("update Monitor set status = :status where id = :id") diff --git a/manager/src/main/java/com/usthe/manager/service/MailService.java b/manager/src/main/java/com/usthe/manager/service/MailService.java index 62c4830..3ec4419 100644 --- a/manager/src/main/java/com/usthe/manager/service/MailService.java +++ b/manager/src/main/java/com/usthe/manager/service/MailService.java @@ -6,7 +6,7 @@ import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; /** - * 邮箱发送服务 + * Email delivery service 邮箱发送服务 * * @author 花城 * @version 1.0 @@ -15,9 +15,11 @@ import org.springframework.stereotype.Service; public interface MailService { /** + * Build an alert email template * 构建告警邮件模版 - * @param alert 告警信息 - * @return 邮件内容 + * + * @param alert Alarm data element information 告警数据元信息 + * @return content of email 邮件内容 */ String buildAlertHtmlTemplate(Alert alert); } diff --git a/manager/src/main/java/com/usthe/manager/service/MonitorService.java b/manager/src/main/java/com/usthe/manager/service/MonitorService.java index a8a31c0..8e4dcab 100644 --- a/manager/src/main/java/com/usthe/manager/service/MonitorService.java +++ b/manager/src/main/java/com/usthe/manager/service/MonitorService.java @@ -15,6 +15,7 @@ import java.util.Set; /** * 监控管理服务 + * * @author tomsun28 * @date 2021/11/14 11:28 */ @@ -23,38 +24,43 @@ public interface MonitorService { /** * 监控可用性探测 + * * @param monitor 监控实体信息 - * @param params 参数信息 + * @param params 参数信息 * @throws MonitorDetectException 探测失败抛出 */ void detectMonitor(Monitor monitor, List params) throws MonitorDetectException; /** * 新增监控 + * * @param monitor 监控实体 - * @param params 参数信息 + * @param params 参数信息 * @throws RuntimeException 新增过程异常抛出 */ void addMonitor(Monitor monitor, List params) throws RuntimeException; /** * 校验请求数据参数正确性 + * * @param monitorDto monitorDto - * @param isModify 是否是修改监控 + * @param isModify 是否是修改监控 * @throws IllegalArgumentException 校验参数错误抛出 */ void validate(MonitorDto monitorDto, Boolean isModify) throws IllegalArgumentException; /** * 修改更新监控 + * * @param monitor 监控实体 - * @param params 参数信息 + * @param params 参数信息 * @throws RuntimeException 修改过程中异常抛出 */ void modifyMonitor(Monitor monitor, List params) throws RuntimeException; /** * 删除监控 + * * @param id 监控ID * @throws RuntimeException 删除过程中异常抛出 */ @@ -62,6 +68,7 @@ public interface MonitorService { /** * 批量删除监控 + * * @param ids 监控ID * @throws RuntimeException 删除过程中异常抛出 */ @@ -69,6 +76,7 @@ public interface MonitorService { /** * 获取监控信息 + * * @param id 监控ID * @return MonitorDto * @throws RuntimeException 查询过程中异常抛出 @@ -77,46 +85,55 @@ public interface MonitorService { /** * 动态条件查询 + * * @param specification 查询条件 - * @param pageRequest 分页参数 + * @param pageRequest 分页参数 * @return 查询结果 */ Page getMonitors(Specification specification, PageRequest pageRequest); /** * 根据监控ID列表批量取消纳管监控项 + * * @param ids 监控IDs */ void cancelManageMonitors(HashSet ids); /** * 根据监控ID列表批量启动纳管监控项 + * * @param ids 监控IDs */ void enableManageMonitors(HashSet ids); /** * 查询监控类别及其对应的监控数量 + * * @return 监控类别与监控数量映射 */ List getAllAppMonitorsCount(); /** + * Query monitoring * 查询监控 - * @param monitorId 监控ID - * @return 监控信息 + * + * @param monitorId Monitor ID 监控ID + * @return Monitor information 监控信息 */ Monitor getMonitor(Long monitorId); /** + * Update the status of the specified monitor * 更新指定监控的状态 - * @param monitorId 监控ID - * @param status 监控状态 + * + * @param monitorId monitorId 监控ID + * @param status monitor status 监控状态 */ void updateMonitorStatus(Long monitorId, byte status); /** * 查询指定监控类型下的所有监控信息列表 + * * @param app 监控类型 * @return 监控列表 */ diff --git a/manager/src/main/java/com/usthe/manager/service/NoticeConfigService.java b/manager/src/main/java/com/usthe/manager/service/NoticeConfigService.java index 116c9e4..208cf22 100644 --- a/manager/src/main/java/com/usthe/manager/service/NoticeConfigService.java +++ b/manager/src/main/java/com/usthe/manager/service/NoticeConfigService.java @@ -8,66 +8,86 @@ import org.springframework.data.jpa.domain.Specification; import java.util.List; /** + * Message notification configuration interface * 消息通知配置接口 + * * @author tom * @date 2021/12/16 16:14 */ public interface NoticeConfigService { /** + * Dynamic conditional query * 动态条件查询 - * @param specification 查询条件 - * @return 查询结果 + * + * @param specification Query conditions 查询条件 + * @return Search result 查询结果 */ List getNoticeReceivers(Specification specification); /** + * Dynamic conditional query * 动态条件查询 - * @param specification 查询条件 - * @return 查询结果 + * + * @param specification Query conditions 查询条件 + * @return Search result 查询结果 */ List getNoticeRules(Specification specification); /** + * Add a notification recipient * 新增一个通知接收人 - * @param noticeReceiver 接收人信息 + * + * @param noticeReceiver recipient information 接收人信息 */ void addReceiver(NoticeReceiver noticeReceiver); /** + * Modify notification recipients * 修改通知接收人 - * @param noticeReceiver 接收人信息 + * + * @param noticeReceiver recipient information 接收人信息 */ void editReceiver(NoticeReceiver noticeReceiver); /** + * Delete recipient information based on recipient ID * 根据接收人ID删除接收人信息 - * @param receiverId 接收人ID + * + * @param receiverId Recipient ID 接收人ID */ void deleteReceiver(Long receiverId); /** + * Added notification policy * 新增通知策略 - * @param noticeRule 通知策略 + * + * @param noticeRule Notification strategy 通知策略 */ void addNoticeRule(NoticeRule noticeRule); /** + * Modify Notification Policy * 修改通知策略 - * @param noticeRule 通知策略 + * + * @param noticeRule Notification strategy 通知策略 */ void editNoticeRule(NoticeRule noticeRule); /** + * Delete the specified notification policy * 删除指定的通知策略 - * @param ruleId 通知策略ID + * + * @param ruleId Notification Policy ID 通知策略ID */ void deleteNoticeRule(Long ruleId); /** + * According to the alarm information matching all notification policies, filter out the recipients who need to be notified * 根据告警信息与所有通知策略匹配,过滤出需要通知的接收人 - * @param alert 告警信息 - * @return 接收人 + * + * @param alert Alarm information 告警信息 + * @return Receiver 接收人 */ List getReceiverFilterRule(Alert alert); } diff --git a/manager/src/main/java/com/usthe/manager/service/impl/MonitorServiceImpl.java b/manager/src/main/java/com/usthe/manager/service/impl/MonitorServiceImpl.java index 5ac020c..623c2b5 100644 --- a/manager/src/main/java/com/usthe/manager/service/impl/MonitorServiceImpl.java +++ b/manager/src/main/java/com/usthe/manager/service/impl/MonitorServiceImpl.java @@ -22,6 +22,7 @@ import com.usthe.manager.service.AppService; import com.usthe.manager.service.MonitorService; import com.usthe.manager.support.exception.MonitorDatabaseException; import com.usthe.manager.support.exception.MonitorDetectException; +import jdk.nashorn.internal.runtime.regexp.joni.constants.Traverse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; @@ -40,6 +41,7 @@ import java.util.stream.Collectors; /** * 监控管理服务实现 + * * @author tomsun28 * @date 2021/11/14 13:06 */ @@ -391,7 +393,8 @@ public class MonitorServiceImpl implements MonitorService { if (appCounts == null) { return null; } - // 关联大类别信息 计算每个状态对应数量 + //Statistical category information, calculate the number of corresponding states for each monitor + //统计类别信息,计算每个监控分别对应状态的数量 Map appCountMap = new HashMap<>(appCounts.size()); for (AppCount item : appCounts) { AppCount appCount = appCountMap.getOrDefault(item.getApp(), new AppCount()); @@ -409,10 +412,13 @@ public class MonitorServiceImpl implements MonitorService { case CommonConstants.UN_REACHABLE_CODE: appCount.setUnReachableSize(appCount.getUnReachableSize() + item.getSize()); break; - default: break; + default: + break; } appCountMap.put(item.getApp(), appCount); } + //Traverse the map obtained by statistics and convert it into a List result set + //遍历统计得到的map,转换成List结果集 return appCountMap.values().stream().peek(item -> { item.setSize(item.getAvailableSize() + item.getUnManageSize() + item.getUnReachableSize() + item.getUnAvailableSize());