diff --git a/itbaima-monitor-client/pom.xml b/itbaima-monitor-client/pom.xml index 41aadc0..fedb25e 100644 --- a/itbaima-monitor-client/pom.xml +++ b/itbaima-monitor-client/pom.xml @@ -37,6 +37,11 @@ fastjson2 2.0.37 + + com.github.oshi + oshi-core + 6.4.0 + diff --git a/itbaima-monitor-client/src/main/java/com/example/config/ServerConfiguration.java b/itbaima-monitor-client/src/main/java/com/example/config/ServerConfiguration.java index 9a03d34..df7fa73 100644 --- a/itbaima-monitor-client/src/main/java/com/example/config/ServerConfiguration.java +++ b/itbaima-monitor-client/src/main/java/com/example/config/ServerConfiguration.java @@ -2,6 +2,7 @@ package com.example.config; import com.alibaba.fastjson2.JSONObject; import com.example.entity.ConnectionConfig; +import com.example.utils.MonitorUtils; import com.example.utils.NetUtils; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -22,12 +23,16 @@ public class ServerConfiguration { @Resource NetUtils net; + @Resource + MonitorUtils monitor; + @Bean ConnectionConfig connectionConfig() { log.info("正在加载服务端连接配置..."); ConnectionConfig config = this.readConfigurationFromFile(); if(config == null) config = this.registerToServer(); + System.out.println(monitor.monitorBaseDetail()); return config; } diff --git a/itbaima-monitor-client/src/main/java/com/example/entity/BaseDetail.java b/itbaima-monitor-client/src/main/java/com/example/entity/BaseDetail.java new file mode 100644 index 0000000..79f4b56 --- /dev/null +++ b/itbaima-monitor-client/src/main/java/com/example/entity/BaseDetail.java @@ -0,0 +1,18 @@ +package com.example.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class BaseDetail { + String osArch; + String osName; + String osVersion; + int osBit; + String cpuName; + int cpuCore; + double memory; + double disk; + String ip; +} diff --git a/itbaima-monitor-client/src/main/java/com/example/utils/MonitorUtils.java b/itbaima-monitor-client/src/main/java/com/example/utils/MonitorUtils.java new file mode 100644 index 0000000..28292ce --- /dev/null +++ b/itbaima-monitor-client/src/main/java/com/example/utils/MonitorUtils.java @@ -0,0 +1,59 @@ +package com.example.utils; + +import com.example.entity.BaseDetail; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import oshi.SystemInfo; +import oshi.hardware.HardwareAbstractionLayer; +import oshi.hardware.NetworkIF; +import oshi.software.os.OperatingSystem; + +import java.io.File; +import java.io.IOException; +import java.net.NetworkInterface; +import java.util.Arrays; +import java.util.Objects; +import java.util.Properties; + +@Slf4j +@Component +public class MonitorUtils { + + private final SystemInfo info = new SystemInfo(); + private final Properties properties = System.getProperties(); + + public BaseDetail monitorBaseDetail() { + OperatingSystem os = info.getOperatingSystem(); + HardwareAbstractionLayer hardware = info.getHardware(); + double memory = hardware.getMemory().getTotal() / 1024.0 / 1024 /1024; + double diskSize = Arrays.stream(File.listRoots()).mapToLong(File::getTotalSpace).sum() / 1024.0 / 1024 / 1024; + String ip = Objects.requireNonNull(this.findNetworkInterface(hardware)).getIPv4addr()[0]; + return new BaseDetail() + .setOsArch(properties.getProperty("os.arch")) + .setOsName(os.getFamily()) + .setOsVersion(os.getVersionInfo().getVersion()) + .setOsBit(os.getBitness()) + .setCpuName(hardware.getProcessor().getProcessorIdentifier().getName()) + .setCpuCore(hardware.getProcessor().getLogicalProcessorCount()) + .setMemory(memory) + .setDisk(diskSize) + .setIp(ip); + } + + private NetworkIF findNetworkInterface(HardwareAbstractionLayer hardware) { + try { + for (NetworkIF network : hardware.getNetworkIFs()) { + String[] ipv4Addr = network.getIPv4addr(); + NetworkInterface ni = network.queryNetworkInterface(); + if(!ni.isLoopback() && !ni.isPointToPoint() && ni.isUp() && !ni.isVirtual() + && (ni.getName().startsWith("eth") || ni.getName().startsWith("en")) + && ipv4Addr.length > 0) { + return network; + } + } + } catch (IOException e) { + log.error("读取网络接口信息时出错", e); + } + return null; + } +}