Forráskód Böngészése

feat: Alarm and receiving Chinese and English support #huacheng

huacheng 3 éve
szülő
commit
3d65fe3861

+ 20 - 20
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<Message<Page<Alert>>> getAlerts(
-            @ApiParam(value = "告警ID", example = "6565466456") @RequestParam(required = false) List<Long> 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<Long> 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<Alert> specification = (root, query, criteriaBuilder) -> {
             List<Predicate> andList = new ArrayList<>();
 
             if (ids != null && !ids.isEmpty()) {
-                CriteriaBuilder.In<Long> inPredicate= criteriaBuilder.in(root.get("id"));
+                CriteriaBuilder.In<Long> 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<Message<Void>> deleteAlertDefines(
-            @ApiParam(value = "告警IDs", example = "6565463543") @RequestParam(required = false) List<Long> ids
-    ) {
+            @ApiParam(value = "en:Alarm List ID,zh: 告警IDs", example = "6565463543") @RequestParam(required = false) List<Long> 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<Message<Void>> applyAlertDefinesStatus(
-            @ApiParam(value = "告警状态值", example = "0") @PathVariable Byte status,
-            @ApiParam(value = "告警IDs", example = "6565463543") @RequestParam(required = false) List<Long> 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<Long> 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<Message<AlertSummary>> getAlertsSummary() {
         AlertSummary alertSummary = alertService.getAlertsSummary();
         Message<AlertSummary> message = new Message<>(alertSummary);

+ 10 - 5
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<Alert, Long>, JpaSpecificationExecutor<Alert> {
 
     /**
-     * 根据ID列表删除告警
-     * @param alertIds 告警ID列表
+     * Delete alerts based on ID list 根据ID列表删除告警
+     *
+     * @param alertIds Alert ID List  告警ID列表
      */
     void deleteAlertsByIdIn(Set<Long> 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<Long> 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<AlertPriorityNum> findAlertPriorityNum();

+ 8 - 1
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;
 }

+ 20 - 8
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;
 }

+ 22 - 11
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<Alert> getAlerts(Specification<Alert> 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<Long> 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<Long> ids);
 
     /**
-     * 获取告警统计信息
-     * @return 告警统计
+     * Get alarm statistics information 获取告警统计信息
+     *
+     * @return Alarm statistics information 告警统计
      */
     AlertSummary getAlertsSummary();
 

+ 12 - 5
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<AlertPriorityNum> 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;
                 }
             }
         }

+ 30 - 13
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;
 

+ 39 - 13
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;
 

+ 33 - 11
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;
 

+ 26 - 18
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<NoticeReceiver> 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<NoticeReceiver> matchReceiverByNoticeRules(Alert alert) {
-        // todo 使用缓存
+        // todo use cache 使用缓存
         return noticeConfigService.getReceiverFilterRule(alert);
     }
 

+ 22 - 15
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<Message<Void>> 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<Message<Void>> 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<Message<Void>> 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<Message<List<NoticeReceiver>>> 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<NoticeReceiver> 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<Message<Void>> 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<Message<Void>> 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<Message<Void>> 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<Message<List<NoticeRule>>> 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<NoticeRule> specification = (root, query, criteriaBuilder) -> {
             Predicate predicate = criteriaBuilder.conjunction();

+ 4 - 2
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<Message<Dashboard>> appMonitors() {
         List<AppCount> appsCount = monitorService.getAllAppMonitorsCount();
         Message<Dashboard> message = new Message<>(new Dashboard(appsCount));

+ 16 - 6
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<Monitor, Long>, JpaSpecificati
 
     /**
      * 根据监控ID列表删除监控
+     *
      * @param monitorIds 监控ID列表
      */
     void deleteAllByIdIn(Set<Long> monitorIds);
 
     /**
      * 根据监控ID列表查询监控
+     *
      * @param monitorIds 监控ID列表
      * @return 监控列表
      */
@@ -35,6 +38,7 @@ public interface MonitorDao extends JpaRepository<Monitor, Long>, JpaSpecificati
 
     /**
      * 根据监控类型查询监控
+     *
      * @param app 监控类型
      * @return 监控列表
      */
@@ -42,29 +46,35 @@ public interface MonitorDao extends JpaRepository<Monitor, Long>, JpaSpecificati
 
     /**
      * 查询已下发采集任务的监控
+     *
      * @param status 监控状态
      * @return 监控列表
      */
     List<Monitor> findMonitorsByStatusNotInAndAndJobIdNotNull(List<Byte> status);
 
     /**
-     * 根据监控名称查询监控
-     * @param name 监控名称
-     * @return 监控列表
+     * Query monitoring by monitoring name 根据监控名称查询监控
+     *
+     * @param name monitoring name 监控名称
+     * @return monitoring list 监控列表
      */
     Optional<Monitor> 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<AppCount> 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")

+ 5 - 3
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);
 }

+ 26 - 9
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<Param> params) throws MonitorDetectException;
 
     /**
      * 新增监控
+     *
      * @param monitor 监控实体
-     * @param params 参数信息
+     * @param params  参数信息
      * @throws RuntimeException 新增过程异常抛出
      */
     void addMonitor(Monitor monitor, List<Param> 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<Param> 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<Monitor> getMonitors(Specification<Monitor> specification, PageRequest pageRequest);
 
     /**
      * 根据监控ID列表批量取消纳管监控项
+     *
      * @param ids 监控IDs
      */
     void cancelManageMonitors(HashSet<Long> ids);
 
     /**
      * 根据监控ID列表批量启动纳管监控项
+     *
      * @param ids 监控IDs
      */
     void enableManageMonitors(HashSet<Long> ids);
 
     /**
      * 查询监控类别及其对应的监控数量
+     *
      * @return 监控类别与监控数量映射
      */
     List<AppCount> 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 监控列表
      */

+ 32 - 12
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<NoticeReceiver> getNoticeReceivers(Specification<NoticeReceiver> specification);
 
     /**
+     * Dynamic conditional query
      * 动态条件查询
-     * @param specification 查询条件
-     * @return 查询结果
+     *
+     * @param specification Query conditions    查询条件
+     * @return Search result    查询结果
      */
     List<NoticeRule> getNoticeRules(Specification<NoticeRule> 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<NoticeReceiver> getReceiverFilterRule(Alert alert);
 }

+ 8 - 2
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
  */
@@ -387,7 +389,8 @@ public class MonitorServiceImpl implements MonitorService {
         if (appCounts == null) {
             return null;
         }
-        // 关联大类别信息 计算每个状态对应数量
+        //Statistical category information, calculate the number of corresponding states for each monitor
+        //统计类别信息,计算每个监控分别对应状态的数量
         Map<String, AppCount> appCountMap = new HashMap<>(appCounts.size());
         for (AppCount item : appCounts) {
             AppCount appCount = appCountMap.getOrDefault(item.getApp(), new AppCount());
@@ -405,10 +408,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<App Count> result set
+        //遍历统计得到的map,转换成List<App Count>结果集
         return appCountMap.values().stream().peek(item -> {
             item.setSize(item.getAvailableSize() + item.getUnManageSize()
                     + item.getUnReachableSize() + item.getUnAvailableSize());