diff --git a/jeecg-boot-base-core/pom.xml b/jeecg-boot-base-core/pom.xml
index 95c6bef..6ed39fc 100644
--- a/jeecg-boot-base-core/pom.xml
+++ b/jeecg-boot-base-core/pom.xml
@@ -333,17 +333,6 @@
edu.ucar
netcdfAll
${netcdfAll.version}
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/PrometheusServerProperties.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/PrometheusServerProperties.java
new file mode 100644
index 0000000..eeef974
--- /dev/null
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/PrometheusServerProperties.java
@@ -0,0 +1,21 @@
+package org.jeecg.common.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "prometheus")
+public class PrometheusServerProperties {
+
+ /**
+ * prometheus 服务地址
+ */
+ private String serverUrl;
+
+ /**
+ * node-exporter实例地址
+ */
+ private String instance;
+}
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/config/security/JeecgPermissionService.java b/jeecg-boot-base-core/src/main/java/org/jeecg/config/security/JeecgPermissionService.java
index f338525..095b479 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/config/security/JeecgPermissionService.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/config/security/JeecgPermissionService.java
@@ -45,14 +45,19 @@ public class JeecgPermissionService {
return false;
}
LoginUser loginUser = SecureUtil.currentUser();
-// if(loginUser.getUsername().equals("admin")) {
-// return true;
-// }
+ if(loginUser.getUsername().startsWith("admin")) {
+ return true;
+ }
Object cache = redisUtil.get(buildKey("permission", loginUser.getId()));
- List permissionList;
- if (Objects.nonNull(cache)) {
- permissionList = (List) cache;
- } else {
+ List permissionList = List.of();
+ boolean flag = false;
+ if (Objects.nonNull(cache) && cache instanceof List) {
+ if(!((List>) cache).isEmpty()){
+ flag = true;
+ permissionList = (List) cache;
+ }
+ }
+ if(!flag){
permissionList = commonAPI.queryUserAuths(loginUser.getId());
redisUtil.set(buildKey("permission", loginUser.getId()), permissionList);
}
diff --git a/jeecg-module-system/jeecg-system-biz/pom.xml b/jeecg-module-system/jeecg-system-biz/pom.xml
index cbc09c5..7c89f00 100644
--- a/jeecg-module-system/jeecg-system-biz/pom.xml
+++ b/jeecg-module-system/jeecg-system-biz/pom.xml
@@ -24,6 +24,10 @@
org.jeecgframework.boot3
hibernate-re
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/undertow/CustomUndertowMetricsHandler.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/CustomUndertowMetricsHandler.java
similarity index 93%
rename from jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/undertow/CustomUndertowMetricsHandler.java
rename to jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/CustomUndertowMetricsHandler.java
index f80e20a..de37d67 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/undertow/CustomUndertowMetricsHandler.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/CustomUndertowMetricsHandler.java
@@ -1,4 +1,4 @@
-package org.jeecg.modules.monitor.actuator.undertow;
+package org.jeecg.config.init;
import io.micrometer.core.instrument.MeterRegistry;
import io.undertow.server.HttpHandler;
@@ -9,12 +9,6 @@ import org.springframework.stereotype.Component;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.LongAdder;
-/**
- * 自定义undertow监控指标工具类
- * for [QQYUN-11902]tomcat 替换undertow 这里的功能还没修改
- * @author chenrui
- * @date 2025/4/8 19:06
- */
@Component("jeecgCustomUndertowMetricsHandler")
public class CustomUndertowMetricsHandler {
@@ -87,4 +81,4 @@ public class CustomUndertowMetricsHandler {
next.handleRequest(exchange);
};
}
-}
\ No newline at end of file
+}
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/UndertowConfiguration.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/UndertowConfiguration.java
index 3fd059a..d0b1a81 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/UndertowConfiguration.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/UndertowConfiguration.java
@@ -3,7 +3,6 @@ package org.jeecg.config.init;
import io.undertow.server.DefaultByteBufferPool;
import io.undertow.server.handlers.BlockingHandler;
import io.undertow.websockets.jsr.WebSocketDeploymentInfo;
-import org.jeecg.modules.monitor.actuator.undertow.CustomUndertowMetricsHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/CustomActuatorConfig.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/CustomActuatorConfig.java
deleted file mode 100644
index a7c85b0..0000000
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/CustomActuatorConfig.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.jeecg.modules.monitor.actuator;
-
-import org.jeecg.modules.monitor.actuator.httptrace.CustomInMemoryHttpTraceRepository;
-import org.springframework.boot.actuate.autoconfigure.web.exchanges.HttpExchangesAutoConfiguration;
-import org.springframework.boot.actuate.autoconfigure.web.exchanges.HttpExchangesProperties;
-import org.springframework.boot.actuate.web.exchanges.HttpExchangeRepository;
-import org.springframework.boot.autoconfigure.AutoConfigureBefore;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * 自定义健康监控配置类
- *
- * @Author: chenrui
- * @Date: 2024/5/13 17:20
- */
-@Configuration
-@EnableConfigurationProperties(HttpExchangesProperties.class)
-@AutoConfigureBefore(HttpExchangesAutoConfiguration.class)
-public class CustomActuatorConfig {
-
- /**
- * 请求追踪
- * @return
- * @author chenrui
- * @date 2024/5/14 14:52
- */
- @Bean
- @ConditionalOnProperty(prefix = "management.trace.http", name = "enabled", matchIfMissing = true)
- @ConditionalOnMissingBean(HttpExchangeRepository.class)
- public CustomInMemoryHttpTraceRepository traceRepository() {
- return new CustomInMemoryHttpTraceRepository();
- }
-
-}
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomHttpTraceEndpoint.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomHttpTraceEndpoint.java
deleted file mode 100644
index 71aebfc..0000000
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomHttpTraceEndpoint.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.jeecg.modules.monitor.actuator.httptrace;
-
-import lombok.Getter;
-import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
-import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
-import org.springframework.boot.actuate.endpoint.annotation.Selector;
-import org.springframework.boot.actuate.web.exchanges.HttpExchange;
-import org.springframework.stereotype.Component;
-import org.springframework.util.Assert;
-
-import java.util.List;
-
-import static org.springframework.boot.actuate.endpoint.annotation.Selector.Match.ALL_REMAINING;
-
-/**
- * @Description: ENDPOINT: 请求追踪(新),支持通过responseCode筛选
- * @Author: chenrui
- * @Date: 2024/5/13 17:02
- */
-@Component
-@Endpoint(id = "jeecghttptrace")
-public class CustomHttpTraceEndpoint{
- private final CustomInMemoryHttpTraceRepository repository;
-
- public CustomHttpTraceEndpoint(CustomInMemoryHttpTraceRepository repository) {
- Assert.notNull(repository, "Repository must not be null");
- this.repository = repository;
- }
-
- @ReadOperation
- public HttpTraceDescriptor traces(@Selector(match = ALL_REMAINING) String query) {
- return new HttpTraceDescriptor(this.repository.findAll(query));
- }
-
- @Getter
- public static final class HttpTraceDescriptor {
- private final List traces;
-
- private HttpTraceDescriptor(List traces) {
- this.traces = traces;
- }
-
- }
-}
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomInMemoryHttpTraceRepository.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomInMemoryHttpTraceRepository.java
deleted file mode 100644
index 2c52cb5..0000000
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomInMemoryHttpTraceRepository.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.jeecg.modules.monitor.actuator.httptrace;
-
-import org.springframework.boot.actuate.web.exchanges.HttpExchange;
-import org.springframework.boot.actuate.web.exchanges.InMemoryHttpExchangeRepository;
-
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-/**
- * @Description: 自定义内存请求追踪存储
- * @Author: chenrui
- * @Date: 2024/5/13 17:02
- */
-public class CustomInMemoryHttpTraceRepository extends InMemoryHttpExchangeRepository {
-
- @Override
- public List findAll() {
- return super.findAll();
- }
-
- public List findAll(String query) {
- List allTrace = super.findAll();
- if (null != allTrace && !allTrace.isEmpty()) {
- Stream stream = allTrace.stream();
- String[] params = query.split(",");
- stream = filter(params, stream);
- stream = sort(params, stream);
- allTrace = stream.collect(Collectors.toList());
- }
- return allTrace;
- }
-
- private Stream sort(String[] params, Stream stream) {
- if (params.length < 2) {
- return stream;
- }
- String sortBy = params[1];
- String order;
- if (params.length > 2) {
- order = params[2];
- } else {
- order = "desc";
- }
- return stream.sorted((o1, o2) -> {
- int i = 0;
- if("timeTaken".equalsIgnoreCase(sortBy)) {
- i = o1.getTimeTaken().compareTo(o2.getTimeTaken());
- }else if("timestamp".equalsIgnoreCase(sortBy)){
- i = o1.getTimestamp().compareTo(o2.getTimestamp());
- }
- if("desc".equalsIgnoreCase(order)){
- i *=-1;
- }
- return i;
- });
- }
-
- private static Stream filter(String[] params, Stream stream) {
- if (params.length == 0) {
- return stream;
- }
- String statusQuery = params[0];
- if (null != statusQuery && !statusQuery.isEmpty()) {
- statusQuery = statusQuery.toLowerCase().trim();
- switch (statusQuery) {
- case "error":
- stream = stream.filter(httpTrace -> {
- int status = httpTrace.getResponse().getStatus();
- return status >= 404 && status < 501;
- });
- break;
- case "warn":
- stream = stream.filter(httpTrace -> {
- int status = httpTrace.getResponse().getStatus();
- return status >= 201 && status < 404;
- });
- break;
- case "success":
- stream = stream.filter(httpTrace -> {
- int status = httpTrace.getResponse().getStatus();
- return status == 200;
- });
- break;
- case "all":
- default:
- break;
- }
- return stream;
- }
- return stream;
- }
-
-}
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorMemoryController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorMemoryController.java
deleted file mode 100644
index 69559fe..0000000
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorMemoryController.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.jeecg.modules.monitor.controller;
-
-import cn.hutool.core.util.NumberUtil;
-import com.alibaba.fastjson.JSONObject;
-import lombok.extern.slf4j.Slf4j;
-import org.jeecg.common.api.vo.Result;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.lang.management.ManagementFactory;
-import java.lang.management.OperatingSystemMXBean;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @Description: 内存健康检查
- * @author: chenrui
- */
-@Slf4j
-@RestController
-@RequestMapping("/sys/actuator/memory")
-public class ActuatorMemoryController {
-
-
- /**
- * 内存详情
- * @return
- */
- @GetMapping("/info")
- public Result> getRedisInfo() {
- Runtime runtime = Runtime.getRuntime();
- Map result = new HashMap<>();
- result.put("memory.runtime.total", runtime.totalMemory());
- result.put("memory.runtime.used", runtime.freeMemory());
- result.put("memory.runtime.max", runtime.totalMemory() - runtime.freeMemory());
- result.put("memory.runtime.free", runtime.maxMemory() - runtime.totalMemory() + runtime.freeMemory());
- result.put("memory.runtime.usage", NumberUtil.div(runtime.totalMemory() - runtime.freeMemory(), runtime.totalMemory()));
- //update-begin---author:chenrui ---date:20240705 for:[TV360X-1695]内存信息-立即更新 功能报错 #6635------------
- OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
- if (operatingSystemMXBean instanceof com.sun.management.OperatingSystemMXBean) {
- com.sun.management.OperatingSystemMXBean opBean = (com.sun.management.OperatingSystemMXBean) operatingSystemMXBean;
-// JSONObject operatingSystemJson = JSONObject.parseObject(JSONObject.toJSONString(operatingSystemMXBean));
- long totalPhysicalMemory = opBean.getTotalPhysicalMemorySize();
- long freePhysicalMemory = opBean.getFreePhysicalMemorySize();
- long usedPhysicalMemory = totalPhysicalMemory - freePhysicalMemory;
- result.put("memory.physical.total", totalPhysicalMemory);
- result.put("memory.physical.used", freePhysicalMemory);
- result.put("memory.physical.free", usedPhysicalMemory);
- result.put("memory.physical.usage", NumberUtil.div(usedPhysicalMemory, totalPhysicalMemory));
- }
- //update-end---author:chenrui ---date:20240705 for:[TV360X-1695]内存信息-立即更新 功能报错 #6635------------
- return Result.ok(result);
- }
-
-}
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java
deleted file mode 100644
index 89d90dc..0000000
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.jeecg.modules.monitor.controller;
-
-import com.alibaba.fastjson.JSONArray;
-import lombok.extern.slf4j.Slf4j;
-import org.jeecg.common.api.vo.Result;
-import org.jeecg.modules.monitor.domain.RedisInfo;
-import org.jeecg.modules.monitor.service.RedisService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import javax.swing.filechooser.FileSystemView;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @Description: ActuatorRedisController
- * @author: jeecg-boot
- */
-@Slf4j
-@RestController
-@RequestMapping("/sys/actuator/redis")
-public class ActuatorRedisController {
-
- @Autowired
- private RedisService redisService;
-
- /**
- * Redis详细信息
- * @return
- * @throws Exception
- */
- @GetMapping("/info")
- public Result> getRedisInfo() throws Exception {
- List infoList = this.redisService.getRedisInfo();
- //log.info(infoList.toString());
- return Result.ok(infoList);
- }
-
- //update-begin---author:chenrui ---date:20240514 for:[QQYUN-9247]系统监控功能优化------------
- /**
- * Redis历史性能指标查询(过去一小时)
- * @return
- * @throws Exception
- * @author chenrui
- * @date 2024/5/14 14:56
- */
- @GetMapping(value = "/metrics/history")
- public Result> getMetricsHistory() throws Exception {
- Map>> metricsHistory = this.redisService.getMetricsHistory();
- return Result.OK(metricsHistory);
- }
- //update-end---author:chenrui ---date:20240514 for:[QQYUN-9247]系统监控功能优化------------
-
- @GetMapping("/keysSize")
- public Map getKeysSize() throws Exception {
- return redisService.getKeysSize();
- }
-
- /**
- * 获取redis key数量 for 报表
- * @return
- * @throws Exception
- */
- @GetMapping("/keysSizeForReport")
- public Map getKeysSizeReport() throws Exception {
- return redisService.getMapForReport("1");
- }
- /**
- * 获取redis 内存 for 报表
- *
- * @return
- * @throws Exception
- */
- @GetMapping("/memoryForReport")
- public Map memoryForReport() throws Exception {
- return redisService.getMapForReport("2");
- }
- /**
- * 获取redis 全部信息 for 报表
- * @return
- * @throws Exception
- */
- @GetMapping("/infoForReport")
- public Map infoForReport() throws Exception {
- return redisService.getMapForReport("3");
- }
-
- @GetMapping("/memoryInfo")
- public Map getMemoryInfo() throws Exception {
- return redisService.getMemoryInfo();
- }
-
- //update-begin--Author:zhangweijian Date:20190425 for:获取磁盘信息
- /**
- * @功能:获取磁盘信息
- * @param request
- * @param response
- * @return
- */
- @GetMapping("/queryDiskInfo")
- public Result>> queryDiskInfo(HttpServletRequest request, HttpServletResponse response){
- Result>> res = new Result<>();
- try {
- // 当前文件系统类
- FileSystemView fsv = FileSystemView.getFileSystemView();
- // 列出所有windows 磁盘
- File[] fs = File.listRoots();
- log.info("查询磁盘信息:"+fs.length+"个");
- List