Jelajahi Sumber

feat: 服务器数据监控

wanggaokun 2 minggu lalu
induk
melakukan
1fd9daf4a6
17 mengubah file dengan 547 tambahan dan 11 penghapusan
  1. 2 1
      config/local/security.yml
  2. 8 0
      eco-bom/pom.xml
  3. 17 0
      eco-common/com-core/src/main/java/org/eco/vip/core/utils/NetUtils.java
  4. 17 0
      eco-common/com-core/src/main/java/org/eco/vip/core/utils/NumberUtils.java
  5. 17 0
      eco-common/com-core/src/main/java/org/eco/vip/core/utils/OshiUtils.java
  6. 2 0
      eco-common/com-core/src/main/java/org/eco/vip/core/utils/StrUtils.java
  7. 5 0
      eco-nexus-core/nexus-core-api/pom.xml
  8. 36 0
      eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/controller/monitor/MonitorController.java
  9. 44 0
      eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/monitor/MonitorServerVO.java
  10. 62 0
      eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/monitor/pojo/MonitorCpu.java
  11. 67 0
      eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/monitor/pojo/MonitorJvm.java
  12. 38 0
      eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/monitor/pojo/MonitorMemory.java
  13. 37 0
      eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/monitor/pojo/MonitorServer.java
  14. 37 0
      eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/monitor/pojo/MonitorStorage.java
  15. 2 10
      eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/service/files/FilesService.java
  16. 19 0
      eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/service/monitor/IMonitorService.java
  17. 137 0
      eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/service/monitor/MonitorService.java

+ 2 - 1
config/local/security.yml

@@ -15,4 +15,5 @@ security:
     - /actuator/**
     # 其它链接
     - /auth/login
-    - /system/files/download/*
+    - /system/files/download/*
+    - /system/monitor/server

+ 8 - 0
eco-bom/pom.xml

@@ -34,6 +34,7 @@
         <caffeine.version>3.2.1</caffeine.version>
         <excel.version>1.2.0</excel.version>
         <poi.version>5.4.1</poi.version>
+        <oshi.version>6.8.2</oshi.version>
     </properties>
 
     <!-- 全局的依赖配置-->
@@ -173,6 +174,13 @@
                 <version>${poi.version}</version>
             </dependency>
 
+            <!-- https://mvnrepository.com/artifact/com.github.oshi/oshi-core -->
+            <dependency>
+                <groupId>com.github.oshi</groupId>
+                <artifactId>oshi-core</artifactId>
+                <version>${oshi.version}</version>
+            </dependency>
+
         </dependencies>
     </dependencyManagement>
 

+ 17 - 0
eco-common/com-core/src/main/java/org/eco/vip/core/utils/NetUtils.java

@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.core.utils;
+
+
+import cn.hutool.core.net.NetUtil;
+
+/**
+ * @description NetUtils
+ *
+ * @author GaoKunW
+ * @date 2025/7/25 22:28
+ */
+public class NetUtils extends NetUtil {
+}

+ 17 - 0
eco-common/com-core/src/main/java/org/eco/vip/core/utils/NumberUtils.java

@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.core.utils;
+
+
+import cn.hutool.core.util.NumberUtil;
+
+/**
+ * @description NumberUtils
+ *
+ * @author GaoKunW
+ * @date 2025/7/25 17:22
+ */
+public class NumberUtils extends NumberUtil {
+}

+ 17 - 0
eco-common/com-core/src/main/java/org/eco/vip/core/utils/OshiUtils.java

@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.core.utils;
+
+
+import cn.hutool.system.oshi.OshiUtil;
+
+/**
+ * @description OshiUtils
+ *
+ * @author GaoKunW
+ * @date 2025/7/25 16:34
+ */
+public class OshiUtils extends OshiUtil {
+}

+ 2 - 0
eco-common/com-core/src/main/java/org/eco/vip/core/utils/StrUtils.java

@@ -16,4 +16,6 @@ import lombok.extern.slf4j.Slf4j;
  */
 @Slf4j
 public class StrUtils extends StrUtil {
+
+    public final static String PERCENT_SIGN = "%";
 }

+ 5 - 0
eco-nexus-core/nexus-core-api/pom.xml

@@ -31,6 +31,11 @@
             <groupId>org.eco.vip</groupId>
             <artifactId>com-excel</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.github.oshi</groupId>
+            <artifactId>oshi-core</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 36 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/controller/monitor/MonitorController.java

@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.controller.monitor;
+
+
+import jakarta.annotation.Resource;
+import org.eco.vip.core.pojo.CommonResult;
+import org.eco.vip.nexus.core.domain.monitor.MonitorServerVO;
+import org.eco.vip.nexus.core.service.monitor.IMonitorService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @description MonitorController
+ *
+ * @author GaoKunW
+ * @date 2025/7/25 14:31
+ */
+@RestController
+@RequestMapping("/system/monitor")
+@Validated
+public class MonitorController {
+
+    @Resource
+    private IMonitorService monitorService;
+
+
+    @GetMapping("/server")
+    public CommonResult<MonitorServerVO> server() {
+        return CommonResult.success(monitorService.server());
+    }
+}

+ 44 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/monitor/MonitorServerVO.java

@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.domain.monitor;
+
+
+import lombok.Data;
+import org.eco.vip.nexus.core.domain.monitor.pojo.*;
+
+/**
+ * @description MonitorServerVO
+ *
+ * @author GaoKunW
+ * @date 2025/7/25 14:38
+ */
+@Data
+public class MonitorServerVO {
+
+    /**
+     * 服务器
+     */
+    private MonitorServer monitorServer;
+
+    /**
+     * 内存
+     */
+    private MonitorMemory monitorMemory;
+
+    /**
+     * CPU
+     */
+    private MonitorCpu monitorCpu;
+
+    /**
+     * JVM
+     */
+    private MonitorJvm monitorJvm;
+
+    /**
+     * 存储
+     */
+    private MonitorStorage monitorStorage;
+}

+ 62 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/monitor/pojo/MonitorCpu.java

@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.domain.monitor.pojo;
+
+
+import lombok.Data;
+
+/**
+ * @description MonitorCpu
+ *
+ * @author GaoKunW
+ * @date 2025/7/25 14:38
+ */
+@Data
+public class MonitorCpu {
+    /**
+     * CPU名称
+     */
+    private String cpuName;
+
+    /**
+     * CPU数量
+     */
+    private Integer cpuNum;
+
+    /**
+     * CPU物理核心数
+     */
+    private Integer cpuPhysicalCoreNum;
+
+    /**
+     * CPU逻辑核心数
+     */
+    private Integer cpuLogicalCoreNum;
+
+    /**
+     * CPU系统使用率
+     */
+    private String cpuSysUseRate;
+
+    /**
+     * CPU用户使用率
+     */
+    private String cpuUserUseRate;
+
+    /**
+     * CPU当前总使用率
+     */
+    private Double cpuTotalUseRate;
+
+    /**
+     * CPU当前等待率
+     */
+    private String cpuWaitRate;
+
+    /**
+     * CPU当前空闲率
+     */
+    private String cpuFreeRate;
+}

+ 67 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/monitor/pojo/MonitorJvm.java

@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.domain.monitor.pojo;
+
+
+import lombok.Data;
+
+/**
+ * @description MonitorJvm
+ *
+ * @author GaoKunW
+ * @date 2025/7/25 14:53
+ */
+@Data
+public class MonitorJvm {
+    /**
+     * JVM名称
+     */
+    private String jvmName;
+
+    /**
+     * JVM版本
+     */
+    private String jvmVersion;
+
+    /**
+     * JVM总分配内存
+     */
+    private String jvmMemoryTotal;
+
+    /**
+     * JVM已用内存
+     */
+    private String jvmMemoryUsed;
+
+    /**
+     * JVM剩余内存
+     */
+    private String jvmMemoryFree;
+
+    /**
+     * JVM内存使用率
+     */
+    private Double jvmUseRate;
+
+    /**
+     * JVM启动时间
+     */
+    private String jvmStartTime;
+
+    /**
+     * JVM运行时长
+     */
+    private String jvmRunTime;
+
+    /**
+     * Java版本
+     */
+    private String javaVersion;
+
+    /**
+     * Java安装路径
+     */
+    private String javaPath;
+}

+ 38 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/monitor/pojo/MonitorMemory.java

@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.domain.monitor.pojo;
+
+
+import lombok.Data;
+
+/**
+ * @description MonitorMemory
+ *
+ * @author GaoKunW
+ * @date 2025/7/25 14:38
+ */
+@Data
+public class MonitorMemory {
+
+    /**
+     * 内存总量
+     */
+    private String memoryTotal;
+
+    /**
+     * 内存已用
+     */
+    private String memoryUsed;
+
+    /**
+     * 内存剩余
+     */
+    private String memoryFree;
+
+    /**
+     * 内存使用率
+     */
+    private String memoryUseRate;
+}

+ 37 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/monitor/pojo/MonitorServer.java

@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.domain.monitor.pojo;
+
+
+import lombok.Data;
+
+/**
+ * @description MonitorServer
+ *
+ * @author GaoKunW
+ * @date 2025/7/25 14:39
+ */
+@Data
+public class MonitorServer {
+    /**
+     * 服务器名称
+     */
+    private String serverName;
+
+    /**
+     * 服务器操作系统
+     */
+    private String serverOs;
+
+    /**
+     * 服务器IP
+     */
+    private String serverIp;
+
+    /**
+     * 服务器架构
+     */
+    private String serverArchitecture;
+}

+ 37 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/monitor/pojo/MonitorStorage.java

@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.domain.monitor.pojo;
+
+
+import lombok.Data;
+
+/**
+ * @description MonitorStorage
+ *
+ * @author GaoKunW
+ * @date 2025/7/25 14:38
+ */
+@Data
+public class MonitorStorage {
+    /**
+     * 存储总量
+     */
+    private String storageTotal;
+
+    /**
+     * 存储已用
+     */
+    private String storageUsed;
+
+    /**
+     * 存储剩余
+     */
+    private String storageFree;
+
+    /**
+     * 存储使用率
+     */
+    private Double storageUseRate;
+}

+ 2 - 10
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/service/files/FilesService.java

@@ -16,14 +16,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.eco.vip.core.constant.Constants;
 import org.eco.vip.core.exception.BusinessException;
 import org.eco.vip.core.pojo.PageResult;
-import org.eco.vip.core.utils.BeanUtils;
-import org.eco.vip.core.utils.FileDownloadUtils;
-import org.eco.vip.core.utils.FileLocalUtils;
-import org.eco.vip.core.utils.FileUtils;
-import org.eco.vip.core.utils.ImgUtils;
-import org.eco.vip.core.utils.MapstructUtils;
-import org.eco.vip.core.utils.Seqs;
-import org.eco.vip.core.utils.StrUtils;
+import org.eco.vip.core.utils.*;
 import org.eco.vip.nexus.core.domain.files.Files;
 import org.eco.vip.nexus.core.domain.files.pojo.FilesBO;
 import org.eco.vip.nexus.core.domain.files.pojo.FilesVO;
@@ -38,7 +31,6 @@ import java.io.File;
 import java.io.IOException;
 import java.util.List;
 
-import static org.eco.vip.core.utils.IpUtils.getIpAddress;
 import static org.eco.vip.nexus.core.domain.files.table.FilesTableDef.FILES;
 
 /**
@@ -171,7 +163,7 @@ public class FilesService extends BaseService<FilesMapper, Files> implements IFi
                 }
             }
         }
-        String downloadUrl = Constants.HTTP + getIpAddress() + StrUtils.COLON + port + FileUtils.FILE_SEPARATOR + Constants.LOCAL_FILE_BUCKET_KEY + FileUtils.FILE_SEPARATOR + path;
+        String downloadUrl = Constants.HTTP + NetUtils.getLocalhostStr() + StrUtils.COLON + port + FileUtils.FILE_SEPARATOR + Constants.LOCAL_FILE_BUCKET_KEY + FileUtils.FILE_SEPARATOR + path;
         filesInfo.setDownloadUrl(downloadUrl);
         filesInfo.setStorageUrl(storageUrl);
         this.save(filesInfo);

+ 19 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/service/monitor/IMonitorService.java

@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.service.monitor;
+
+
+import org.eco.vip.nexus.core.domain.monitor.MonitorServerVO;
+
+/**
+ * @description IMonitorService
+ *
+ * @author GaoKunW
+ * @date 2025/7/25 14:35
+ */
+public interface IMonitorService {
+
+    MonitorServerVO server();
+}

+ 137 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/service/monitor/MonitorService.java

@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.service.monitor;
+
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.net.NetUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.system.JvmInfo;
+import cn.hutool.system.OsInfo;
+import cn.hutool.system.RuntimeInfo;
+import cn.hutool.system.SystemUtil;
+import cn.hutool.system.oshi.CpuInfo;
+import org.eco.vip.core.utils.*;
+import org.eco.vip.nexus.core.domain.monitor.MonitorServerVO;
+import org.eco.vip.nexus.core.domain.monitor.pojo.*;
+import org.springframework.stereotype.Service;
+import oshi.SystemInfo;
+import oshi.hardware.CentralProcessor;
+import oshi.hardware.ComputerSystem;
+import oshi.hardware.GlobalMemory;
+import oshi.software.os.FileSystem;
+import oshi.software.os.OperatingSystem;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
+import java.math.BigDecimal;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * @description MonitorService
+ *
+ * @author GaoKunW
+ * @date 2025/7/25 14:36
+ */
+@Service
+public class MonitorService implements IMonitorService {
+    @Override
+    public MonitorServerVO server() {
+        MonitorServerVO serverVO = new MonitorServerVO();
+        serverVO.setMonitorCpu(getCpuInfo());
+        serverVO.setMonitorMemory(getMemory());
+        serverVO.setMonitorServer(getServer());
+        serverVO.setMonitorStorage(getStorage());
+        serverVO.setMonitorJvm(getJvm());
+        MonitorJvm jvm = new MonitorJvm();
+        return serverVO;
+    }
+    
+    private MonitorJvm getJvm() {
+        MonitorJvm jvm = new MonitorJvm();
+        RuntimeInfo runtimeInfo = SystemUtils.getRuntimeInfo();
+        JvmInfo jvmInfo = SystemUtil.getJvmInfo();
+        jvm.setJvmName(jvmInfo.getName());
+        jvm.setJvmVersion(jvmInfo.getVersion());
+        long totalMemory = runtimeInfo.getTotalMemory();
+        jvm.setJvmMemoryTotal(FileUtil.readableFileSize(totalMemory));
+        jvm.setJvmMemoryFree(FileUtil.readableFileSize(runtimeInfo.getFreeMemory()));
+        long jvmMemoryUsed = NumberUtil.sub(new BigDecimal(runtimeInfo
+                .getTotalMemory()), new BigDecimal(runtimeInfo.getFreeMemory())).longValue();
+        jvm.setJvmMemoryUsed(FileUtil.readableFileSize(jvmMemoryUsed));
+        double jvmUseRate = NumberUtil.mul(NumberUtil.div(jvmMemoryUsed, totalMemory, 4), 100);
+        jvm.setJvmUseRate(jvmUseRate);
+        RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
+        DateTime startTime = DateUtil.date(runtimeMXBean.getStartTime());
+        jvm.setJvmStartTime(DateUtil.formatDateTime(startTime));
+        jvm.setJvmRunTime(DateUtil.formatBetween(startTime, DateTime.now()));
+        jvm.setJavaVersion(SystemUtil.get("java.version", false));
+        jvm.setJavaPath(SystemUtil.get("java.home", false));
+        return jvm;
+    }
+
+    private MonitorStorage getStorage() {
+        MonitorStorage storage = new MonitorStorage();
+        SystemInfo si = new SystemInfo();
+        OperatingSystem operatingSystem = si.getOperatingSystem();
+        FileSystem fileSystem = operatingSystem.getFileSystem();
+        AtomicLong storageTotal = new AtomicLong();
+        AtomicLong storageUsed = new AtomicLong();
+        AtomicLong storageFree = new AtomicLong();
+        fileSystem.getFileStores().forEach(osFileStore -> {
+            long totalSpace = osFileStore.getTotalSpace();
+            long usableSpace = osFileStore.getUsableSpace();
+            long freeSpace = osFileStore.getFreeSpace();
+            long usedSpace = totalSpace - usableSpace;
+            storageTotal.addAndGet(totalSpace);
+            storageUsed.addAndGet(usedSpace);
+            storageFree.addAndGet(freeSpace);
+        });
+        storage.setStorageTotal(FileUtil.readableFileSize(storageTotal.get()));
+        storage.setStorageUsed(FileUtil.readableFileSize(storageUsed.get()));
+        storage.setStorageFree(FileUtil.readableFileSize(storageFree.get()));
+        storage.setStorageUseRate(NumberUtil.mul(NumberUtil.div(storageUsed.doubleValue(), storageTotal.doubleValue(), 4), 100));
+        return storage;
+    }
+
+    private MonitorServer getServer() {
+        MonitorServer server = new MonitorServer();
+        OsInfo osInfo = SystemUtils.getOsInfo();
+        server.setServerArchitecture(osInfo.getArch());
+        server.setServerName(NetUtils.getLocalHostName());
+        server.setServerIp(NetUtils.getLocalhostStr());
+        server.setServerOs(osInfo.getName());
+        return server;
+    }
+
+    private MonitorMemory getMemory() {
+        MonitorMemory memory = new MonitorMemory();
+        GlobalMemory globalMemory = OshiUtils.getMemory();
+        long used = globalMemory.getTotal() - globalMemory.getAvailable();
+        memory.setMemoryFree(FileUtils.readableFileSize(globalMemory.getAvailable()));
+        memory.setMemoryTotal(FileUtils.readableFileSize(globalMemory.getTotal()));
+        memory.setMemoryUsed(FileUtils.readableFileSize(used));
+        memory.setMemoryUseRate(NumberUtils.mul(NumberUtils.div(used, globalMemory.getTotal(), 4), 100) + StrUtils.PERCENT_SIGN);
+        return memory;
+    }
+
+    private MonitorCpu getCpuInfo() {
+        MonitorCpu cpu = new MonitorCpu();
+        CpuInfo cpuInfo = OshiUtils.getCpuInfo();
+        CentralProcessor processor = OshiUtils.getProcessor();
+        cpu.setCpuName(processor.getProcessorIdentifier().getName());
+        cpu.setCpuNum(processor.getPhysicalPackageCount());
+        cpu.setCpuPhysicalCoreNum(processor.getPhysicalProcessorCount());
+        cpu.setCpuLogicalCoreNum(processor.getLogicalProcessorCount());
+        cpu.setCpuFreeRate(cpuInfo.getFree() + StrUtils.PERCENT_SIGN);
+        cpu.setCpuSysUseRate(cpuInfo.getUser() + StrUtils.PERCENT_SIGN);
+        cpu.setCpuWaitRate(cpuInfo.getWait() + StrUtils.PERCENT_SIGN);
+        cpu.setCpuUserUseRate(cpuInfo.getUser() + StrUtils.PERCENT_SIGN);
+        cpu.setCpuTotalUseRate(cpuInfo.getToTal());
+        return cpu;
+    }
+}