diff --git a/docker-compose-testing.yaml b/docker-compose-testing.yaml index 1d189c97..a6a5c363 100644 --- a/docker-compose-testing.yaml +++ b/docker-compose-testing.yaml @@ -19,6 +19,10 @@ services: DEMO_MODE: false volumes: - /data/orion-visor-space/docker-volumes/service/root-orion:/root/orion + ulimits: + nofile: + soft: 65536 + hard: 65536 healthcheck: test: [ "CMD", "curl", "http://127.0.0.1:9200/orion-visor/api/server/bootstrap/health" ] interval: 15s @@ -87,4 +91,4 @@ services: networks: orion-visor-net: - driver: bridge \ No newline at end of file + driver: bridge diff --git a/docker-compose.yaml b/docker-compose.yaml index 73371019..1fa5ec0f 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,6 +1,6 @@ version: '3.3' -# latest = 2.5.2 +# latest = 2.5.1 # 支持以下源 # lijiahangmax/* @@ -27,10 +27,6 @@ services: privileged: true ports: - "9200:9200" - ulimits: - nofile: - soft: 65536 - hard: 65536 environment: SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE:-prod} MYSQL_HOST: ${MYSQL_HOST:-mysql} @@ -57,6 +53,10 @@ services: DEMO_MODE: ${DEMO_MODE:-false} volumes: - ${VOLUME_BASE:-/data/orion-visor-space/docker-volumes}/service/root-orion:/root/orion + ulimits: + nofile: + soft: 65536 + hard: 65536 restart: unless-stopped healthcheck: test: [ "CMD", "curl", "http://127.0.0.1:9200/orion-visor/api/server/bootstrap/health" ] @@ -178,4 +178,4 @@ services: networks: orion-visor-net: - driver: bridge \ No newline at end of file + driver: bridge diff --git a/docker/docker-build.sh b/docker/docker-build.sh index eeed49ac..f08e6efc 100644 --- a/docker/docker-build.sh +++ b/docker/docker-build.sh @@ -7,7 +7,7 @@ set -e source ./project-build.sh "$@" # 版本号 -version=2.5.2 +version=2.5.3 # 是否推送镜像 push_image=false # 是否构建 latest diff --git a/docker/project-build.sh b/docker/project-build.sh index 2a5e96c3..ef744e40 100644 --- a/docker/project-build.sh +++ b/docker/project-build.sh @@ -4,7 +4,7 @@ set -e # DockerContext: orion-visor # 版本号 -version=2.5.2 +version=2.5.3 # 是否构建 service export build_service=false # 是否构建 ui diff --git a/orion-visor-common/src/main/java/org/dromara/visor/common/constant/AppConst.java b/orion-visor-common/src/main/java/org/dromara/visor/common/constant/AppConst.java index fd4b4031..0ecc1929 100644 --- a/orion-visor-common/src/main/java/org/dromara/visor/common/constant/AppConst.java +++ b/orion-visor-common/src/main/java/org/dromara/visor/common/constant/AppConst.java @@ -36,7 +36,7 @@ public interface AppConst extends OrionConst { /** * 同 ${orion.version} 迭代时候需要手动更改 */ - String VERSION = "2.5.2"; + String VERSION = "2.5.3"; /** * 同 ${spring.application.name} diff --git a/orion-visor-common/src/main/java/org/dromara/visor/common/constant/AutoConfigureOrderConst.java b/orion-visor-common/src/main/java/org/dromara/visor/common/constant/AutoConfigureOrderConst.java index c11c7a29..4fdfdc85 100644 --- a/orion-visor-common/src/main/java/org/dromara/visor/common/constant/AutoConfigureOrderConst.java +++ b/orion-visor-common/src/main/java/org/dromara/visor/common/constant/AutoConfigureOrderConst.java @@ -33,6 +33,8 @@ package org.dromara.visor.common.constant; */ public interface AutoConfigureOrderConst { + int FRAMEWORK_EXECUTOR = Integer.MIN_VALUE + 1000; + int FRAMEWORK_WEB = Integer.MIN_VALUE + 1100; int FRAMEWORK_SECURITY = Integer.MIN_VALUE + 1200; @@ -65,8 +67,6 @@ public interface AutoConfigureOrderConst { int FRAMEWORK_JOB_QUARTZ = Integer.MIN_VALUE + 2610; - int FRAMEWORK_JOB_ASYNC = Integer.MIN_VALUE + 2620; - int FRAMEWORK_BIZ_PUSH = Integer.MIN_VALUE + 2700; int FRAMEWORK_BIZ_OPERATOR_LOG = Integer.MIN_VALUE + 7000; diff --git a/orion-visor-dependencies/pom.xml b/orion-visor-dependencies/pom.xml index 22e38a91..bbd0dd7f 100644 --- a/orion-visor-dependencies/pom.xml +++ b/orion-visor-dependencies/pom.xml @@ -14,7 +14,7 @@ https://github.com/dromara/orion-visor - 2.5.2 + 2.5.3 2.7.17 2.7.15 1.5.0 @@ -106,6 +106,11 @@ orion-visor-spring-boot-starter-job ${revision} + + org.dromara.visor + orion-visor-spring-boot-starter-executor + ${revision} + org.dromara.visor orion-visor-spring-boot-starter-websocket diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-biz-push/src/main/java/org/dromara/visor/framework/biz/push/core/listener/PushMessageEventListener.java b/orion-visor-framework/orion-visor-spring-boot-starter-biz-push/src/main/java/org/dromara/visor/framework/biz/push/core/listener/PushMessageEventListener.java index 6df72da8..da16acde 100644 --- a/orion-visor-framework/orion-visor-spring-boot-starter-biz-push/src/main/java/org/dromara/visor/framework/biz/push/core/listener/PushMessageEventListener.java +++ b/orion-visor-framework/orion-visor-spring-boot-starter-biz-push/src/main/java/org/dromara/visor/framework/biz/push/core/listener/PushMessageEventListener.java @@ -48,8 +48,7 @@ public class PushMessageEventListener implements ApplicationListener) pushServiceMap.get(message.getChannel()); } -} \ No newline at end of file +} diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-executor/pom.xml b/orion-visor-framework/orion-visor-spring-boot-starter-executor/pom.xml new file mode 100644 index 00000000..c6761bf4 --- /dev/null +++ b/orion-visor-framework/orion-visor-spring-boot-starter-executor/pom.xml @@ -0,0 +1,27 @@ + + + + org.dromara.visor + orion-visor-framework + ${revision} + + + 4.0.0 + orion-visor-spring-boot-starter-executor + ${project.artifactId} + jar + + 项目线程池配置包 + https://github.com/dromara/orion-visor + + + + + org.dromara.visor + orion-visor-common + + + + diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/configuration/OrionExecutorAutoConfiguration.java b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/configuration/OrionExecutorAutoConfiguration.java new file mode 100644 index 00000000..2df895b9 --- /dev/null +++ b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/configuration/OrionExecutorAutoConfiguration.java @@ -0,0 +1,70 @@ +/* + * 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.framework.executor.configuration; + +import org.dromara.visor.common.constant.AutoConfigureOrderConst; +import org.dromara.visor.framework.executor.configuration.config.ExecutorsConfig; +import org.dromara.visor.framework.executor.core.context.ExecutorContext; +import org.dromara.visor.framework.executor.core.utils.ExecutorUtils; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureOrder; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.Map; + +/** + * 项目线程池配置 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2025/9/16 14:34 + */ +@EnableAsync +@AutoConfiguration +@EnableConfigurationProperties({ExecutorsConfig.class}) +@AutoConfigureOrder(AutoConfigureOrderConst.FRAMEWORK_EXECUTOR) +public class OrionExecutorAutoConfiguration { + + /** + * 创建线程池上下文 + * + * @param executorsConfig executorsConfig + * @param beanFactory beanFactory + * @return 线程池上下文 + */ + @Bean + public ExecutorContext executorContext(ExecutorsConfig executorsConfig, + ConfigurableBeanFactory beanFactory) { + // 创建上下文 + ExecutorContext context = new ExecutorContext(executorsConfig, beanFactory); + Map executorMap = context.init(); + // 获取线程池列表 + ExecutorUtils.setExecutors(executorMap); + return context; + } + +} diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/configuration/config/ExecutorConfig.java b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/configuration/config/ExecutorConfig.java new file mode 100644 index 00000000..2d65c14c --- /dev/null +++ b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/configuration/config/ExecutorConfig.java @@ -0,0 +1,102 @@ +/* + * 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.framework.executor.configuration.config; + +import cn.orionsec.kit.lang.define.thread.RejectPolicy; +import cn.orionsec.kit.lang.utils.Systems; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; + +/** + * 线程池配置 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2025/9/16 10:51 + */ +@Data +@Builder +@AllArgsConstructor +public class ExecutorConfig { + + /** + * 是否启用 + */ + private boolean enabled; + + /** + * 是否使用 MDC + */ + private boolean mdc; + + /** + * 核心线程数 + */ + private int corePoolSize; + + /** + * 最大线程数 + */ + private int maxPoolSize; + + /** + * 队列容量 + */ + private int queueCapacity; + + /** + * 空闲线程存活时间 + */ + private int keepAliveSeconds; + + /** + * 是否允许核心线程超时 + */ + private boolean allowCoreTimeout; + + /** + * 是否使用同步队列 + */ + private boolean synchronousQueue; + + /** + * 线程名称前缀 + */ + private String threadNamePrefix; + + /** + * 拒绝策略 + */ + private RejectPolicy rejectPolicy; + + public ExecutorConfig() { + this.enabled = true; + this.corePoolSize = Systems.PROCESS_NUM; + this.maxPoolSize = Systems.PROCESS_NUM; + this.queueCapacity = 100; + this.keepAliveSeconds = 300; + this.rejectPolicy = RejectPolicy.CALLER_RUNS; + } + +} diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/java/org/dromara/visor/framework/job/configuration/config/AsyncExecutorConfig.java b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/configuration/config/ExecutorsConfig.java similarity index 59% rename from orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/java/org/dromara/visor/framework/job/configuration/config/AsyncExecutorConfig.java rename to orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/configuration/config/ExecutorsConfig.java index 4ea9f91c..db454c48 100644 --- a/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/java/org/dromara/visor/framework/job/configuration/config/AsyncExecutorConfig.java +++ b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/configuration/config/ExecutorsConfig.java @@ -20,47 +20,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.dromara.visor.framework.job.configuration.config; +package org.dromara.visor.framework.executor.configuration.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; +import java.util.Map; + /** - * 线程池配置类 + * 线程池配置 * * @author Jiahang Li * @version 1.0.0 - * @since 2023/7/10 15:49 + * @since 2025/9/16 16:21 */ @Data -@ConfigurationProperties(prefix = "orion.async.executor") -public class AsyncExecutorConfig { +@ConfigurationProperties(prefix = "app") +public class ExecutorsConfig { /** - * 核心线程数量 + * 线程池配置 */ - private int corePoolSize; - - /** - * 最大线程数量 - */ - private int maxPoolSize; - - /** - * 队列容量 - */ - private int queueCapacity; - - /** - * 活跃时间 - */ - private int keepAliveSeconds; - - public AsyncExecutorConfig() { - this.corePoolSize = 8; - this.maxPoolSize = 16; - this.queueCapacity = 200; - this.keepAliveSeconds = 300; - } + private Map executors; } diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/core/context/ExecutorContext.java b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/core/context/ExecutorContext.java new file mode 100644 index 00000000..43ee3df3 --- /dev/null +++ b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/core/context/ExecutorContext.java @@ -0,0 +1,119 @@ +/* + * 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.framework.executor.core.context; + +import cn.orionsec.kit.lang.define.thread.RejectPolicy; +import cn.orionsec.kit.lang.utils.Strings; +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.dromara.visor.common.thread.ThreadPoolMdcTaskExecutor; +import org.dromara.visor.framework.executor.configuration.config.ExecutorConfig; +import org.dromara.visor.framework.executor.configuration.config.ExecutorsConfig; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.HashMap; +import java.util.Map; + +/** + * 执行器上下文 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2025/9/16 16:28 + */ +@Slf4j +public class ExecutorContext { + + private final ExecutorsConfig executorsConfig; + + private final ConfigurableBeanFactory beanFactory; + + public ExecutorContext(ExecutorsConfig executorsConfig, ConfigurableBeanFactory beanFactory) { + this.executorsConfig = executorsConfig; + this.beanFactory = beanFactory; + } + + /** + * 初始化 + * + * @return executorMap + */ + public Map init() { + log.info("--------- Executors init start --------- "); + Map executorMap = new HashMap<>(); + executorsConfig.getExecutors().forEach((beanName, config) -> { + String executorName = Strings.leftPad(beanName, 30); + // 是否启用 + if (!config.isEnabled()) { + log.info("Executor [{}] is disabled.", executorName); + return; + } + // 创建线程池 + ThreadPoolTaskExecutor executor = this.createTaskExecutor(config); + // 注册到容器中 + beanFactory.registerSingleton(beanName, executor); + executorMap.put(beanName, executor); + log.info("Executor [{}] init success. {}", executorName, JSON.toJSONString(config)); + }); + log.info("--------- Executors init end --------- "); + return executorMap; + } + + /** + * 创建线程池 + * + * @param config config + */ + private ThreadPoolTaskExecutor createTaskExecutor(ExecutorConfig config) { + // 创建线程池 + ThreadPoolTaskExecutor executor; + if (config.isMdc()) { + executor = new ThreadPoolMdcTaskExecutor(); + } else { + executor = new ThreadPoolTaskExecutor(); + } + // 同步队列 + if (config.isSynchronousQueue()) { + config.setCorePoolSize(0); + config.setMaxPoolSize(Integer.MAX_VALUE); + config.setQueueCapacity(0); + config.setRejectPolicy(RejectPolicy.ABORT); + } + // 设置参数 + executor.setCorePoolSize(config.getCorePoolSize()); + executor.setMaxPoolSize(config.getMaxPoolSize()); + executor.setQueueCapacity(config.getQueueCapacity()); + executor.setThreadNamePrefix(config.getThreadNamePrefix()); + executor.setKeepAliveSeconds(config.getKeepAliveSeconds()); + executor.setAllowCoreThreadTimeOut(config.isAllowCoreTimeout()); + executor.setRejectedExecutionHandler(config.getRejectPolicy().getHandler()); + // 设置等待所有任务执行结束再关闭线程池 + executor.setWaitForTasksToCompleteOnShutdown(true); + executor.setAwaitTerminationSeconds(60); + // 初始化 + executor.initialize(); + return executor; + } + +} diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/core/utils/ExecutorUtils.java b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/core/utils/ExecutorUtils.java new file mode 100644 index 00000000..5666b3cf --- /dev/null +++ b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/java/org/dromara/visor/framework/executor/core/utils/ExecutorUtils.java @@ -0,0 +1,84 @@ +/* + * 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.framework.executor.core.utils; + +import cn.orionsec.kit.lang.able.Executable; +import cn.orionsec.kit.lang.utils.Exceptions; +import cn.orionsec.kit.lang.utils.collect.Maps; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.Map; + +/** + * 线程池工具类 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2025/9/16 16:34 + */ +public class ExecutorUtils { + + private static Map executorMap; + + private ExecutorUtils() { + } + + /** + * 获取线程池 + * + * @param name name + * @return executor + */ + public static ThreadPoolTaskExecutor getExecutor(String name) { + return executorMap.get(name); + } + + /** + * 执行 + * + * @param name name + * @param runnable runnable + */ + public static void execute(String name, Runnable runnable) { + getExecutor(name).execute(runnable); + } + + /** + * 执行 + * + * @param name name + * @param executable executable + */ + public static void execute(String name, Executable executable) { + getExecutor(name).execute(executable::exec); + } + + public static void setExecutors(Map executorMap) { + if (ExecutorUtils.executorMap != null) { + // unmodified + throw Exceptions.state(); + } + ExecutorUtils.executorMap = Maps.unmodified(executorMap); + } + +} diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 00000000..25f0906c --- /dev/null +++ b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,77 @@ +{ + "groups": [ + { + "name": "orion.executors.*", + "type": "org.dromara.visor.framework.executor.configuration.config.ExecutorConfig", + "sourceType": "org.dromara.visor.framework.executor.configuration.config.ExecutorConfig", + "description": "线程池配置项." + } + ], + "properties": [ + { + "name": "orion.executors", + "type": "java.util.Map", + "description": "线程池配置.", + "defaultValue": "{}" + }, + { + "name": "orion.executors.*.enabled", + "type": "java.lang.Boolean", + "description": "是否启用.", + "defaultValue": false + }, + { + "name": "orion.executors.*.corePoolSize", + "type": "java.lang.Integer", + "description": "核心线程数.", + "defaultValue": "CPU_NUM" + }, + { + "name": "orion.executors.*.maxPoolSize", + "type": "java.lang.Integer", + "description": "最大线程数.", + "defaultValue": "CPU_NUM" + }, + { + "name": "orion.executors.*.queueCapacity", + "type": "java.lang.Integer", + "description": "任务队列容量.", + "defaultValue": 100 + }, + { + "name": "orion.executors.*.keepAliveSeconds", + "type": "java.lang.Integer", + "description": "空闲线程存活时间.", + "defaultValue": 60 + }, + { + "name": "orion.executors.*.allowCoreTimeout", + "type": "java.lang.Boolean", + "description": "是否允许核心线程超时回收.", + "defaultValue": false + }, + { + "name": "orion.executors.*.synchronousQueue", + "type": "java.lang.Boolean", + "description": "是否启用同步队列模式.", + "defaultValue": false + }, + { + "name": "orion.executors.*.mdc", + "type": "java.lang.Boolean", + "description": "是否启用 MDC 上下文传递.", + "defaultValue": false + }, + { + "name": "orion.executors.*.threadNamePrefix", + "type": "java.lang.String", + "description": "线程名称前缀." + }, + { + "name": "orion.executors.*.rejectPolicy", + "type": "cn.orionsec.kit.lang.define.thread.RejectPolicy", + "description": "拒绝策略.", + "defaultValue": "CALLER_RUNS" + } + ] +} diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..9ef44eb1 --- /dev/null +++ b/orion-visor-framework/orion-visor-spring-boot-starter-executor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +org.dromara.visor.framework.executor.configuration.OrionExecutorAutoConfiguration diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-influxdb/src/main/java/org/dromara/visor/framework/influxdb/core/query/FluxQueryBuilder.java b/orion-visor-framework/orion-visor-spring-boot-starter-influxdb/src/main/java/org/dromara/visor/framework/influxdb/core/query/FluxQueryBuilder.java index 1e479080..9289e369 100644 --- a/orion-visor-framework/orion-visor-spring-boot-starter-influxdb/src/main/java/org/dromara/visor/framework/influxdb/core/query/FluxQueryBuilder.java +++ b/orion-visor-framework/orion-visor-spring-boot-starter-influxdb/src/main/java/org/dromara/visor/framework/influxdb/core/query/FluxQueryBuilder.java @@ -24,6 +24,7 @@ package org.dromara.visor.framework.influxdb.core.query; import cn.orionsec.kit.lang.utils.collect.Collections; import cn.orionsec.kit.lang.utils.collect.Lists; +import cn.orionsec.kit.lang.utils.collect.Maps; import org.dromara.visor.common.constant.Const; import java.time.Instant; @@ -194,7 +195,7 @@ public class FluxQueryBuilder { if (values.size() == 1) { return this.tag(key, Collections.first(values)); } - // + // 使用 or 拼接 Collection conditions = values.stream() .map(value -> String.format("r[\"%s\"] == \"%s\"", key, value)) .collect(Collectors.toList()); @@ -204,33 +205,18 @@ public class FluxQueryBuilder { } /** - * 过滤多个 tag - * tag 使用 and - * value 使用 or + * 过滤 tag * * @param tags tags * @return this */ public FluxQueryBuilder tags(Map> tags) { - for (Map.Entry> entry : tags.entrySet()) { - String key = entry.getKey(); - Collection values = entry.getValue(); - if (Collections.isEmpty(values)) { - continue; - } - if (values.size() == 1) { - // 单值直接用等号 - String singleValue = values.iterator().next(); - this.appendFilter(String.format("r[\"%s\"] == \"%s\"", key, singleValue)); - } else { - // 多值用 OR - Collection conditions = values.stream() - .map(v -> String.format("r[\"%s\"] == \"%s\"", key, v)) - .collect(Collectors.toList()); - this.appendFilter("(" + String.join(" or ", conditions) + ")"); - } + if (Maps.isEmpty(tags)) { + return this; + } + for (Map.Entry> entry : tags.entrySet()) { + this.tag(entry.getKey(), entry.getValue()); } - this.closeFilter(); return this; } diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/java/org/dromara/visor/framework/job/configuration/OrionAsyncAutoConfiguration.java b/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/java/org/dromara/visor/framework/job/configuration/OrionAsyncAutoConfiguration.java deleted file mode 100644 index 7544e5b8..00000000 --- a/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/java/org/dromara/visor/framework/job/configuration/OrionAsyncAutoConfiguration.java +++ /dev/null @@ -1,96 +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.framework.job.configuration; - -import org.dromara.visor.common.constant.AutoConfigureOrderConst; -import org.dromara.visor.common.constant.Const; -import org.dromara.visor.common.thread.ThreadPoolMdcTaskExecutor; -import org.dromara.visor.framework.job.configuration.config.AsyncExecutorConfig; -import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.autoconfigure.AutoConfigureOrder; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.core.task.TaskExecutor; -import org.springframework.scheduling.annotation.EnableAsync; - -import java.util.concurrent.ThreadPoolExecutor; - -/** - * async 异步任务 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023/6/20 10:34 - */ -@EnableAsync -@AutoConfiguration -@AutoConfigureOrder(AutoConfigureOrderConst.FRAMEWORK_JOB_ASYNC) -@EnableConfigurationProperties(AsyncExecutorConfig.class) -public class OrionAsyncAutoConfiguration { - - /** - * {@code @Async("asyncExecutor")} - * - * @return 支持 MDC 的异步线程池 - */ - @Bean(name = "asyncExecutor") - public TaskExecutor asyncExecutor(AsyncExecutorConfig config) { - ThreadPoolMdcTaskExecutor executor = new ThreadPoolMdcTaskExecutor(); - executor.setCorePoolSize(config.getCorePoolSize()); - executor.setMaxPoolSize(config.getMaxPoolSize()); - executor.setQueueCapacity(config.getQueueCapacity()); - executor.setKeepAliveSeconds(config.getKeepAliveSeconds()); - executor.setAllowCoreThreadTimeOut(true); - executor.setThreadNamePrefix("async-task-"); - // 设置等待所有任务执行结束再关闭线程池 - executor.setWaitForTasksToCompleteOnShutdown(true); - // 以确保应用最后能够被关闭 - executor.setAwaitTerminationSeconds(60); - // 调用者调用拒绝策略 - executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - executor.initialize(); - return executor; - } - - /** - * {@code @Async("metricsExecutor")} - * - * @return 指标线程池 - */ - @Bean(name = "metricsExecutor") - public TaskExecutor metricsExecutor() { - ThreadPoolMdcTaskExecutor executor = new ThreadPoolMdcTaskExecutor(); - executor.setCorePoolSize(4); - executor.setMaxPoolSize(8); - executor.setQueueCapacity(1000); - executor.setKeepAliveSeconds(Const.MS_S_60); - executor.setAllowCoreThreadTimeOut(true); - executor.setThreadNamePrefix("metrics-task-"); - executor.setWaitForTasksToCompleteOnShutdown(true); - executor.setAwaitTerminationSeconds(60); - executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - executor.initialize(); - return executor; - } - -} diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/java/org/dromara/visor/framework/job/configuration/OrionSchedulerAutoConfiguration.java b/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/java/org/dromara/visor/framework/job/configuration/OrionSchedulerAutoConfiguration.java index c6c78804..81b14a16 100644 --- a/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/java/org/dromara/visor/framework/job/configuration/OrionSchedulerAutoConfiguration.java +++ b/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/java/org/dromara/visor/framework/job/configuration/OrionSchedulerAutoConfiguration.java @@ -25,6 +25,8 @@ package org.dromara.visor.framework.job.configuration; import org.dromara.visor.common.constant.AutoConfigureOrderConst; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigureOrder; +import org.springframework.boot.autoconfigure.task.TaskSchedulingProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.annotation.EnableScheduling; @@ -40,17 +42,18 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; @EnableScheduling @AutoConfiguration @AutoConfigureOrder(AutoConfigureOrderConst.FRAMEWORK_JOB) +@EnableConfigurationProperties(TaskSchedulingProperties.class) public class OrionSchedulerAutoConfiguration { /** * @return 任务调度器 */ @Bean - public TaskScheduler taskScheduler() { + public TaskScheduler taskScheduler(TaskSchedulingProperties properties) { ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); - scheduler.setPoolSize(4); scheduler.setRemoveOnCancelPolicy(true); - scheduler.setThreadNamePrefix("scheduling-task-"); + scheduler.setPoolSize(properties.getPool().getSize()); + scheduler.setThreadNamePrefix(properties.getThreadNamePrefix()); return scheduler; } diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/resources/META-INF/additional-spring-configuration-metadata.json deleted file mode 100644 index 80da6cb2..00000000 --- a/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "groups": [ - { - "name": "orion.async.executor", - "type": "org.dromara.visor.framework.job.configuration.config.AsyncExecutorConfig", - "sourceType": "org.dromara.visor.framework.job.configuration.config.AsyncExecutorConfig" - } - ], - "properties": [ - { - "name": "orion.async.executor.core-pool-size", - "type": "java.lang.Integer", - "description": "核心线程数量.", - "defaultValue": "8" - }, - { - "name": "orion.async.executor.max-pool-size", - "type": "java.lang.Integer", - "description": "最大线程数量.", - "defaultValue": "16" - }, - { - "name": "orion.async.executor.queue-capacity", - "type": "java.lang.Integer", - "description": "队列容量.", - "defaultValue": "200" - }, - { - "name": "orion.async.executor.keep-alive-seconds", - "type": "java.lang.Integer", - "description": "活跃时间.", - "defaultValue": "300" - } - ] -} \ No newline at end of file diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 73005eb9..5b215b2a 100644 --- a/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/orion-visor-framework/orion-visor-spring-boot-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,3 +1,2 @@ org.dromara.visor.framework.job.configuration.OrionSchedulerAutoConfiguration org.dromara.visor.framework.job.configuration.OrionQuartzAutoConfiguration -org.dromara.visor.framework.job.configuration.OrionAsyncAutoConfiguration \ No newline at end of file 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-framework/orion-visor-spring-boot-starter-web/src/main/java/org/dromara/visor/framework/web/configuration/OrionWebAutoConfiguration.java b/orion-visor-framework/orion-visor-spring-boot-starter-web/src/main/java/org/dromara/visor/framework/web/configuration/OrionWebAutoConfiguration.java index 18fb70d8..6e89fe0e 100644 --- a/orion-visor-framework/orion-visor-spring-boot-starter-web/src/main/java/org/dromara/visor/framework/web/configuration/OrionWebAutoConfiguration.java +++ b/orion-visor-framework/orion-visor-spring-boot-starter-web/src/main/java/org/dromara/visor/framework/web/configuration/OrionWebAutoConfiguration.java @@ -42,6 +42,7 @@ import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.DependsOn; import org.springframework.http.MediaType; import org.springframework.http.converter.ByteArrayHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; @@ -67,6 +68,7 @@ import java.util.List; * @version 1.0.0 * @since 2023/6/16 16:26 */ +@DependsOn({"executorContext"}) @AutoConfiguration @AutoConfigureOrder(AutoConfigureOrderConst.FRAMEWORK_WEB) @EnableConfigurationProperties(ExposeApiConfig.class) diff --git a/orion-visor-framework/pom.xml b/orion-visor-framework/pom.xml index 5b9f3849..eb543e33 100644 --- a/orion-visor-framework/pom.xml +++ b/orion-visor-framework/pom.xml @@ -24,6 +24,7 @@ orion-visor-spring-boot-starter-cipher orion-visor-spring-boot-starter-config orion-visor-spring-boot-starter-job + orion-visor-spring-boot-starter-executor orion-visor-spring-boot-starter-websocket orion-visor-spring-boot-starter-redis orion-visor-spring-boot-starter-desensitize @@ -37,4 +38,4 @@ orion-visor-spring-boot-starter-biz-operator-log - \ No newline at end of file + diff --git a/orion-visor-launch/pom.xml b/orion-visor-launch/pom.xml index 06d81696..85b012fb 100644 --- a/orion-visor-launch/pom.xml +++ b/orion-visor-launch/pom.xml @@ -102,6 +102,10 @@ org.dromara.visor orion-visor-spring-boot-starter-job + + org.dromara.visor + orion-visor-spring-boot-starter-executor + org.dromara.visor orion-visor-spring-boot-starter-websocket @@ -199,4 +203,4 @@ - \ No newline at end of file + diff --git a/orion-visor-launch/src/main/resources/application-dev.yaml b/orion-visor-launch/src/main/resources/application-dev.yaml index 312c7a46..bfad7464 100644 --- a/orion-visor-launch/src/main/resources/application-dev.yaml +++ b/orion-visor-launch/src/main/resources/application-dev.yaml @@ -1,7 +1,7 @@ spring: datasource: druid: - url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:orion_visor}?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true + url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:orion_visor}?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true&rewriteBatchedStatements=true&useServerPrepStmts=false username: ${MYSQL_USER:root} password: ${MYSQL_PASSWORD:Data@123456} initial-size: 0 @@ -49,3 +49,84 @@ mybatis-plus: configuration: # 日志打印 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + +app: + executors: + # 默认异步线程池 + asyncExecutor: + mdc: true + core-pool-size: 2 + max-pool-size: 4 + queue-capacity: 30 + allow-core-timeout: false + thread-name-prefix: async-executor- + # 指标存储异步线程池 + metricsExecutor: + mdc: true + core-pool-size: 2 + max-pool-size: 2 + queue-capacity: 1000 + allow-core-timeout: true + thread-name-prefix: metrics-task- + # 推送异步线程池 + pushExecutor: + mdc: true + core-pool-size: 1 + max-pool-size: 1 + queue-capacity: 1000 + allow-core-timeout: true + thread-name-prefix: message-push- + # 探针安装线程池 + agentInstallExecutor: + core-pool-size: 2 + max-pool-size: 2 + queue-capacity: 200 + allow-core-timeout: true + thread-name-prefix: agent-install- + # 终端标准输出线程池 + terminalStdoutExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: terminal-stdout- + # 终端操作线程池 + terminalOperatorExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: terminal-operator- + # 终端异步保存线程池 + terminalAsyncSaverExecutor: + core-pool-size: 1 + max-pool-size: 1 + queue-capacity: 1000 + allow-core-timeout: true + thread-name-prefix: terminal-watcher- + # 批量执行超时检查线程池 + execTimeoutCheckExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: timeout-check- + # 批量执行任务线程池 + execTaskExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: exec-task- + # 批量执行主机命令线程池 + execHostCommandExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: exec-host- + # 批量执行日志查看线程池 + execLogViewExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: exec-log- + # 批量上传任务线程池 + uploadTaskExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: upload-task- + # 批量上传主机线程池 + uploadHostExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: upload-host- diff --git a/orion-visor-launch/src/main/resources/application-prod.yaml b/orion-visor-launch/src/main/resources/application-prod.yaml index c6cf2897..ffd195e1 100644 --- a/orion-visor-launch/src/main/resources/application-prod.yaml +++ b/orion-visor-launch/src/main/resources/application-prod.yaml @@ -1,7 +1,7 @@ spring: datasource: druid: - url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:orion_visor}?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true + url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:orion_visor}?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true&rewriteBatchedStatements=true&useServerPrepStmts=false username: ${MYSQL_USER:root} password: ${MYSQL_PASSWORD:Data@123456} # 初始连接数 @@ -84,9 +84,81 @@ orion: aes: # 加密密钥 secret-key: ${SECRET_KEY:uQeacXV8b3isvKLK} - async: - executor: + +app: + executors: + # 默认异步线程池 + asyncExecutor: + mdc: true core-pool-size: 8 max-pool-size: 16 - queue-capacity: 200 - keep-alive-seconds: 300 + queue-capacity: 100 + allow-core-timeout: false + thread-name-prefix: async-executor- + # 指标存储异步线程池 + metricsExecutor: + mdc: true + core-pool-size: 4 + max-pool-size: 4 + queue-capacity: 1000 + allow-core-timeout: true + thread-name-prefix: metrics-task- + # 推送异步线程池 + pushExecutor: + mdc: true + core-pool-size: 4 + max-pool-size: 4 + queue-capacity: 1000 + allow-core-timeout: true + thread-name-prefix: message-push- + # 探针安装线程池 + agentInstallExecutor: + allow-core-timeout: true + thread-name-prefix: agent-install- + # 终端标准输出线程池 + terminalStdoutExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: terminal-stdout- + # 终端操作线程池 + terminalOperatorExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: terminal-operator- + # 终端异步保存线程池 + terminalAsyncSaverExecutor: + core-pool-size: 1 + max-pool-size: 1 + queue-capacity: 1000 + allow-core-timeout: true + thread-name-prefix: terminal-watcher- + # 批量执行超时检查线程池 + execTimeoutCheckExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: timeout-check- + # 批量执行任务线程池 + execTaskExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: exec-task- + # 批量执行主机命令线程池 + execHostCommandExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: exec-host- + # 批量执行日志查看线程池 + execLogViewExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: exec-log- + # 批量上传任务线程池 + uploadTaskExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: upload-task- + # 批量上传主机线程池 + uploadHostExecutor: + synchronous-queue: true + allow-core-timeout: true + thread-name-prefix: upload-host- diff --git a/orion-visor-launch/src/main/resources/application.yaml b/orion-visor-launch/src/main/resources/application.yaml index c04432cc..1a151e5b 100644 --- a/orion-visor-launch/src/main/resources/application.yaml +++ b/orion-visor-launch/src/main/resources/application.yaml @@ -22,6 +22,11 @@ spring: async: # 异步请求时间 30min request-timeout: 1800000 + task: + scheduling: + thread-name-prefix: scheduling-task- + pool: + size: 4 datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver @@ -255,13 +260,6 @@ orion: secret-key: I66AndrKWrwXjtBL use-generator-key: true generator-key-length: 128 - async: - # 线程池配置 - executor: - core-pool-size: 2 - max-pool-size: 4 - queue-capacity: 30 - keep-alive-seconds: 180 operator-log: error-message-length: 255 user-agent-length: 128 diff --git a/orion-visor-launch/src/test/java/org/dromara/visor/launch/ReplaceVersion.java b/orion-visor-launch/src/test/java/org/dromara/visor/launch/ReplaceVersion.java index 839d7ecf..ad97dbbe 100644 --- a/orion-visor-launch/src/test/java/org/dromara/visor/launch/ReplaceVersion.java +++ b/orion-visor-launch/src/test/java/org/dromara/visor/launch/ReplaceVersion.java @@ -39,9 +39,9 @@ import java.util.function.Function; */ public class ReplaceVersion { - private static final String TARGET_VERSION = "2.5.1"; + private static final String TARGET_VERSION = "2.5.2"; - private static final String REPLACE_VERSION = "2.5.2"; + private static final String REPLACE_VERSION = "2.5.3"; private static final String PATH = new File("").getAbsolutePath(); diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-provider/src/main/java/org/dromara/visor/module/asset/api/HostAgentApi.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-provider/src/main/java/org/dromara/visor/module/asset/api/HostAgentApi.java index b9a3c15d..ac68616e 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-provider/src/main/java/org/dromara/visor/module/asset/api/HostAgentApi.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-provider/src/main/java/org/dromara/visor/module/asset/api/HostAgentApi.java @@ -48,10 +48,10 @@ public interface HostAgentApi { /** * 获取缓存名称 * - * @param agentKeyList agentKeyList + * @param agentKeys agentKeys * @return nameMap */ - Map getNameCacheByAgentKey(List agentKeyList); + Map getNameCacheByAgentKey(List agentKeys); /** * 获取缓存名称 diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/pom.xml b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/pom.xml index dea24084..657bfb13 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/pom.xml +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/pom.xml @@ -88,6 +88,10 @@ org.dromara.visor orion-visor-spring-boot-starter-job + + org.dromara.visor + orion-visor-spring-boot-starter-executor + org.dromara.visor orion-visor-spring-boot-starter-test @@ -102,4 +106,4 @@ - \ No newline at end of file + diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/api/impl/HostAgentApiImpl.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/api/impl/HostAgentApiImpl.java index d9831604..57074e0c 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/api/impl/HostAgentApiImpl.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/api/impl/HostAgentApiImpl.java @@ -103,11 +103,11 @@ public class HostAgentApiImpl implements HostAgentApi { } @Override - public Map getNameCacheByAgentKey(List agentKeyList) { + public Map getNameCacheByAgentKey(List agentKeys) { Map result = new HashMap<>(); List queryList = new ArrayList<>(); // 查询缓存 - for (String agentKey : agentKeyList) { + for (String agentKey : agentKeys) { HostBaseDTO host = AGENT_HOST_CACHE.get(agentKey); if (host != null) { result.put(agentKey, host.getName()); diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/dao/HostDAO.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/dao/HostDAO.java index 80842317..ef1c87ef 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/dao/HostDAO.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/dao/HostDAO.java @@ -92,14 +92,14 @@ public interface HostDAO extends IMapper { /** * 更新探针信息 * - * @param keys agentKeyList - * @param update update + * @param agentKeys agentKeys + * @param update update * @return effect */ - default int updateByAgentKeys(List keys, HostDO update) { + default int updateByAgentKeys(List agentKeys, HostDO update) { update.setUpdateTime(new Date()); // 更新 - return this.update(update, Conditions.in(HostDO::getAgentKey, keys)); + return this.update(update, Conditions.in(HostDO::getAgentKey, agentKeys)); } } diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/define/AssetThreadPools.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/define/AssetThreadPools.java index b38fe855..5dd72dc1 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/define/AssetThreadPools.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/define/AssetThreadPools.java @@ -22,12 +22,9 @@ */ package org.dromara.visor.module.asset.define; -import cn.orionsec.kit.lang.define.thread.ExecutorBuilder; -import cn.orionsec.kit.lang.utils.Systems; -import org.dromara.visor.common.constant.Const; +import org.dromara.visor.framework.executor.core.utils.ExecutorUtils; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.Executor; /** * 执行线程池 @@ -41,13 +38,6 @@ public interface AssetThreadPools { /** * 批量执行主机命令线程池 */ - ThreadPoolExecutor AGENT_INSTALL = ExecutorBuilder.create() - .namedThreadFactory("agent-install-") - .corePoolSize(Systems.PROCESS_NUM) - .maxPoolSize(Systems.PROCESS_NUM) - .keepAliveTime(Const.MS_S_60) - .workQueue(new LinkedBlockingQueue<>()) - .allowCoreThreadTimeout(true) - .build(); + Executor AGENT_INSTALL = ExecutorUtils.getExecutor("agentInstallExecutor"); } diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostAgentEndpointServiceImpl.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostAgentEndpointServiceImpl.java index 9cfc2f36..00307521 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostAgentEndpointServiceImpl.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostAgentEndpointServiceImpl.java @@ -212,25 +212,25 @@ public class HostAgentEndpointServiceImpl implements HostAgentEndpointService { /** * 标记在线状态 * - * @param agentKeyList agentKeyList - * @param status status + * @param agentKeys agentKeys + * @param status status */ - private void markOnlineStatus(List agentKeyList, AgentOnlineStatusEnum status) { - if (Lists.isEmpty(agentKeyList)) { + private void markOnlineStatus(List agentKeys, AgentOnlineStatusEnum status) { + if (Lists.isEmpty(agentKeys)) { return; } - log.info("HostAgentEndpointService mark {}. count: {}, keys: {}", status, agentKeyList.size(), agentKeyList); + log.info("HostAgentEndpointService mark {}. count: {}, keys: {}", status, agentKeys.size(), agentKeys); // 更新数据 HostDO update = HostDO.builder() .agentOnlineStatus(status.getValue()) .agentOnlineChangeTime(new Date()) .build(); - int effect = hostDAO.updateByAgentKeys(agentKeyList, update); + int effect = hostDAO.updateByAgentKeys(agentKeys, update); // 更新缓存 - agentKeyList.forEach(s -> ONLINE_STATUS_CACHE.put(s, status.getValue())); + agentKeys.forEach(s -> ONLINE_STATUS_CACHE.put(s, status.getValue())); log.info("HostAgentEndpointService mark {}. effect: {}", status, effect); // 插入日志 - List logList = hostDAO.selectIdByAgentKeys(agentKeyList) + List logList = hostDAO.selectIdByAgentKeys(agentKeys) .stream() .map(s -> { HostAgentLogDO agentLog = HostAgentLogDO.builder() @@ -250,7 +250,7 @@ public class HostAgentEndpointServiceImpl implements HostAgentEndpointService { } // 发送已下线事件 if (AgentOnlineStatusEnum.OFFLINE.equals(status)) { - SpringHolder.publishEvent(new AgentOfflineEvent(agentKeyList)); + SpringHolder.publishEvent(new AgentOfflineEvent(agentKeys)); } } diff --git a/orion-visor-modules/orion-visor-module-exec/orion-visor-module-exec-service/pom.xml b/orion-visor-modules/orion-visor-module-exec/orion-visor-module-exec-service/pom.xml index c8ad58ff..616a9f98 100644 --- a/orion-visor-modules/orion-visor-module-exec/orion-visor-module-exec-service/pom.xml +++ b/orion-visor-modules/orion-visor-module-exec/orion-visor-module-exec-service/pom.xml @@ -87,10 +87,14 @@ org.dromara.visor orion-visor-spring-boot-starter-job + + org.dromara.visor + orion-visor-spring-boot-starter-executor + org.dromara.visor orion-visor-spring-boot-starter-test - \ No newline at end of file + diff --git a/orion-visor-modules/orion-visor-module-exec/orion-visor-module-exec-service/src/main/java/org/dromara/visor/module/exec/define/ExecThreadPools.java b/orion-visor-modules/orion-visor-module-exec/orion-visor-module-exec-service/src/main/java/org/dromara/visor/module/exec/define/ExecThreadPools.java index 81e78ae2..5c1b9cdc 100644 --- a/orion-visor-modules/orion-visor-module-exec/orion-visor-module-exec-service/src/main/java/org/dromara/visor/module/exec/define/ExecThreadPools.java +++ b/orion-visor-modules/orion-visor-module-exec/orion-visor-module-exec-service/src/main/java/org/dromara/visor/module/exec/define/ExecThreadPools.java @@ -22,11 +22,9 @@ */ package org.dromara.visor.module.exec.define; -import cn.orionsec.kit.lang.define.thread.ExecutorBuilder; -import org.dromara.visor.common.constant.Const; +import org.dromara.visor.framework.executor.core.utils.ExecutorUtils; -import java.util.concurrent.SynchronousQueue; -import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.Executor; /** * 执行线程池 @@ -40,73 +38,31 @@ public interface ExecThreadPools { /** * 超时检查线程池 */ - ThreadPoolExecutor TIMEOUT_CHECK = ExecutorBuilder.create() - .namedThreadFactory("timeout-check-") - .corePoolSize(1) - .maxPoolSize(Integer.MAX_VALUE) - .keepAliveTime(Const.MS_S_60) - .workQueue(new SynchronousQueue<>()) - .allowCoreThreadTimeout(true) - .build(); + Executor TIMEOUT_CHECK = ExecutorUtils.getExecutor("execTimeoutCheckExecutor"); /** * 批量执行任务线程池 */ - ThreadPoolExecutor EXEC_TASK = ExecutorBuilder.create() - .namedThreadFactory("exec-task-") - .corePoolSize(1) - .maxPoolSize(Integer.MAX_VALUE) - .keepAliveTime(Const.MS_S_60) - .workQueue(new SynchronousQueue<>()) - .allowCoreThreadTimeout(true) - .build(); + Executor EXEC_TASK = ExecutorUtils.getExecutor("execTaskExecutor"); /** * 批量执行主机命令线程池 */ - ThreadPoolExecutor EXEC_HOST = ExecutorBuilder.create() - .namedThreadFactory("exec-host-") - .corePoolSize(1) - .maxPoolSize(Integer.MAX_VALUE) - .keepAliveTime(Const.MS_S_60) - .workQueue(new SynchronousQueue<>()) - .allowCoreThreadTimeout(true) - .build(); + Executor EXEC_HOST = ExecutorUtils.getExecutor("execHostCommandExecutor"); /** * 批量执行日志查看线程池 */ - ThreadPoolExecutor EXEC_LOG = ExecutorBuilder.create() - .namedThreadFactory("exec-log-") - .corePoolSize(1) - .maxPoolSize(Integer.MAX_VALUE) - .keepAliveTime(Const.MS_S_60) - .workQueue(new SynchronousQueue<>()) - .allowCoreThreadTimeout(true) - .build(); + Executor EXEC_LOG = ExecutorUtils.getExecutor("execLogViewExecutor"); /** * 批量上传任务线程池 */ - ThreadPoolExecutor UPLOAD_TASK = ExecutorBuilder.create() - .namedThreadFactory("upload-task-") - .corePoolSize(1) - .maxPoolSize(Integer.MAX_VALUE) - .keepAliveTime(Const.MS_S_60) - .workQueue(new SynchronousQueue<>()) - .allowCoreThreadTimeout(true) - .build(); + Executor UPLOAD_TASK = ExecutorUtils.getExecutor("uploadTaskExecutor"); /** * 批量上传主机线程池 */ - ThreadPoolExecutor UPLOAD_HOST = ExecutorBuilder.create() - .namedThreadFactory("upload-host-") - .corePoolSize(1) - .maxPoolSize(Integer.MAX_VALUE) - .keepAliveTime(Const.MS_S_60) - .workQueue(new SynchronousQueue<>()) - .allowCoreThreadTimeout(true) - .build(); + Executor UPLOAD_HOST = ExecutorUtils.getExecutor("uploadHostExecutor"); } diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/pom.xml b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/pom.xml index 6a67c475..65d76d12 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/pom.xml +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/pom.xml @@ -83,6 +83,10 @@ org.dromara.visor orion-visor-spring-boot-starter-job + + org.dromara.visor + orion-visor-spring-boot-starter-executor + org.dromara.visor orion-visor-spring-boot-starter-test @@ -111,4 +115,4 @@ - \ No newline at end of file + diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/controller/AlarmEventController.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/controller/AlarmEventController.java index c6666655..4977a0f7 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/controller/AlarmEventController.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/controller/AlarmEventController.java @@ -48,13 +48,13 @@ import javax.annotation.Resource; import java.util.List; /** - * 告警记录 api + * 告警事件 api * * @author Jiahang Li * @version 1.0.0 * @since 2025-9-17 21:31 */ -@Tag(name = "monitor - 告警记录服务") +@Tag(name = "monitor - 告警事件服务") @Slf4j @Validated @RestWrapper @@ -67,7 +67,7 @@ public class AlarmEventController { @IgnoreLog(IgnoreLogMode.RET) @PostMapping("/query") - @Operation(summary = "分页查询告警记录") + @Operation(summary = "分页查询告警事件") @PreAuthorize("@ss.hasPermission('monitor:alarm-event:query')") public DataGrid getAlarmEventPage(@Validated(Page.class) @RequestBody AlarmEventQueryRequest request) { return alarmEventService.getAlarmEventPage(request); @@ -76,7 +76,7 @@ public class AlarmEventController { @IgnoreLog(IgnoreLogMode.RET) @OperatorLog(AlarmEventOperatorType.HANDLE) @PostMapping("/handle") - @Operation(summary = "处理告警记录") + @Operation(summary = "处理告警事件") @PreAuthorize("@ss.hasPermission('monitor:alarm-event:handle')") public Integer handleAlarmEvent(@Validated @RequestBody AlarmEventHandleRequest request) { return alarmEventService.handleAlarmEvent(request); @@ -92,7 +92,7 @@ public class AlarmEventController { } @PostMapping("/count") - @Operation(summary = "查询告警记录数量") + @Operation(summary = "查询告警事件数量") @PreAuthorize("@ss.hasPermission('monitor:alarm-event:query')") public Long getAlarmEventCount(@Validated @RequestBody AlarmEventQueryRequest request) { return alarmEventService.getAlarmEventCount(request); @@ -101,7 +101,7 @@ public class AlarmEventController { @DemoDisableApi @OperatorLog(AlarmEventOperatorType.DELETE) @DeleteMapping("/delete") - @Operation(summary = "删除告警记录") + @Operation(summary = "删除告警事件") @Parameter(name = "id", description = "id", required = true) @PreAuthorize("@ss.hasPermission('monitor:alarm-event:delete')") public Integer deleteAlarmEvent(@RequestParam("id") Long id) { @@ -111,7 +111,7 @@ public class AlarmEventController { @DemoDisableApi @OperatorLog(AlarmEventOperatorType.DELETE) @DeleteMapping("/batch-delete") - @Operation(summary = "批量删除告警记录") + @Operation(summary = "批量删除告警事件") @Parameter(name = "idList", description = "idList", required = true) @PreAuthorize("@ss.hasPermission('monitor:alarm-event:delete')") public Integer batchDeleteAlarmEvent(@RequestParam("idList") List idList) { @@ -121,7 +121,7 @@ public class AlarmEventController { @DemoDisableApi @OperatorLog(AlarmEventOperatorType.CLEAR) @PostMapping("/clear") - @Operation(summary = "清理告警记录") + @Operation(summary = "清理告警事件") @PreAuthorize("@ss.hasPermission('monitor:alarm-event:management:clear')") public Integer clearAlarmEvent(@Validated @RequestBody AlarmEventClearRequest request) { return alarmEventService.clearAlarmEvent(request); 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..bc976a8c 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 @@ -38,10 +38,7 @@ import org.dromara.visor.framework.web.core.annotation.RestWrapper; import org.dromara.visor.module.monitor.define.operator.MonitorHostOperatorType; import org.dromara.visor.module.monitor.engine.MonitorContext; import org.dromara.visor.module.monitor.entity.dto.AgentMetricsDataDTO; -import org.dromara.visor.module.monitor.entity.request.host.MonitorHostChartRequest; -import org.dromara.visor.module.monitor.entity.request.host.MonitorHostQueryRequest; -import org.dromara.visor.module.monitor.entity.request.host.MonitorHostSwitchUpdateRequest; -import org.dromara.visor.module.monitor.entity.request.host.MonitorHostUpdateRequest; +import org.dromara.visor.module.monitor.entity.request.host.*; import org.dromara.visor.module.monitor.entity.vo.MonitorHostMetricsDataVO; import org.dromara.visor.module.monitor.entity.vo.MonitorHostVO; import org.dromara.visor.module.monitor.service.MonitorHostService; @@ -95,7 +92,7 @@ public class MonitorHostController { @Operation(summary = "查询监控指标") @PreAuthorize("@ss.hasPermission('monitor:monitor-host:query')") public List getMonitorHostMetrics(@Validated(Key.class) @RequestBody MonitorHostQueryRequest request) { - return monitorHostService.getMonitorHostMetrics(request.getAgentKeyList()); + return monitorHostService.getMonitorHostMetrics(request.getAgentKeys()); } @IgnoreLog(IgnoreLogMode.RET) @@ -106,6 +103,14 @@ public class MonitorHostController { return monitorHostService.getMonitorHostChart(request); } + @IgnoreLog(IgnoreLogMode.RET) + @PostMapping("/host-tags") + @Operation(summary = "查询监控告警标签") + @PreAuthorize("@ss.hasPermission('monitor:monitor-host:query')") + public List getMonitorHostTags(@RequestBody MonitorHostQueryTagRequest request) { + return monitorHostService.getMonitorHostTags(request); + } + @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/convert/AlarmEventConvert.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/convert/AlarmEventConvert.java index 17cf1559..37fbc756 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/convert/AlarmEventConvert.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/convert/AlarmEventConvert.java @@ -25,7 +25,7 @@ package org.dromara.visor.module.monitor.convert; import org.dromara.visor.module.monitor.entity.domain.AlarmEventDO; import org.dromara.visor.module.monitor.entity.dto.AlarmEventTriggerDTO; import org.dromara.visor.module.monitor.entity.dto.AlarmPolicyAlarmCountDTO; -import org.dromara.visor.module.monitor.entity.po.AlarmPolicyAlarmCountPO; +import org.dromara.visor.module.monitor.entity.po.AlarmEventCountPO; import org.dromara.visor.module.monitor.entity.request.alarm.AlarmEventQueryRequest; import org.dromara.visor.module.monitor.entity.vo.AlarmEventVO; import org.mapstruct.Mapper; @@ -34,7 +34,7 @@ import org.mapstruct.factory.Mappers; import java.util.List; /** - * 监控告警记录 内部对象转换器 + * 监控告警事件 内部对象转换器 * * @author Jiahang Li * @version 1.0.0 @@ -51,7 +51,7 @@ public interface AlarmEventConvert { AlarmEventTriggerDTO toTrigger(AlarmEventDO domain); - AlarmPolicyAlarmCountDTO toCount(AlarmPolicyAlarmCountPO domain); + AlarmPolicyAlarmCountDTO toCount(AlarmEventCountPO domain); List to(List list); diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/dao/AlarmEventDAO.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/dao/AlarmEventDAO.java index ff3544d6..bca1dda3 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/dao/AlarmEventDAO.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/dao/AlarmEventDAO.java @@ -26,13 +26,13 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.dromara.visor.framework.mybatis.core.mapper.IMapper; import org.dromara.visor.module.monitor.entity.domain.AlarmEventDO; -import org.dromara.visor.module.monitor.entity.po.AlarmPolicyRuleCountPO; +import org.dromara.visor.module.monitor.entity.po.AlarmEventCountPO; import java.util.Date; import java.util.List; /** - * 监控告警记录 Mapper 接口 + * 监控告警事件 Mapper 接口 * * @author Jiahang Li * @version 1.0.0 @@ -49,8 +49,8 @@ public interface AlarmEventDAO extends IMapper { * @param createTimeEnd createTimeEnd * @return count */ - List selectPolicyEventCount(@Param("policyIdList") List policyIdList, - @Param("createTimeStart") Date createTimeStart, - @Param("createTimeEnd") Date createTimeEnd); + List selectPolicyEventCount(@Param("policyIdList") List policyIdList, + @Param("createTimeStart") Date createTimeStart, + @Param("createTimeEnd") Date createTimeEnd); } 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/operator/AlarmEventOperatorType.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/define/operator/AlarmEventOperatorType.java index e81fbb6a..c52a625b 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/define/operator/AlarmEventOperatorType.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/define/operator/AlarmEventOperatorType.java @@ -30,7 +30,7 @@ import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRi import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.L; /** - * 监控告警记录 操作日志类型 + * 监控告警事件 操作日志类型 * * @author Jiahang Li * @version 1.0.0 @@ -51,9 +51,9 @@ public class AlarmEventOperatorType extends InitializingOperatorTypes { public OperatorType[] types() { return new OperatorType[]{ new OperatorType(L, HANDLE, "设置告警状态为 ${status} ${count} 条"), - new OperatorType(L, SET_FALSE, "设置告警记录为误报 ${count} 条"), - new OperatorType(H, DELETE, "删除告警记录 ${count} 条"), - new OperatorType(H, CLEAR, "清理告警记录 ${count} 条"), + new OperatorType(L, SET_FALSE, "设置告警事件为误报 ${count} 条"), + new OperatorType(H, DELETE, "删除告警事件 ${count} 条"), + new OperatorType(H, CLEAR, "清理告警事件 ${count} 条"), }; } diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/engine/AlarmEngineContext.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/engine/AlarmEngineContext.java index 1592490d..5ad880f2 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/engine/AlarmEngineContext.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/engine/AlarmEngineContext.java @@ -125,6 +125,9 @@ public class AlarmEngineContext { * @return rules */ private Map> getPolicyRules(List list) { + if (Lists.isEmpty(list)) { + return new HashMap<>(); + } // 转为 map Map> ruleMap = Lists.stream(list) .map(s -> { @@ -154,6 +157,9 @@ public class AlarmEngineContext { * @return id */ private List getPolicyEngineNotifier(List list) { + if (Lists.isEmpty(list)) { + return new ArrayList<>(); + } return list.stream() .map(AlarmPolicyNotifyDO::getNotifyId) .distinct() diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/domain/AlarmEventDO.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/domain/AlarmEventDO.java index d8119157..a9c0fab4 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/domain/AlarmEventDO.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/domain/AlarmEventDO.java @@ -36,7 +36,7 @@ import java.math.BigDecimal; import java.util.Date; /** - * 监控告警记录 实体对象 + * 监控告警事件 实体对象 * * @author Jiahang Li * @version 1.0.0 @@ -48,7 +48,7 @@ import java.util.Date; @AllArgsConstructor @EqualsAndHashCode(callSuper = true) @TableName(value = "monitor_alarm_event", autoResultMap = true) -@Schema(name = "AlarmEventDO", description = "监控告警记录 实体对象") +@Schema(name = "AlarmEventDO", description = "监控告警事件 实体对象") public class AlarmEventDO extends BaseDO { private static final long serialVersionUID = 1L; diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/po/AlarmPolicyAlarmCountPO.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/po/AlarmEventCountPO.java similarity index 90% rename from orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/po/AlarmPolicyAlarmCountPO.java rename to orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/po/AlarmEventCountPO.java index 65658320..25ba477e 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/po/AlarmPolicyAlarmCountPO.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/po/AlarmEventCountPO.java @@ -41,8 +41,8 @@ import java.io.Serializable; @Builder @NoArgsConstructor @AllArgsConstructor -@Schema(name = "AlarmPolicyAlarmCountPO", description = "监控告警事件数量对象") -public class AlarmPolicyAlarmCountPO implements Serializable { +@Schema(name = "AlarmEventCountPO", description = "监控告警事件数量对象") +public class AlarmEventCountPO implements Serializable { private static final long serialVersionUID = 1L; diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventClearRequest.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventClearRequest.java index b3e9ebc0..dcb7811d 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventClearRequest.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventClearRequest.java @@ -32,7 +32,7 @@ import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; /** - * 监控告警记录 清理请求对象 + * 监控告警事件 清理请求对象 * * @author Jiahang Li * @version 1.0.0 @@ -40,7 +40,7 @@ import javax.validation.constraints.NotNull; */ @Data @EqualsAndHashCode(callSuper = true) -@Schema(name = "AlarmEventClearRequest", description = "监控告警记录 清理请求对象") +@Schema(name = "AlarmEventClearRequest", description = "监控告警事件 清理请求对象") public class AlarmEventClearRequest extends AlarmEventQueryRequest implements DataClearRequest { @NotNull diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventHandleRequest.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventHandleRequest.java index 2387b5b2..d0af6772 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventHandleRequest.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventHandleRequest.java @@ -38,7 +38,7 @@ import java.util.Date; import java.util.List; /** - * 监控告警记录 更新请求对象 + * 监控告警事件 更新请求对象 * * @author Jiahang Li * @version 1.0.0 @@ -48,7 +48,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -@Schema(name = "AlarmEventUpdateRequest", description = "监控告警记录 更新请求对象") +@Schema(name = "AlarmEventUpdateRequest", description = "监控告警事件 更新请求对象") public class AlarmEventHandleRequest implements Serializable { private static final long serialVersionUID = 1L; diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventQueryRequest.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventQueryRequest.java index caa8bcf5..5ea96e89 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventQueryRequest.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventQueryRequest.java @@ -31,7 +31,7 @@ import javax.validation.constraints.Size; import java.util.Date; /** - * 监控告警记录 查询请求对象 + * 监控告警事件 查询请求对象 * * @author Jiahang Li * @version 1.0.0 @@ -42,7 +42,7 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -@Schema(name = "AlarmEventQueryRequest", description = "监控告警记录 查询请求对象") +@Schema(name = "AlarmEventQueryRequest", description = "监控告警事件 查询请求对象") public class AlarmEventQueryRequest extends BaseQueryRequest { @Schema(description = "id") diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventSetFalseRequest.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventSetFalseRequest.java index 29e44080..df8bf435 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventSetFalseRequest.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/alarm/AlarmEventSetFalseRequest.java @@ -33,7 +33,7 @@ import java.io.Serializable; import java.util.List; /** - * 监控告警记录 设置误报请求对象 + * 监控告警事件 设置误报请求对象 * * @author Jiahang Li * @version 1.0.0 @@ -43,7 +43,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -@Schema(name = "AlarmEventSetFalseRequest", description = "监控告警记录 设置误报请求对象") +@Schema(name = "AlarmEventSetFalseRequest", description = "监控告警事件 设置误报请求对象") public class AlarmEventSetFalseRequest implements Serializable { private static final long serialVersionUID = 1L; diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/host/MonitorHostChartRequest.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/host/MonitorHostChartRequest.java index 770a492d..d5245149 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/host/MonitorHostChartRequest.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/host/MonitorHostChartRequest.java @@ -59,17 +59,17 @@ public class MonitorHostChartRequest extends BaseQueryRequest { @Schema(description = "时间窗口") private String window; + @Schema(description = "时间区间") + private String range; + + @Schema(description = "时间区间") + private Long start; + + @Schema(description = "时间区间") + private Long end; + @NotBlank @Schema(description = "聚合参数") private String aggregate; - @Schema(description = "聚合参数") - private Long start; - - @Schema(description = "聚合参数") - private Long end; - - @Schema(description = "区间") - private String range; - } diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/host/MonitorHostQueryRequest.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/host/MonitorHostQueryRequest.java index d920e405..ed2d6606 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/host/MonitorHostQueryRequest.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/host/MonitorHostQueryRequest.java @@ -46,7 +46,7 @@ public class MonitorHostQueryRequest extends BaseQueryRequest { @NotEmpty(groups = Key.class) @Schema(description = "agentKey") - private List agentKeyList; + private List agentKeys; @Schema(description = "搜索") private String searchValue; diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/host/MonitorHostQueryTagRequest.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/host/MonitorHostQueryTagRequest.java new file mode 100644 index 00000000..436bb0e0 --- /dev/null +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/request/host/MonitorHostQueryTagRequest.java @@ -0,0 +1,53 @@ +/* + * 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.entity.request.host; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.visor.common.entity.BaseQueryRequest; + +import java.util.List; + +/** + * 监控主机标签 查询请求对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2025-8-14 16:27 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(name = "MonitorHostQueryTagRequest", description = "监控主机标签 查询请求对象") +public class MonitorHostQueryTagRequest extends BaseQueryRequest { + + @Schema(description = "数据集") + private String measurement; + + @Schema(description = "策略id") + private Long policyId; + + @Schema(description = "agentKey") + private List agentKeys; + +} diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/vo/AlarmEventVO.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/vo/AlarmEventVO.java index b496a310..a5316e5b 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/vo/AlarmEventVO.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/entity/vo/AlarmEventVO.java @@ -33,7 +33,7 @@ import java.math.BigDecimal; import java.util.Date; /** - * 监控告警记录 视图响应对象 + * 监控告警事件 视图响应对象 * * @author Jiahang Li * @version 1.0.0 @@ -43,7 +43,7 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor -@Schema(name = "AlarmEventVO", description = "监控告警记录 视图响应对象") +@Schema(name = "AlarmEventVO", description = "监控告警事件 视图响应对象") public class AlarmEventVO implements Serializable { private static final long serialVersionUID = 1L; diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/enums/AlarmHandleStatusEnum.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/enums/AlarmHandleStatusEnum.java index d15e369d..c255c2d2 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/enums/AlarmHandleStatusEnum.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/enums/AlarmHandleStatusEnum.java @@ -23,7 +23,7 @@ package org.dromara.visor.module.monitor.enums; /** - * 告警记录处理状态 + * 告警事件处理状态 * * @author Jiahang Li * @version 1.0.0 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/AlarmEventService.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/AlarmEventService.java index 952ab763..9cbff4d6 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/AlarmEventService.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/AlarmEventService.java @@ -35,7 +35,7 @@ import org.dromara.visor.module.monitor.entity.vo.AlarmEventVO; import java.util.List; /** - * 监控告警记录 服务类 + * 监控告警事件 服务类 * * @author Jiahang Li * @version 1.0.0 @@ -44,14 +44,14 @@ import java.util.List; public interface AlarmEventService { /** - * 创建监控告警记录 + * 创建监控告警事件 * * @param record record */ void createAlarmEvent(AlarmEventDO record); /** - * 处理告警记录 + * 处理告警事件 * * @param request request * @return effect @@ -67,7 +67,7 @@ public interface AlarmEventService { Integer setAlarmEventFalse(AlarmEventSetFalseRequest request); /** - * 分页查询监控告警记录 + * 分页查询监控告警事件 * * @param request request * @return rows @@ -75,7 +75,7 @@ public interface AlarmEventService { DataGrid getAlarmEventPage(AlarmEventQueryRequest request); /** - * 查询监控告警记录数量 + * 查询监控告警事件数量 * * @param request request * @return count @@ -83,7 +83,7 @@ public interface AlarmEventService { Long getAlarmEventCount(AlarmEventQueryRequest request); /** - * 删除监控告警记录 + * 删除监控告警事件 * * @param id id * @return effect @@ -91,7 +91,7 @@ public interface AlarmEventService { Integer deleteAlarmEventById(Long id); /** - * 批量删除监控告警记录 + * 批量删除监控告警事件 * * @param idList idList * @return effect @@ -99,7 +99,7 @@ public interface AlarmEventService { Integer deleteAlarmEventByIdList(List idList); /** - * 清理监控告警记录 + * 清理监控告警事件 * * @param request request * @return effect @@ -107,7 +107,7 @@ public interface AlarmEventService { Integer clearAlarmEvent(AlarmEventClearRequest request); /** - * 获取策略告警记录数量 + * 获取策略告警事件数量 * * @param policyIdList policyIdList * @param startDay startDay 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..61238697 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 @@ -24,10 +24,7 @@ package org.dromara.visor.module.monitor.service; import cn.orionsec.kit.lang.define.wrapper.DataGrid; import org.dromara.visor.common.entity.chart.TimeChartSeries; -import org.dromara.visor.module.monitor.entity.request.host.MonitorHostChartRequest; -import org.dromara.visor.module.monitor.entity.request.host.MonitorHostQueryRequest; -import org.dromara.visor.module.monitor.entity.request.host.MonitorHostSwitchUpdateRequest; -import org.dromara.visor.module.monitor.entity.request.host.MonitorHostUpdateRequest; +import org.dromara.visor.module.monitor.entity.request.host.*; import org.dromara.visor.module.monitor.entity.vo.MonitorHostMetricsDataVO; import org.dromara.visor.module.monitor.entity.vo.MonitorHostVO; @@ -53,10 +50,10 @@ public interface MonitorHostService { /** * 获取监控主机指标数据 * - * @param agentKeyList agentKeyList + * @param agentKeys agentKeys * @return metrics */ - List getMonitorHostMetrics(List agentKeyList); + List getMonitorHostMetrics(List agentKeys); /** * 获取监控主机图表数据 @@ -66,6 +63,14 @@ public interface MonitorHostService { */ List getMonitorHostChart(MonitorHostChartRequest request); + /** + * 查询监控告警标签 + * + * @param request request + * @return tags + */ + List getMonitorHostTags(MonitorHostQueryTagRequest request); + /** * 更新监控主机 * 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/AlarmEventServiceImpl.java b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/AlarmEventServiceImpl.java index 9d91224a..0838c56d 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/AlarmEventServiceImpl.java +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/java/org/dromara/visor/module/monitor/service/impl/AlarmEventServiceImpl.java @@ -43,7 +43,7 @@ import org.dromara.visor.module.monitor.dao.AlarmEventDAO; import org.dromara.visor.module.monitor.define.cache.AlarmEventCacheKeyDefine; import org.dromara.visor.module.monitor.entity.domain.AlarmEventDO; import org.dromara.visor.module.monitor.entity.dto.AlarmPolicyAlarmCountDTO; -import org.dromara.visor.module.monitor.entity.po.AlarmPolicyRuleCountPO; +import org.dromara.visor.module.monitor.entity.po.AlarmEventCountPO; import org.dromara.visor.module.monitor.entity.request.alarm.AlarmEventClearRequest; import org.dromara.visor.module.monitor.entity.request.alarm.AlarmEventHandleRequest; import org.dromara.visor.module.monitor.entity.request.alarm.AlarmEventQueryRequest; @@ -62,7 +62,7 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** - * 监控告警记录 服务实现类 + * 监控告警事件 服务实现类 * * @author Jiahang Li * @version 1.0.0 @@ -198,7 +198,7 @@ public class AlarmEventServiceImpl implements AlarmEventService { if (!queryIdList.isEmpty()) { Map countMap = alarmEventDAO.selectPolicyEventCount(queryIdList, startDate, endDate) .stream() - .collect(Collectors.toMap(AlarmPolicyRuleCountPO::getPolicyId, AlarmPolicyRuleCountPO::getCount)); + .collect(Collectors.toMap(AlarmEventCountPO::getPolicyId, AlarmEventCountPO::getCount)); // 设置缓存 for (Long policyId : queryIdList) { Integer count = Objects1.def(countMap.get(policyId), 0); 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..a3777cac 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 @@ -147,7 +147,7 @@ public class MonitorAgentEndpointServiceImpl implements MonitorAgentEndpointServ } monitorHostDAO.updateById(update); } - // 设置配置缓存 + // 重新加载监控主机上下文 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 f7888f3c..5d343e43 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 @@ -55,10 +55,7 @@ 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; import org.dromara.visor.module.monitor.entity.dto.*; -import org.dromara.visor.module.monitor.entity.request.host.MonitorHostChartRequest; -import org.dromara.visor.module.monitor.entity.request.host.MonitorHostQueryRequest; -import org.dromara.visor.module.monitor.entity.request.host.MonitorHostSwitchUpdateRequest; -import org.dromara.visor.module.monitor.entity.request.host.MonitorHostUpdateRequest; +import org.dromara.visor.module.monitor.entity.request.host.*; import org.dromara.visor.module.monitor.entity.vo.MonitorHostMetricsDataVO; import org.dromara.visor.module.monitor.entity.vo.MonitorHostVO; import org.dromara.visor.module.monitor.enums.AlarmSwitchEnum; @@ -188,8 +185,8 @@ public class MonitorHostServiceImpl implements MonitorHostService { } @Override - public List getMonitorHostMetrics(List agentKeyList) { - return agentKeyList.stream() + public List getMonitorHostMetrics(List agentKeys) { + return agentKeys.stream() .map(s -> this.getHostMetricsData(s, null)) .collect(Collectors.toList()); } @@ -235,6 +232,44 @@ public class MonitorHostServiceImpl implements MonitorHostService { return seriesList; } + @Override + public List getMonitorHostTags(MonitorHostQueryTagRequest request) { + MeasurementEnum measurementEnum = MeasurementEnum.of(request.getMeasurement()); + if (measurementEnum == null) { + return Collections.emptyList(); + } + // 映射数据 + 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 metas = monitorHostDAO.of() + .createValidateWrapper() + .eq(MonitorHostDO::getPolicyId, request.getPolicyId()) + .in(MonitorHostDO::getAgentKey, request.getAgentKeys()) + .then() + .stream() + .map(MonitorHostDO::getMonitorMeta) + .filter(Objects::nonNull) + .map(s -> JSON.parseObject(s, MonitorHostMetaDTO.class)) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + // 获取 tag + return metas.stream() + .map(tagsGetter) + .flatMap(Collection::stream) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + } + @Override @Transactional(rollbackFor = Exception.class) public Integer updateMonitorHostById(MonitorHostUpdateRequest request) { @@ -272,7 +307,7 @@ public class MonitorHostServiceImpl implements MonitorHostService { if (policyId == null) { monitorHostDAO.setPolicyIdWithNullById(id); } - // 更新缓存 + // 重新加载监控主机上下文 monitorContext.reloadMonitorHost(host.getAgentKey()); log.info("MonitorHostService-updateMonitorHostById effect: {}", effect); return effect; @@ -372,6 +407,7 @@ public class MonitorHostServiceImpl implements MonitorHostService { } else { Assert.notNull(request.getStart(), ErrorMessage.PARAM_MISSING); Assert.notNull(request.getEnd(), ErrorMessage.PARAM_MISSING); + query.range(request.getStart(), request.getEnd()); } // 设置名称 Set names = null; diff --git a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/resources/mapper/AlarmEventMapper.xml b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/resources/mapper/AlarmEventMapper.xml index 2fedaf31..27d2f526 100644 --- a/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/resources/mapper/AlarmEventMapper.xml +++ b/orion-visor-modules/orion-visor-module-monitor/orion-visor-module-monitor-service/src/main/resources/mapper/AlarmEventMapper.xml @@ -34,7 +34,7 @@ - + @@ -48,6 +48,7 @@ SELECT policy_id, COUNT(1) total_count FROM monitor_alarm_event WHERE deleted = 0 + AND false_alarm = 0 AND policy_id IN #{item} diff --git a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/pom.xml b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/pom.xml index 83ae569b..f7b7ec1a 100644 --- a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/pom.xml +++ b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/pom.xml @@ -83,6 +83,10 @@ org.dromara.visor orion-visor-spring-boot-starter-job + + org.dromara.visor + orion-visor-spring-boot-starter-executor + org.dromara.visor orion-visor-spring-boot-starter-test diff --git a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/define/TerminalThreadPools.java b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/define/TerminalThreadPools.java index 637c4f60..c515abc9 100644 --- a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/define/TerminalThreadPools.java +++ b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/define/TerminalThreadPools.java @@ -22,12 +22,9 @@ */ package org.dromara.visor.module.terminal.define; -import cn.orionsec.kit.lang.define.thread.ExecutorBuilder; -import org.dromara.visor.common.constant.Const; +import org.dromara.visor.framework.executor.core.utils.ExecutorUtils; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.SynchronousQueue; -import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.Executor; /** * 终端线程池 @@ -39,37 +36,18 @@ import java.util.concurrent.ThreadPoolExecutor; public interface TerminalThreadPools { /** - * terminal 标准输出线程池 + * 终端标准输出线程池 */ - ThreadPoolExecutor TERMINAL_STDOUT = ExecutorBuilder.create() - .namedThreadFactory("terminal-stdout-") - .corePoolSize(1) - .maxPoolSize(Integer.MAX_VALUE) - .keepAliveTime(Const.MS_S_60) - .workQueue(new SynchronousQueue<>()) - .allowCoreThreadTimeout(true) - .build(); + Executor TERMINAL_STDOUT = ExecutorUtils.getExecutor("terminalStdoutExecutor"); /** - * terminal 操作线程池 + * 终端操作线程池 */ - ThreadPoolExecutor TERMINAL_OPERATOR = ExecutorBuilder.create() - .namedThreadFactory("terminal-operator-") - .corePoolSize(1) - .maxPoolSize(Integer.MAX_VALUE) - .keepAliveTime(Const.MS_S_60) - .workQueue(new SynchronousQueue<>()) - .allowCoreThreadTimeout(true) - .build(); + Executor TERMINAL_OPERATOR = ExecutorUtils.getExecutor("terminalOperatorExecutor"); /** * 终端异步保存线程池 */ - ThreadPoolExecutor TERMINAL_ASYNC_SAVER = ExecutorBuilder.create() - .namedThreadFactory("terminal-async-saver-") - .corePoolSize(1) - .maxPoolSize(1) - .workQueue(new LinkedBlockingQueue<>()) - .build(); + Executor TERMINAL_ASYNC_SAVER = ExecutorUtils.getExecutor("terminalAsyncSaverExecutor"); } diff --git a/orion-visor-ui/.env.development b/orion-visor-ui/.env.development index 7a1847d7..a248469d 100644 --- a/orion-visor-ui/.env.development +++ b/orion-visor-ui/.env.development @@ -3,4 +3,4 @@ VITE_API_BASE_URL=http://127.0.0.1:9200/orion-visor/api # websocket 路径 VITE_WS_BASE_URL=ws://127.0.0.1:9200/orion-visor/keep-alive # 版本号 -VITE_APP_VERSION=2.5.2 +VITE_APP_VERSION=2.5.3 diff --git a/orion-visor-ui/.env.production b/orion-visor-ui/.env.production index c9f595ba..cc283bbf 100644 --- a/orion-visor-ui/.env.production +++ b/orion-visor-ui/.env.production @@ -3,4 +3,4 @@ VITE_API_BASE_URL=/orion-visor/api # websocket 路径 VITE_WS_BASE_URL=/orion-visor/keep-alive # 版本号 -VITE_APP_VERSION=2.5.2 +VITE_APP_VERSION=2.5.3 diff --git a/orion-visor-ui/index.html b/orion-visor-ui/index.html index 4bc7383a..0fe31420 100644 --- a/orion-visor-ui/index.html +++ b/orion-visor-ui/index.html @@ -2,7 +2,7 @@ - + Orion Visor diff --git a/orion-visor-ui/package.json b/orion-visor-ui/package.json index 58d6f417..4cb88c4c 100644 --- a/orion-visor-ui/package.json +++ b/orion-visor-ui/package.json @@ -1,7 +1,7 @@ { "name": "orion-visor-ui", "description": "Orion Visor UI", - "version": "2.5.2", + "version": "2.5.3", "private": true, "author": "Jiahang Li", "license": "Apache 2.0", diff --git a/orion-visor-ui/src/api/monitor/alarm-event.ts b/orion-visor-ui/src/api/monitor/alarm-event.ts index 28eff525..9c3f8d65 100644 --- a/orion-visor-ui/src/api/monitor/alarm-event.ts +++ b/orion-visor-ui/src/api/monitor/alarm-event.ts @@ -4,7 +4,7 @@ import axios from 'axios'; import qs from 'query-string'; /** - * 告警记录处理请求 + * 告警事件处理请求 */ export interface AlarmEventHandleRequest { idList?: Array; @@ -14,14 +14,14 @@ export interface AlarmEventHandleRequest { } /** - * 告警记录误报请求 + * 告警事件误报请求 */ export interface AlarmEventFalseAlarmRequest { idList?: Array; } /** - * 告警记录查询请求 + * 告警事件查询请求 */ export interface AlarmEventQueryRequest extends Pagination, OrderDirection { id?: number; @@ -39,13 +39,13 @@ export interface AlarmEventQueryRequest extends Pagination, OrderDirection { } /** - * 告警记录清理请求 + * 告警事件清理请求 */ export interface AlarmEventClearRequest extends AlarmEventQueryRequest, ClearRequest { } /** - * 告警记录查询响应 + * 告警事件查询响应 */ export interface AlarmEventQueryResponse extends TableData { id: number; @@ -75,7 +75,7 @@ export interface AlarmEventQueryResponse extends TableData { } /** - * 处理告警记录 + * 处理告警事件 */ export function handleAlarmEvent(request: AlarmEventHandleRequest) { return axios.post('/monitor/alarm-event/handle', request); @@ -89,28 +89,28 @@ export function setAlarmEventFalse(request: AlarmEventFalseAlarmRequest) { } /** - * 分页查询告警记录 + * 分页查询告警事件 */ export function getAlarmEventPage(request: AlarmEventQueryRequest) { return axios.post>('/monitor/alarm-event/query', request); } /** - * 查询告警记录数量 + * 查询告警事件数量 */ export function getAlarmEventCount(request: AlarmEventQueryRequest) { return axios.post('/monitor/alarm-event/count', request); } /** - * 删除告警记录 + * 删除告警事件 */ export function deleteAlarmEvent(id: number) { return axios.delete('/monitor/alarm-event/delete', { params: { id } }); } /** - * 批量删除告警记录 + * 批量删除告警事件 */ export function batchDeleteAlarmEvent(idList: Array) { return axios.delete('/monitor/alarm-event/batch-delete', { @@ -122,7 +122,7 @@ export function batchDeleteAlarmEvent(idList: Array) { } /** - * 清理告警记录 + * 清理告警事件 */ export function clearMonitorAlarmEvent(request: AlarmEventClearRequest) { return axios.post('/monitor/alarm-event/clear', request); 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..3b84677e 100644 --- a/orion-visor-ui/src/api/monitor/monitor-host.ts +++ b/orion-visor-ui/src/api/monitor/monitor-host.ts @@ -28,7 +28,7 @@ export interface MonitorHostSwitchUpdateRequest { * 监控主机查询请求 */ export interface MonitorHostQueryRequest extends Pagination { - agentKeyList?: Array; + agentKeys?: Array; searchValue?: string; alarmSwitch?: number; policyId?: number; @@ -43,6 +43,15 @@ export interface MonitorHostQueryRequest extends Pagination { tags?: Array; } +/** + * 监控主机标签查询请求 + */ +export interface MonitorHostQueryTagRequest { + measurement?: string; + policyId?: number; + agentKeys?: Array; +} + /** * 监控主机图表查询请求 */ @@ -147,12 +156,12 @@ export interface MonitorHostMetricsData { /** * 查询监控主机指标 */ -export function getMonitorHostMetrics(agentKeyList: Array) { +export function getMonitorHostMetrics(agentKeys: Array) { return axios.post>('/monitor/monitor-host/metrics', { - agentKeyList + agentKeys }, { promptBizErrorMessage: false, - promptRequestErrorMessage: false, + promptRequestErrorMessage: false }); } @@ -167,7 +176,9 @@ export function getMonitorHostOverride(agentKey: string) { * 查询监控主机图表 */ export function getMonitorHostChart(request: MonitorHostChartRequest) { - return axios.post>('/monitor/monitor-host/chart', request); + return axios.post>('/monitor/monitor-host/chart', request, { + timeout: 180000, + }); } /** @@ -177,6 +188,13 @@ export function getMonitorHostPage(request: MonitorHostQueryRequest) { return axios.post>('/monitor/monitor-host/query', request); } +/** + * 查询监控主机标签 + */ +export function getMonitorHostTags(request: MonitorHostQueryTagRequest) { + return axios.post>('/monitor/monitor-host/host-tags', request); +} + /** * 更新监控主机 */ diff --git a/orion-visor-ui/src/assets/style/arco-extends.less b/orion-visor-ui/src/assets/style/arco-extends.less index aeab168a..36723ab8 100644 --- a/orion-visor-ui/src/assets/style/arco-extends.less +++ b/orion-visor-ui/src/assets/style/arco-extends.less @@ -95,7 +95,7 @@ // 标准卡片 .general-card { - border-radius: 4px; + border-radius: 8px; border: none; & > .arco-card-header { diff --git a/orion-visor-ui/src/assets/style/global.less b/orion-visor-ui/src/assets/style/global.less index 3d82980c..f0156776 100644 --- a/orion-visor-ui/src/assets/style/global.less +++ b/orion-visor-ui/src/assets/style/global.less @@ -14,58 +14,6 @@ body { -webkit-font-smoothing: antialiased; } -// -- echarts -.echarts-tooltip-diy { - background: linear-gradient(304.17deg, - rgba(253, 254, 255, 0.6) -6.04%, - rgba(244, 247, 252, 0.6) 85.2%) !important; - border: none !important; - backdrop-filter: blur(10px) !important; - /* Note: backdrop-filter has minimal browser support */ - - border-radius: 6px !important; - - .content-panel { - display: flex; - justify-content: space-between; - padding: 0 9px; - background: rgba(255, 255, 255, 0.8); - width: 164px; - height: 32px; - line-height: 32px; - box-shadow: 6px 0 20px rgba(34, 87, 188, 0.1); - border-radius: 4px; - margin-bottom: 4px; - } - - .tooltip-title { - margin: 0 0 10px 0; - } - - p { - margin: 0; - } - - .tooltip-title, - .tooltip-value { - font-size: 13px; - line-height: 15px; - display: flex; - align-items: center; - text-align: right; - color: #1D2129; - font-weight: bold; - } - - .tooltip-item-icon { - display: inline-block; - margin-right: 8px; - width: 10px; - height: 10px; - border-radius: 50%; - } -} - // flex .flex-center { display: flex; diff --git a/orion-visor-ui/src/assets/style/layout.less b/orion-visor-ui/src/assets/style/layout.less index 68f23ab8..3b695b13 100644 --- a/orion-visor-ui/src/assets/style/layout.less +++ b/orion-visor-ui/src/assets/style/layout.less @@ -162,8 +162,8 @@ height: 100%; display: flex; flex-direction: column; - border-radius: 4px; - border: 1px solid var(--color-neutral-3); + border-radius: 8px; + //border: 1px solid var(--color-neutral-3); transition-property: all; & > .arco-card-header { @@ -230,7 +230,7 @@ // -- card .simple-card { background: var(--color-bg-2); - border-radius: 4px; + border-radius: 8px; } // -- doption diff --git a/orion-visor-ui/src/components/exec/log/panel/exec-host.vue b/orion-visor-ui/src/components/exec/log/panel/exec-host.vue index 48877527..1dcab835 100644 --- a/orion-visor-ui/src/components/exec/log/panel/exec-host.vue +++ b/orion-visor-ui/src/components/exec/log/panel/exec-host.vue @@ -27,7 +27,19 @@
- + + + + {{ item.exitCode }} + + + {{ getDictValue(execHostStatusKey, item.status) }}
@@ -141,8 +153,16 @@ &-status { display: flex; justify-content: flex-end; - } + gap: 8px; + :deep(.exit-code-tag .arco-tag-icon) { + color: #FFFFFF; + } + + .exit-code-value { + font-weight: 600; + } + } } diff --git a/orion-visor-ui/src/components/exec/log/panel/log-item.vue b/orion-visor-ui/src/components/exec/log/panel/log-item.vue index d6b29d8d..2d8fa5b4 100644 --- a/orion-visor-ui/src/components/exec/log/panel/log-item.vue +++ b/orion-visor-ui/src/components/exec/log/panel/log-item.vue @@ -15,7 +15,7 @@ + title="exitCode">