From 549362c843e5931bcb5e8e30e4cf8ce7176bb17f Mon Sep 17 00:00:00 2001 From: huacheng <1252532896@qq.com> Date: Mon, 11 Apr 2022 20:52:31 +0800 Subject: [PATCH] feat: MonitorsController Chinese and English support #huacheng --- .../entrance/internal/CollectJobService.java | 16 ++++-- .../dispatch/timer/TimerDispatch.java | 18 ++++--- .../usthe/common/entity/manager/Monitor.java | 16 +++++- .../common/util/SnowFlakeIdGenerator.java | 2 + .../controller/MonitorsController.java | 51 +++++++++++-------- .../com/usthe/manager/dao/MonitorDao.java | 18 ++++--- .../usthe/manager/service/MonitorService.java | 33 +++++++----- .../service/impl/MonitorServiceImpl.java | 6 ++- 8 files changed, 106 insertions(+), 54 deletions(-) diff --git a/collector/src/main/java/com/usthe/collector/dispatch/entrance/internal/CollectJobService.java b/collector/src/main/java/com/usthe/collector/dispatch/entrance/internal/CollectJobService.java index d847b08..b6fd15b 100644 --- a/collector/src/main/java/com/usthe/collector/dispatch/entrance/internal/CollectJobService.java +++ b/collector/src/main/java/com/usthe/collector/dispatch/entrance/internal/CollectJobService.java @@ -15,6 +15,7 @@ import java.util.concurrent.TimeUnit; /** * 采集job管理提供api接口 + * * @author tomsun28 * @date 2021/11/6 13:58 */ @@ -27,6 +28,7 @@ public class CollectJobService { /** * 执行一次性采集任务,获取采集数据响应 + * * @param job 采集任务详情 * @return 采集结果 */ @@ -52,9 +54,11 @@ public class CollectJobService { } /** + * Issue periodic asynchronous collection tasks * 下发周期性异步采集任务 - * @param job 采集任务详情 - * @return long 任务ID + * + * @param job Collect task details 采集任务详情 + * @return long Job ID 任务ID */ public long addAsyncCollectJob(Job job) { if (job.getId() == 0L) { @@ -66,8 +70,10 @@ public class CollectJobService { } /** + * Update the periodic asynchronous collection tasks that have been delivered * 更新已经下发的周期性异步采集任务 - * @param modifyJob 采集任务详情 + * + * @param modifyJob Collect task details 采集任务详情 */ public void updateAsyncCollectJob(Job modifyJob) { timerDispatch.deleteJob(modifyJob.getId(), true); @@ -75,8 +81,10 @@ public class CollectJobService { } /** + * Cancel periodic asynchronous collection tasks * 取消周期性异步采集任务 - * @param jobId 任务ID + * + * @param jobId Job ID 任务ID */ public void cancelAsyncCollectJob(Long jobId) { timerDispatch.deleteJob(jobId, true); diff --git a/collector/src/main/java/com/usthe/collector/dispatch/timer/TimerDispatch.java b/collector/src/main/java/com/usthe/collector/dispatch/timer/TimerDispatch.java index 578e504..55a61cb 100644 --- a/collector/src/main/java/com/usthe/collector/dispatch/timer/TimerDispatch.java +++ b/collector/src/main/java/com/usthe/collector/dispatch/timer/TimerDispatch.java @@ -10,36 +10,42 @@ import java.util.concurrent.TimeUnit; /** * 时间轮调度接口 + * * @author tomsun28 * @date 2021/10/17 22:14 */ public interface TimerDispatch { /** + * Add new job * 增加新的job - * @param addJob job - * @param eventListener 一次性同步任务监听器,异步任务不需要listener + * + * @param addJob job + * @param eventListener One-time synchronous task listener, asynchronous task does not need listener一次性同步任务监听器,异步任务不需要listener */ void addJob(Job addJob, CollectResponseEventListener eventListener); /** * 调度循环周期性job + * * @param timerTask timerTask - * @param interval 开始调度的间隔时间 - * @param timeUnit 时间单位 + * @param interval 开始调度的间隔时间 + * @param timeUnit 时间单位 */ void cyclicJob(WheelTimerTask timerTask, long interval, TimeUnit timeUnit); /** * 删除存在的job - * @param jobId jobId + * + * @param jobId jobId * @param isCyclic 是否是周期性任务,true是, false为临时性任务 */ void deleteJob(long jobId, boolean isCyclic); /** * 一次性同步采集任务采集结果通知监听器 - * @param jobId jobId + * + * @param jobId jobId * @param metricsDataTemps 采集结果数据 */ void responseSyncJobData(long jobId, List metricsDataTemps); diff --git a/common/src/main/java/com/usthe/common/entity/manager/Monitor.java b/common/src/main/java/com/usthe/common/entity/manager/Monitor.java index f4dae7c..6c3f6eb 100644 --- a/common/src/main/java/com/usthe/common/entity/manager/Monitor.java +++ b/common/src/main/java/com/usthe/common/entity/manager/Monitor.java @@ -22,7 +22,9 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_ONLY; import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE; /** + * Monitor Entity * 监控实体 + * * @author tomsun28 * @date 2021/11/14 9:53 */ @@ -32,10 +34,11 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE; @Builder @AllArgsConstructor @NoArgsConstructor -@ApiModel(description = "监控实体") +@ApiModel(description = "en: Monitor Entity,zh: 监控实体") public class Monitor { /** + * Monitor ID * 主键ID */ @Id @@ -43,12 +46,14 @@ public class Monitor { private Long id; /** + * Job ID * 监控对应下发的任务ID */ @ApiModelProperty(value = "任务ID", example = "43243543543", accessMode = READ_ONLY, position = 1) private Long jobId; /** + * Monitor Name * 监控的名称 */ @ApiModelProperty(value = "监控名称", example = "Api-TanCloud.cn", accessMode = READ_WRITE, position = 2) @@ -56,6 +61,7 @@ public class Monitor { private String name; /** + * Type of monitoring: linux, mysql, jvm... * 监控的类型:linux,mysql,jvm... */ @ApiModelProperty(value = "监控类型", example = "TanCloud", accessMode = READ_WRITE, position = 3) @@ -63,6 +69,7 @@ public class Monitor { private String app; /** + * Monitored peer host: ipv4, ipv6, domain name * 监控的对端host:ipv4,ipv6,域名 */ @ApiModelProperty(value = "监控的对端host", example = "192.167.25.11", accessMode = READ_WRITE, position = 4) @@ -71,6 +78,7 @@ public class Monitor { private String host; /** + * Monitoring collection interval time, in seconds * 监控的采集间隔时间,单位秒 */ @ApiModelProperty(value = "监控的采集间隔时间,单位秒", example = "600", accessMode = READ_WRITE, position = 5) @@ -78,6 +86,7 @@ public class Monitor { private Integer intervals; /** + * Monitoring status 0: Unmonitored, 1: Available, 2: Unavailable, 3: Unreachable, 4: Suspended * 监控状态 0:未监控,1:可用,2:不可用,3:不可达,4:挂起 */ @ApiModelProperty(value = "监控状态 0:未监控,1:可用,2:不可用,3:不可达,4:挂起", accessMode = READ_WRITE, position = 6) @@ -86,6 +95,7 @@ public class Monitor { private byte status; /** + * Monitoring note description * 监控备注描述 */ @ApiModelProperty(value = "监控备注描述", example = "对SAAS网站TanCloud的可用性监控", accessMode = READ_WRITE, position = 7) @@ -93,18 +103,21 @@ public class Monitor { private String description; /** + * The creator of this record * 此条记录创建者 */ @ApiModelProperty(value = "此条记录创建者", example = "tom", accessMode = READ_ONLY, position = 8) private String creator; /** + * This record was last modified by * 此条记录最新修改者 */ @ApiModelProperty(value = "此条记录最新修改者", example = "tom", accessMode = READ_ONLY, position = 9) private String modifier; /** + * record creation time (millisecond timestamp) * 记录创建时间 */ @ApiModelProperty(value = "记录创建时间(毫秒时间戳)", example = "1612198922000", accessMode = READ_ONLY, position = 10) @@ -112,6 +125,7 @@ public class Monitor { private LocalDateTime gmtCreate; /** + * Record the latest modification time (timestamp in milliseconds) * 记录最新修改时间 */ @ApiModelProperty(value = "记录最新修改时间(毫秒时间戳)", example = "1612198444000", accessMode = READ_ONLY, position = 11) diff --git a/common/src/main/java/com/usthe/common/util/SnowFlakeIdGenerator.java b/common/src/main/java/com/usthe/common/util/SnowFlakeIdGenerator.java index ed9d768..cd05b26 100644 --- a/common/src/main/java/com/usthe/common/util/SnowFlakeIdGenerator.java +++ b/common/src/main/java/com/usthe/common/util/SnowFlakeIdGenerator.java @@ -1,7 +1,9 @@ package com.usthe.common.util; /** + * Snowflake Algorithm Generator Tool * 雪花算法生成器工具 + * * @author tomsun28 * @date 2021/11/10 11:04 */ diff --git a/manager/src/main/java/com/usthe/manager/controller/MonitorsController.java b/manager/src/main/java/com/usthe/manager/controller/MonitorsController.java index 369df01..7419e0c 100644 --- a/manager/src/main/java/com/usthe/manager/controller/MonitorsController.java +++ b/manager/src/main/java/com/usthe/manager/controller/MonitorsController.java @@ -29,11 +29,13 @@ import java.util.List; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; /** + * Monitor and manage batch API * 监控管理批量API + * * @author tom * @date 2021/12/1 20:43 */ -@Api(tags = "监控列表API") +@Api(tags = "en: Monitor and manage batch API,zh: 监控列表API") @RestController @RequestMapping(path = "/monitors", produces = {APPLICATION_JSON_VALUE}) public class MonitorsController { @@ -44,22 +46,23 @@ public class MonitorsController { private MonitorService monitorService; @GetMapping - @ApiOperation(value = "查询监控列表", notes = "根据查询过滤项获取监控信息列表") + @ApiOperation(value = "Obtain a list of monitoring information based on query filter items", + notes = "根据查询过滤项获取监控信息列表") public ResponseEntity>> getMonitors( - @ApiParam(value = "监控ID", example = "6565463543") @RequestParam(required = false) final List ids, - @ApiParam(value = "监控类型", example = "linux") @RequestParam(required = false) final String app, - @ApiParam(value = "监控名称,模糊查询", example = "linux-127.0.0.1") @RequestParam(required = false) final String name, - @ApiParam(value = "监控Host,模糊查询", example = "127.0.0.1") @RequestParam(required = false) final String host, - @ApiParam(value = "监控状态 0:未监控,1:可用,2:不可用,3:不可达,4:挂起,9:全部状态", example = "1") @RequestParam(required = false) final Byte status, - @ApiParam(value = "排序字段,默认id", example = "name") @RequestParam(defaultValue = "id") final String sort, - @ApiParam(value = "排序方式,asc:升序,desc:降序", example = "desc") @RequestParam(defaultValue = "desc") final String order, - @ApiParam(value = "列表当前分页", example = "0") @RequestParam(defaultValue = "0") int pageIndex, - @ApiParam(value = "列表分页数量", example = "8") @RequestParam(defaultValue = "8") int pageSize) { + @ApiParam(value = "en: Monitor ID,zh: 监控ID", example = "6565463543") @RequestParam(required = false) final List ids, + @ApiParam(value = "en: Monitor Type,zh: 监控类型", example = "linux") @RequestParam(required = false) final String app, + @ApiParam(value = "en: Monitor Name,zh: 监控名称,模糊查询", example = "linux-127.0.0.1") @RequestParam(required = false) final String name, + @ApiParam(value = "en: Monitor Host,zh: 监控Host,模糊查询", example = "127.0.0.1") @RequestParam(required = false) final String host, + @ApiParam(value = "en: Monitor Status,zh: 监控状态 0:未监控,1:可用,2:不可用,3:不可达,4:挂起,9:全部状态", example = "1") @RequestParam(required = false) final Byte status, + @ApiParam(value = "en: Sort Field,default id,zh: 排序字段,默认id", example = "name") @RequestParam(defaultValue = "id") final String sort, + @ApiParam(value = "en: Sort by,zh: 排序方式,asc:升序,desc:降序", example = "desc") @RequestParam(defaultValue = "desc") final 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); } @@ -95,10 +98,10 @@ public class MonitorsController { } else if (orPredicate.getExpressions().isEmpty()) { return query.where(andPredicate).getRestriction(); } else { - return query.where(andPredicate,orPredicate).getRestriction(); + return query.where(andPredicate, orPredicate).getRestriction(); } }; - // 分页是必须的 + // Pagination is a must 分页是必须的 Sort sortExp = Sort.by(new Sort.Order(Sort.Direction.fromString(order), sort)); PageRequest pageRequest = PageRequest.of(pageIndex, pageSize, sortExp); Page monitorPage = monitorService.getMonitors(specification, pageRequest); @@ -107,18 +110,20 @@ public class MonitorsController { } @GetMapping(path = "/{app}") - @ApiOperation(value = "查询指定监控类型的监控列表", notes = "根据查询过滤指定监控类型的所有获取监控信息列表") + @ApiOperation(value = "Filter all acquired monitoring information lists of the specified monitoring type according to the query", + notes = "根据查询过滤指定监控类型的所有获取监控信息列表") public ResponseEntity>> getAppMonitors( - @ApiParam(value = "监控类型", example = "linux") @PathVariable(required = false) final String app) { + @ApiParam(value = "en: Monitoring type,zh: 监控类型", example = "linux") @PathVariable(required = false) final String app) { List monitors = monitorService.getAppMonitors(app); Message> message = new Message<>(monitors); return ResponseEntity.ok(message); } @DeleteMapping - @ApiOperation(value = "批量删除监控", notes = "根据监控ID列表批量删除监控项") + @ApiOperation(value = "Delete monitoring items in batches according to the monitoring ID list", + notes = "根据监控ID列表批量删除监控项") public ResponseEntity> deleteMonitors( - @ApiParam(value = "监控IDs", example = "6565463543") @RequestParam(required = false) List ids + @ApiParam(value = "en: Monitoring ID List,zh: 监控ID列表", example = "6565463543") @RequestParam(required = false) List ids ) { if (ids != null && !ids.isEmpty()) { monitorService.deleteMonitors(new HashSet<>(ids)); @@ -128,9 +133,10 @@ public class MonitorsController { } @DeleteMapping("manage") - @ApiOperation(value = "批量取消纳管监控", notes = "根据监控ID列表批量取消纳管监控项") + @ApiOperation(value = "Unmanaged monitoring items in batches according to the monitoring ID list", + notes = "根据监控ID列表批量取消纳管监控项") public ResponseEntity> cancelManageMonitors( - @ApiParam(value = "监控IDs", example = "6565463543") @RequestParam(required = false) List ids + @ApiParam(value = "en: Monitoring ID List,zh: 监控ID列表", example = "6565463543") @RequestParam(required = false) List ids ) { if (ids != null && !ids.isEmpty()) { monitorService.cancelManageMonitors(new HashSet<>(ids)); @@ -140,9 +146,10 @@ public class MonitorsController { } @GetMapping("manage") - @ApiOperation(value = "批量启动纳管监控", notes = "根据监控ID列表批量启动纳管监控项") + @ApiOperation(value = "Start the managed monitoring items in batches according to the monitoring ID list", + notes = "根据监控ID列表批量启动纳管监控项") public ResponseEntity> enableManageMonitors( - @ApiParam(value = "监控IDs", example = "6565463543") @RequestParam(required = false) List ids + @ApiParam(value = "en: Monitor ID List,zh: 监控ID列表", example = "6565463543") @RequestParam(required = false) List ids ) { if (ids != null && !ids.isEmpty()) { monitorService.enableManageMonitors(new HashSet<>(ids)); 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 b70d2ac..c40f02f 100644 --- a/manager/src/main/java/com/usthe/manager/dao/MonitorDao.java +++ b/manager/src/main/java/com/usthe/manager/dao/MonitorDao.java @@ -22,33 +22,37 @@ public interface MonitorDao extends JpaRepository, JpaSpecificati /** + * Delete monitor based on monitor ID list * 根据监控ID列表删除监控 * - * @param monitorIds 监控ID列表 + * @param monitorIds Monitoring ID List 监控ID列表 */ void deleteAllByIdIn(Set monitorIds); /** + * Query monitoring based on monitoring ID list * 根据监控ID列表查询监控 * - * @param monitorIds 监控ID列表 - * @return 监控列表 + * @param monitorIds Monitoring ID List 监控ID列表 + * @return Monitor List 监控列表 */ List findMonitorsByIdIn(Set monitorIds); /** + * Query monitoring by monitoring type * 根据监控类型查询监控 * - * @param app 监控类型 - * @return 监控列表 + * @param app Monitor Type 监控类型 + * @return Monitor List 监控列表 */ List findMonitorsByAppEquals(String app); /** + * Querying Monitoring of Sent Collection Tasks * 查询已下发采集任务的监控 * - * @param status 监控状态 - * @return 监控列表 + * @param status Monitor Status 监控状态 + * @return Monitor List 监控列表 */ List findMonitorsByStatusNotInAndAndJobIdNotNull(List status); 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 8e4dcab..763dc7f 100644 --- a/manager/src/main/java/com/usthe/manager/service/MonitorService.java +++ b/manager/src/main/java/com/usthe/manager/service/MonitorService.java @@ -67,49 +67,55 @@ public interface MonitorService { void deleteMonitor(long id) throws RuntimeException; /** + * Batch delete monitoring * 批量删除监控 * - * @param ids 监控ID - * @throws RuntimeException 删除过程中异常抛出 + * @param ids Monitoring ID List 监控ID列表 + * @throws RuntimeException Exception thrown during deletion 删除过程中异常抛出 */ void deleteMonitors(Set ids) throws RuntimeException; /** + * Get monitoring information * 获取监控信息 * - * @param id 监控ID - * @return MonitorDto - * @throws RuntimeException 查询过程中异常抛出 + * @param id Monitor ID 监控ID + * @return MonitorDto Monitor Entity 監控实体 + * @throws RuntimeException Exception thrown during query 查询过程中异常抛出 */ MonitorDto getMonitorDto(long id) throws RuntimeException; /** + * Dynamic conditional query * 动态条件查询 * - * @param specification 查询条件 - * @param pageRequest 分页参数 - * @return 查询结果 + * @param specification Query conditions 查询条件 + * @param pageRequest Pagination parameters 分页参数 + * @return Search Result 查询结果 */ Page getMonitors(Specification specification, PageRequest pageRequest); /** + * Unmanaged monitoring items in batches according to the monitoring ID list * 根据监控ID列表批量取消纳管监控项 * - * @param ids 监控IDs + * @param ids Monitoring ID List 监控ID列表 */ void cancelManageMonitors(HashSet ids); /** + * Start the managed monitoring items in batches according to the monitoring ID list * 根据监控ID列表批量启动纳管监控项 * - * @param ids 监控IDs + * @param ids Monitoring ID List 监控ID列表 */ void enableManageMonitors(HashSet ids); /** + * Query the monitoring category and its corresponding monitoring quantity * 查询监控类别及其对应的监控数量 * - * @return 监控类别与监控数量映射 + * @return Monitoring Category and Monitoring Quantity Mapping 监控类别与监控数量映射 */ List getAllAppMonitorsCount(); @@ -132,10 +138,11 @@ public interface MonitorService { void updateMonitorStatus(Long monitorId, byte status); /** + * Query the list of all monitoring information under the specified monitoring type * 查询指定监控类型下的所有监控信息列表 * - * @param app 监控类型 - * @return 监控列表 + * @param app Monitor Type 监控类型 + * @return Monitor Entity List 监控列表 */ List getAppMonitors(String app); } 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 623c2b5..1e7c51e 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 @@ -345,7 +345,9 @@ public class MonitorServiceImpl implements MonitorService { @Override public void cancelManageMonitors(HashSet ids) { + // Update monitoring status Delete corresponding monitoring periodic task // 更新监控状态 删除对应的监控周期性任务 + // The jobId is not deleted, and the jobId is reused again after the management is started. // jobId不删除 待启动纳管之后再次复用jobId List managedMonitors = monitorDao.findMonitorsByIdIn(ids) .stream().filter(monitor -> @@ -362,6 +364,7 @@ public class MonitorServiceImpl implements MonitorService { @Override public void enableManageMonitors(HashSet ids) { + // Update monitoring status Add corresponding monitoring periodic task // 更新监控状态 新增对应的监控周期性任务 List unManagedMonitors = monitorDao.findMonitorsByIdIn(ids) .stream().filter(monitor -> @@ -371,6 +374,7 @@ public class MonitorServiceImpl implements MonitorService { if (!unManagedMonitors.isEmpty()) { monitorDao.saveAll(unManagedMonitors); for (Monitor monitor : unManagedMonitors) { + // Construct the collection task Job entity // 构造采集任务Job实体 Job appDefine = appService.getAppDefine(monitor.getApp()); appDefine.setMonitorId(monitor.getId()); @@ -381,7 +385,7 @@ public class MonitorServiceImpl implements MonitorService { List configmaps = params.stream().map(param -> new Configmap(param.getField(), param.getValue(), param.getType())).collect(Collectors.toList()); appDefine.setConfigmap(configmaps); - // 下发采集任务 + // Issue collection tasks 下发采集任务 collectJobService.addAsyncCollectJob(appDefine); } }