From 2103698417486f61525cdf31aa50f6137a015b38 Mon Sep 17 00:00:00 2001 From: lijiahangmax Date: Tue, 7 Oct 2025 14:26:40 +0800 Subject: [PATCH] =?UTF-8?q?:hammer:=20=E4=BC=98=E5=8C=96=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/redis/core/utils/RedisMaps.java | 27 ++- .../controller/AlarmPolicyRuleController.java | 6 +- .../controller/MonitorHostController.java | 11 ++ .../module/monitor/dao/MonitorHostDAO.java | 14 ++ .../cache/AlarmPolicyCacheKeyDefine.java | 3 +- .../cache/MonitorHostCacheKeyDefine.java | 48 ++++++ .../module/monitor/enums/MeasurementEnum.java | 20 ++- .../monitor/enums/MeasurementFieldEnum.java | 159 ------------------ .../service/AlarmPolicyRuleService.java | 6 +- .../monitor/service/MonitorHostService.java | 9 + .../impl/AlarmPolicyRuleServiceImpl.java | 6 +- .../service/impl/AlarmPolicyServiceImpl.java | 4 +- .../impl/MonitorAgentEndpointServiceImpl.java | 9 +- .../service/impl/MonitorHostServiceImpl.java | 55 +++++- orion-visor-ui/src/api/monitor/alarm-rule.ts | 4 +- .../src/api/monitor/monitor-host.ts | 7 + .../components/alarm-rule-form-drawer.vue | 131 +++++++++++---- 17 files changed, 296 insertions(+), 223 deletions(-) create mode 100644 orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/define/cache/MonitorHostCacheKeyDefine.java delete mode 100644 orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/enums/MeasurementFieldEnum.java diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-redis/src/main/java/org/dromara/visor/framework/redis/core/utils/RedisMaps.java b/orion-visor-framework/orion-visor-spring-boot-starter-redis/src/main/java/org/dromara/visor/framework/redis/core/utils/RedisMaps.java index ba8a8934..d3c9f58d 100644 --- a/orion-visor-framework/orion-visor-spring-boot-starter-redis/src/main/java/org/dromara/visor/framework/redis/core/utils/RedisMaps.java +++ b/orion-visor-framework/orion-visor-spring-boot-starter-redis/src/main/java/org/dromara/visor/framework/redis/core/utils/RedisMaps.java @@ -312,6 +312,19 @@ public class RedisMaps extends RedisUtils { return getJson(key.getKey(), hashKey, (Class) key.getType()); } + /** + * 获取值 json + * + * @param define define + * @param key key + * @param hashKey hashKey + * @param V + * @return value + */ + public static V getJson(String key, CacheKeyDefine define, Object hashKey) { + return getJson(key, hashKey, (Class) define.getType()); + } + /** * 获取值 json * @@ -355,9 +368,9 @@ public class RedisMaps extends RedisUtils { /** * 获取值 json * - * @param key key - * @param hashKeys hashKeys - * @param V + * @param key key + * @param hashKeys hashKeys + * @param V * @return values */ public static List multiGetJson(CacheKeyDefine key, List hashKeys) { @@ -367,10 +380,10 @@ public class RedisMaps extends RedisUtils { /** * 获取值 json * - * @param key key - * @param hashKeys hashKeys - * @param clazz clazz - * @param V + * @param key key + * @param hashKeys hashKeys + * @param clazz clazz + * @param V * @return values */ public static List multiGetJson(String key, List hashKeys, Class clazz) { diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/controller/AlarmPolicyRuleController.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/controller/AlarmPolicyRuleController.java index 8edb642f..d82eaf9e 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/controller/AlarmPolicyRuleController.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/controller/AlarmPolicyRuleController.java @@ -93,11 +93,11 @@ public class AlarmPolicyRuleController { @GetMapping("/list") @Operation(summary = "查询全部监控告警规则") @Parameter(name = "policyId", description = "policyId", required = true) - @Parameter(name = "metricsMeasurement", description = "metricsMeasurement") + @Parameter(name = "measurement", description = "measurement") @PreAuthorize("@ss.hasPermission('monitor:alarm-policy:query')") public List getAlarmPolicyRuleList(@RequestParam("policyId") Long policyId, - @RequestParam(value = "metricsMeasurement", required = false) String metricsMeasurement) { - return alarmPolicyRuleService.getAlarmPolicyRuleList(policyId, metricsMeasurement); + @RequestParam(value = "measurement", required = false) String measurement) { + return alarmPolicyRuleService.getAlarmPolicyRuleList(policyId, measurement); } @DemoDisableApi diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/controller/MonitorHostController.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/controller/MonitorHostController.java index 53544890..dbbf3dd4 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/controller/MonitorHostController.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/controller/MonitorHostController.java @@ -106,6 +106,17 @@ public class MonitorHostController { return monitorHostService.getMonitorHostChart(request); } + @IgnoreLog(IgnoreLogMode.RET) + @GetMapping("/host-tags") + @Operation(summary = "查询监控告警标签") + @Parameter(name = "policyId", description = "policyId", required = true) + @Parameter(name = "measurement", description = "measurement") + @PreAuthorize("@ss.hasPermission('monitor:monitor-host:query')") + public List getMonitorHostPolicyRuleTags(@RequestParam("policyId") Long policyId, + @RequestParam(value = "measurement", required = false) String measurement) { + return monitorHostService.getMonitorHostPolicyRuleTags(policyId, measurement); + } + @DemoDisableApi @OperatorLog(MonitorHostOperatorType.UPDATE) @PutMapping("/update") diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/dao/MonitorHostDAO.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/dao/MonitorHostDAO.java index be453484..2a44f28d 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/dao/MonitorHostDAO.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/dao/MonitorHostDAO.java @@ -95,6 +95,20 @@ public interface MonitorHostDAO extends IMapper { return this.delete(Conditions.in(MonitorHostDO::getHostId, hostIdList)); } + /** + * 通过 policyId 查询 + * + * @param policyId policyId + * @return row + */ + default List selectByPolicyId(Long policyId) { + return this.of() + .createWrapper() + .eq(MonitorHostDO::getPolicyId, policyId) + .then() + .list(); + } + /** * 设置 policyId 为 null * diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/define/cache/AlarmPolicyCacheKeyDefine.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/define/cache/AlarmPolicyCacheKeyDefine.java index 20ae552d..ca4fac0f 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/define/cache/AlarmPolicyCacheKeyDefine.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/define/cache/AlarmPolicyCacheKeyDefine.java @@ -38,7 +38,7 @@ import java.util.concurrent.TimeUnit; */ public interface AlarmPolicyCacheKeyDefine { - CacheKeyDefine MONITOR_ALARM_POLICY = new CacheKeyBuilder() + CacheKeyDefine ALARM_POLICY = new CacheKeyBuilder() .key("alarm:policy:list") .desc("告警策略") .type(AlarmPolicyCacheDTO.class) @@ -49,6 +49,7 @@ public interface AlarmPolicyCacheKeyDefine { CacheKeyDefine ALARM_RULE_SILENCE = new CacheKeyBuilder() .key("alarm:silence:{}:{}") .desc("告警规则沉默标志 ${agentKey} ${ruleId}") + .type(Long.class) .struct(RedisCacheStruct.STRING) .build(); diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/define/cache/MonitorHostCacheKeyDefine.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/define/cache/MonitorHostCacheKeyDefine.java new file mode 100644 index 00000000..fba07e68 --- /dev/null +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/define/cache/MonitorHostCacheKeyDefine.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2023 - present Dromara, All rights reserved. + * + * https://visor.dromara.org + * https://visor.dromara.org.cn + * https://visor.orionsec.cn + * + * Members: + * Jiahang Li - ljh1553488six@139.com - author + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.visor.module.monitor.define.cache; + +import cn.orionsec.kit.lang.define.cache.key.CacheKeyBuilder; +import cn.orionsec.kit.lang.define.cache.key.CacheKeyDefine; +import cn.orionsec.kit.lang.define.cache.key.struct.RedisCacheStruct; + +import java.util.concurrent.TimeUnit; + +/** + * 监控主机缓存 key + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2025-9-14 00:12 + */ +public interface MonitorHostCacheKeyDefine { + + CacheKeyDefine MONITOR_HOST_POLICY_HOST_TAGS = new CacheKeyBuilder() + .key("monitor:host:policy:host-tags:{}") + .desc("告警规则沉默标志 ${policyId}") + .type(String.class) + .struct(RedisCacheStruct.HASH) + .timeout(8, TimeUnit.HOURS) + .build(); + +} diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/enums/MeasurementEnum.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/enums/MeasurementEnum.java index 937c26d1..2e8cc706 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/enums/MeasurementEnum.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/enums/MeasurementEnum.java @@ -43,7 +43,7 @@ public enum MeasurementEnum { /** * cpu */ - CPU("cpu", (s) -> { + CPU("cpu", true, (s) -> { s.accept(MetricsConst.CPU_USER_SECONDS_TOTAL, double.class); s.accept(MetricsConst.CPU_SYSTEM_SECONDS_TOTAL, double.class); s.accept(MetricsConst.CPU_TOTAL_SECONDS_TOTAL, double.class); @@ -52,7 +52,7 @@ public enum MeasurementEnum { /** * 内存 */ - MEMORY("memory", s -> { + MEMORY("memory", false, s -> { s.accept(MetricsConst.MEM_USED_BYTES_TOTAL, long.class); s.accept(MetricsConst.MEM_USED_PERCENT, double.class); s.accept(MetricsConst.MEM_SWAP_USED_BYTES_TOTAL, long.class); @@ -62,7 +62,7 @@ public enum MeasurementEnum { /** * 负载 */ - LOAD("load", s -> { + LOAD("load", false, s -> { s.accept(MetricsConst.LOAD1, double.class); s.accept(MetricsConst.LOAD5, double.class); s.accept(MetricsConst.LOAD15, double.class); @@ -74,7 +74,7 @@ public enum MeasurementEnum { /** * 磁盘 */ - DISK("disk", s -> { + DISK("disk", true, s -> { s.accept(MetricsConst.DISK_FS_USED_BYTES_TOTAL, long.class); s.accept(MetricsConst.DISK_FS_USED_PERCENT, double.class); s.accept(MetricsConst.DISK_FS_INODES_USED_PERCENT, double.class); @@ -83,7 +83,7 @@ public enum MeasurementEnum { /** * io */ - IO("io", s -> { + IO("io", false, s -> { s.accept(MetricsConst.DISK_IO_READ_BYTES_TOTAL, long.class); s.accept(MetricsConst.DISK_IO_WRITE_BYTES_TOTAL, long.class); s.accept(MetricsConst.DISK_IO_READS_TOTAL, long.class); @@ -97,7 +97,7 @@ public enum MeasurementEnum { /** * 网络 */ - NETWORK("network", s -> { + NETWORK("network", true, s -> { s.accept(MetricsConst.NET_SENT_BYTES_TOTAL, long.class); s.accept(MetricsConst.NET_RECV_BYTES_TOTAL, long.class); s.accept(MetricsConst.NET_SENT_PACKETS_TOTAL, long.class); @@ -111,7 +111,7 @@ public enum MeasurementEnum { /** * 连接数 */ - CONNECTIONS("connections", s -> { + CONNECTIONS("connections", false, s -> { s.accept(MetricsConst.NET_TCP_CONNECTIONS, int.class); s.accept(MetricsConst.NET_UDP_CONNECTIONS, int.class); s.accept(MetricsConst.NET_INET_CONNECTIONS, int.class); @@ -121,10 +121,14 @@ public enum MeasurementEnum { ; private final String measurement; + + private final boolean hasTags; + private final Map> fields; - MeasurementEnum(String measurement, Consumer>> register) { + MeasurementEnum(String measurement, boolean hasTags, Consumer>> register) { this.measurement = measurement; + this.hasTags = hasTags; this.fields = new HashedMap<>(); register.accept(this.fields::put); } diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/enums/MeasurementFieldEnum.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/enums/MeasurementFieldEnum.java deleted file mode 100644 index c8936655..00000000 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/enums/MeasurementFieldEnum.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) 2023 - present Dromara, All rights reserved. - * - * https://visor.dromara.org - * https://visor.dromara.org.cn - * https://visor.orionsec.cn - * - * Members: - * Jiahang Li - ljh1553488six@139.com - author - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.dromara.visor.module.monitor.enums; - -import lombok.Getter; -import org.apache.commons.collections4.map.HashedMap; -import org.dromara.visor.module.monitor.constant.MetricsConst; - -import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.Consumer; - -/** - * 指标度量类型 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2025/8/14 10:27 - */ -@Getter -public enum MeasurementFieldEnum { - - /** - * cpu - */ - CPU("cpu", (s) -> { - s.accept(MetricsConst.CPU_USER_SECONDS_TOTAL, double.class); - s.accept(MetricsConst.CPU_SYSTEM_SECONDS_TOTAL, double.class); - s.accept(MetricsConst.CPU_TOTAL_SECONDS_TOTAL, double.class); - }), - - /** - * 内存 - */ - MEMORY("memory", s -> { - s.accept(MetricsConst.MEM_USED_BYTES_TOTAL, long.class); - s.accept(MetricsConst.MEM_USED_PERCENT, double.class); - s.accept(MetricsConst.MEM_SWAP_USED_BYTES_TOTAL, long.class); - s.accept(MetricsConst.MEM_SWAP_USED_PERCENT, double.class); - }), - - /** - * 负载 - */ - LOAD("load", s -> { - s.accept(MetricsConst.LOAD1, double.class); - s.accept(MetricsConst.LOAD5, double.class); - s.accept(MetricsConst.LOAD15, double.class); - s.accept(MetricsConst.LOAD1_CORE_RATIO, double.class); - s.accept(MetricsConst.LOAD5_CORE_RATIO, double.class); - s.accept(MetricsConst.LOAD15_CORE_RATIO, double.class); - }), - - /** - * 磁盘 - */ - DISK("disk", s -> { - s.accept(MetricsConst.DISK_FS_USED_BYTES_TOTAL, long.class); - s.accept(MetricsConst.DISK_FS_USED_PERCENT, double.class); - s.accept(MetricsConst.DISK_FS_INODES_USED_PERCENT, double.class); - }), - - /** - * io - */ - IO("io", s -> { - s.accept(MetricsConst.DISK_IO_READ_BYTES_TOTAL, long.class); - s.accept(MetricsConst.DISK_IO_WRITE_BYTES_TOTAL, long.class); - s.accept(MetricsConst.DISK_IO_READS_TOTAL, long.class); - s.accept(MetricsConst.DISK_IO_WRITES_TOTAL, long.class); - s.accept(MetricsConst.DISK_IO_READ_BYTES_PER_SECOND, double.class); - s.accept(MetricsConst.DISK_IO_WRITE_BYTES_PER_SECOND, double.class); - s.accept(MetricsConst.DISK_IO_READS_PER_SECOND, double.class); - s.accept(MetricsConst.DISK_IO_WRITES_PER_SECOND, double.class); - }), - - /** - * 网络 - */ - NETWORK("network", s -> { - s.accept(MetricsConst.NET_SENT_BYTES_TOTAL, long.class); - s.accept(MetricsConst.NET_RECV_BYTES_TOTAL, long.class); - s.accept(MetricsConst.NET_SENT_PACKETS_TOTAL, long.class); - s.accept(MetricsConst.NET_RECV_PACKETS_TOTAL, long.class); - s.accept(MetricsConst.NET_SENT_BYTES_PER_SECOND, double.class); - s.accept(MetricsConst.NET_RECV_BYTES_PER_SECOND, double.class); - s.accept(MetricsConst.NET_SENT_PACKETS_PER_SECOND, double.class); - s.accept(MetricsConst.NET_RECV_PACKETS_PER_SECOND, double.class); - }), - - /** - * 连接数 - */ - CONNECTIONS("connections", s -> { - s.accept(MetricsConst.NET_TCP_CONNECTIONS, int.class); - s.accept(MetricsConst.NET_UDP_CONNECTIONS, int.class); - s.accept(MetricsConst.NET_INET_CONNECTIONS, int.class); - s.accept(MetricsConst.NET_ALL_CONNECTIONS, int.class); - }), - - ; - - private final String measurement; - private final Map> fields; - - MeasurementFieldEnum(String measurement, Consumer>> register) { - this.measurement = measurement; - this.fields = new HashedMap<>(); - register.accept(this.fields::put); - } - - public static MeasurementFieldEnum of(String measurement) { - if (measurement == null) { - return null; - } - for (MeasurementFieldEnum e : values()) { - if (e.measurement.equals(measurement)) { - return e; - } - } - return null; - } - - /** - * 获取度量值类型 - * - * @param measurement measurement - * @param field field - * @return type - */ - public static Class getMetricsValueType(String measurement, String field) { - MeasurementFieldEnum m = of(measurement); - if (m == null) { - return null; - } - return m.getFields().get(field); - } - -} diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/AlarmPolicyRuleService.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/AlarmPolicyRuleService.java index c9da8d9a..a7de8b5a 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/AlarmPolicyRuleService.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/AlarmPolicyRuleService.java @@ -73,11 +73,11 @@ public interface AlarmPolicyRuleService { /** * 查询全部监控告警规则 * - * @param policyId policyId - * @param metricsMeasurement metricsMeasurement + * @param policyId policyId + * @param measurement measurement * @return rows */ - List getAlarmPolicyRuleList(Long policyId, String metricsMeasurement); + List getAlarmPolicyRuleList(Long policyId, String measurement); /** * 通过 metricsId 删除监控告警规则 diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/MonitorHostService.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/MonitorHostService.java index c5fc3e5c..5f806168 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/MonitorHostService.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/MonitorHostService.java @@ -66,6 +66,15 @@ public interface MonitorHostService { */ List getMonitorHostChart(MonitorHostChartRequest request); + /** + * 查询监控告警规则主机标签 + * + * @param policyId policyId + * @param measurement measurement + * @return tags + */ + List getMonitorHostPolicyRuleTags(Long policyId, String measurement); + /** * 更新监控主机 * diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/AlarmPolicyRuleServiceImpl.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/AlarmPolicyRuleServiceImpl.java index 7946347f..94786850 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/AlarmPolicyRuleServiceImpl.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/AlarmPolicyRuleServiceImpl.java @@ -160,13 +160,13 @@ public class AlarmPolicyRuleServiceImpl implements AlarmPolicyRuleService { } @Override - public List getAlarmPolicyRuleList(Long policyId, String metricsMeasurement) { + public List getAlarmPolicyRuleList(Long policyId, String measurement) { // 查询 return alarmPolicyRuleDAO.of() .createWrapper() .eq(AlarmPolicyRuleDO::getPolicyId, policyId) - .eq(Strings.isNotBlank(metricsMeasurement), AlarmPolicyRuleDO::getMetricsMeasurement, metricsMeasurement) - // 想同的指标在一起 + .eq(Strings.isNotBlank(measurement), AlarmPolicyRuleDO::getMetricsMeasurement, measurement) + // 相同的指标在一起 .orderByAsc(AlarmPolicyRuleDO::getMetricsId) // 通过 p0 > p1 排序 .orderByAsc(AlarmPolicyRuleDO::getLevel) diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/AlarmPolicyServiceImpl.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/AlarmPolicyServiceImpl.java index a0b98134..ca415b4b 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/AlarmPolicyServiceImpl.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/AlarmPolicyServiceImpl.java @@ -173,14 +173,14 @@ public class AlarmPolicyServiceImpl implements AlarmPolicyService { @Override public List getAlarmPolicyListByCache() { // 查询缓存 - List list = RedisMaps.valuesJson(AlarmPolicyCacheKeyDefine.MONITOR_ALARM_POLICY); + List list = RedisMaps.valuesJson(AlarmPolicyCacheKeyDefine.ALARM_POLICY); if (list.isEmpty()) { // 查询数据库 list = alarmPolicyDAO.of().list(AlarmPolicyConvert.MAPPER::toCache); // 设置屏障 防止穿透 CacheBarriers.checkBarrier(list, AlarmPolicyCacheDTO::new); // 设置缓存 - RedisMaps.putAllJson(AlarmPolicyCacheKeyDefine.MONITOR_ALARM_POLICY, s -> s.getId().toString(), list); + RedisMaps.putAllJson(AlarmPolicyCacheKeyDefine.ALARM_POLICY, s -> s.getId().toString(), list); } // 删除屏障 CacheBarriers.removeBarrier(list); diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/MonitorAgentEndpointServiceImpl.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/MonitorAgentEndpointServiceImpl.java index 0c445078..93b8c75d 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/MonitorAgentEndpointServiceImpl.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/MonitorAgentEndpointServiceImpl.java @@ -35,10 +35,12 @@ import org.dromara.visor.common.constant.ErrorMessage; import org.dromara.visor.common.utils.Assert; import org.dromara.visor.common.utils.LockerUtils; import org.dromara.visor.framework.influxdb.core.utils.InfluxdbUtils; +import org.dromara.visor.framework.redis.core.utils.RedisMaps; import org.dromara.visor.module.asset.api.HostApi; import org.dromara.visor.module.asset.entity.dto.host.HostDTO; import org.dromara.visor.module.infra.api.SystemUserApi; import org.dromara.visor.module.monitor.dao.MonitorHostDAO; +import org.dromara.visor.module.monitor.define.cache.MonitorHostCacheKeyDefine; import org.dromara.visor.module.monitor.engine.AlarmEngine; import org.dromara.visor.module.monitor.engine.MonitorContext; import org.dromara.visor.module.monitor.entity.domain.MonitorHostDO; @@ -146,8 +148,13 @@ public class MonitorAgentEndpointServiceImpl implements MonitorAgentEndpointServ update.setMonitorConfig(JSON.toJSONString(newConfig)); } monitorHostDAO.updateById(update); + // 删除元数据缓存 + Long policyId = monitorHost.getPolicyId(); + if (policyId != null) { + RedisMaps.delete(MonitorHostCacheKeyDefine.MONITOR_HOST_POLICY_HOST_TAGS.format(policyId)); + } } - // 设置配置缓存 + // 重新加载监控主机上下文 if (newConfig != null) { monitorContext.reloadMonitorHost(agentKey); } diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/MonitorHostServiceImpl.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/MonitorHostServiceImpl.java index 84623030..f3183c35 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/MonitorHostServiceImpl.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/MonitorHostServiceImpl.java @@ -40,6 +40,7 @@ import org.dromara.visor.framework.biz.operator.log.core.utils.OperatorLogs; import org.dromara.visor.framework.influxdb.core.query.FluxQueryBuilder; import org.dromara.visor.framework.influxdb.core.utils.InfluxdbUtils; import org.dromara.visor.framework.mybatis.core.query.Conditions; +import org.dromara.visor.framework.redis.core.utils.RedisMaps; import org.dromara.visor.module.asset.api.HostAgentApi; import org.dromara.visor.module.asset.api.HostApi; import org.dromara.visor.module.asset.entity.dto.host.HostAgentLogDTO; @@ -51,6 +52,7 @@ import org.dromara.visor.module.monitor.constant.MetricsConst; import org.dromara.visor.module.monitor.convert.MonitorHostConvert; import org.dromara.visor.module.monitor.dao.AlarmPolicyDAO; import org.dromara.visor.module.monitor.dao.MonitorHostDAO; +import org.dromara.visor.module.monitor.define.cache.MonitorHostCacheKeyDefine; import org.dromara.visor.module.monitor.engine.MonitorContext; import org.dromara.visor.module.monitor.entity.domain.AlarmPolicyDO; import org.dromara.visor.module.monitor.entity.domain.MonitorHostDO; @@ -74,6 +76,7 @@ import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 监控主机 服务实现类 @@ -235,6 +238,48 @@ public class MonitorHostServiceImpl implements MonitorHostService { return seriesList; } + @Override + public List getMonitorHostPolicyRuleTags(Long policyId, String measurement) { + MeasurementEnum measurementEnum = MeasurementEnum.of(measurement); + if (measurementEnum == null) { + return Collections.emptyList(); + } + // 查询缓存 + String cacheKey = MonitorHostCacheKeyDefine.MONITOR_HOST_POLICY_HOST_TAGS.format(policyId); + String value = RedisMaps.get(cacheKey, measurement); + if (!Strings.isBlank(value)) { + return JSON.parseArray(value, String.class); + } + // 查询规则下的全部主机 + List metas = monitorHostDAO.selectByPolicyId(policyId) + .stream() + .map(MonitorHostDO::getMonitorMeta) + .filter(Objects::nonNull) + .map(s -> JSON.parseObject(s, MonitorHostMetaDTO.class)) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + // 映射数据 + Function> tagsGetter; + if (MeasurementEnum.CPU.equals(measurementEnum)) { + tagsGetter = MonitorHostMetaDTO::getCpus; + } else if (MeasurementEnum.DISK.equals(measurementEnum)) { + tagsGetter = MonitorHostMetaDTO::getDisks; + } else if (MeasurementEnum.NETWORK.equals(measurementEnum)) { + tagsGetter = MonitorHostMetaDTO::getNets; + } else { + return Collections.emptyList(); + } + List tags = metas.stream() + .map(tagsGetter) + .flatMap(Collection::stream) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + // 设置缓存 + RedisMaps.putJson(cacheKey, MonitorHostCacheKeyDefine.MONITOR_HOST_POLICY_HOST_TAGS, measurement, tags); + return tags; + } + @Override @Transactional(rollbackFor = Exception.class) public Integer updateMonitorHostById(MonitorHostUpdateRequest request) { @@ -272,7 +317,15 @@ public class MonitorHostServiceImpl implements MonitorHostService { if (policyId == null) { monitorHostDAO.setPolicyIdWithNullById(id); } - // 更新缓存 + // 删除元数据缓存 + List tagsCacheKeyList = Stream.of(policyId, monitorHost.getPolicyId()) + .filter(Objects::nonNull) + .map(MonitorHostCacheKeyDefine.MONITOR_HOST_POLICY_HOST_TAGS::format) + .collect(Collectors.toList()); + if (!tagsCacheKeyList.isEmpty()) { + RedisMaps.delete(tagsCacheKeyList); + } + // 重新加载监控主机上下文 monitorContext.reloadMonitorHost(host.getAgentKey()); log.info("MonitorHostService-updateMonitorHostById effect: {}", effect); return effect; diff --git a/orion-visor-ui/src/api/monitor/alarm-rule.ts b/orion-visor-ui/src/api/monitor/alarm-rule.ts index 21563a8b..28d38701 100644 --- a/orion-visor-ui/src/api/monitor/alarm-rule.ts +++ b/orion-visor-ui/src/api/monitor/alarm-rule.ts @@ -72,8 +72,8 @@ export function updateAlarmRuleSwitch(request: AlarmRuleUpdateRequest) { /** * 查询全部监控告警规则 */ -export function getAlarmRuleList(policyId: number, metricsMeasurement: string = '') { - return axios.get>('/monitor/alarm-policy-rule/list', { params: { policyId, metricsMeasurement } }); +export function getAlarmRuleList(policyId: number, measurement: string = '') { + return axios.get>('/monitor/alarm-policy-rule/list', { params: { policyId, measurement } }); } /** diff --git a/orion-visor-ui/src/api/monitor/monitor-host.ts b/orion-visor-ui/src/api/monitor/monitor-host.ts index fd025031..3d6b86aa 100644 --- a/orion-visor-ui/src/api/monitor/monitor-host.ts +++ b/orion-visor-ui/src/api/monitor/monitor-host.ts @@ -177,6 +177,13 @@ export function getMonitorHostPage(request: MonitorHostQueryRequest) { return axios.post>('/monitor/monitor-host/query', request); } +/** + * 查询监控告警标签 + */ +export function getMonitorHostPolicyRuleTags(policyId: number, measurement: string = '') { + return axios.get>('/monitor/monitor-host/host-tags', { params: { policyId, measurement } }); +} + /** * 更新监控主机 */ diff --git a/orion-visor-ui/src/views/monitor/alarm-rule/components/alarm-rule-form-drawer.vue b/orion-visor-ui/src/views/monitor/alarm-rule/components/alarm-rule-form-drawer.vue index 54029640..a88e4555 100644 --- a/orion-visor-ui/src/views/monitor/alarm-rule/components/alarm-rule-form-drawer.vue +++ b/orion-visor-ui/src/views/monitor/alarm-rule/components/alarm-rule-form-drawer.vue @@ -6,7 +6,7 @@ :unmount-on-close="true" :ok-button-props="{ disabled: loading }" :cancel-button-props="{ disabled: loading }" - :on-before-ok="handlerOk" + :on-before-ok="handleOk" @cancel="handleClose"> -