|
@@ -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;
|
|
|
+ }
|
|
|
+}
|