diff --git a/itbaima-monitor-client/.gitignore b/itbaima-monitor-client/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/itbaima-monitor-client/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/itbaima-monitor-client/pom.xml b/itbaima-monitor-client/pom.xml new file mode 100644 index 0000000..ef4ddf9 --- /dev/null +++ b/itbaima-monitor-client/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 3.1.2 + + + com.example + itbaima-monitor-client + 0.0.1-SNAPSHOT + my-project-backend + my-project-backend + + 17 + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-quartz + + + org.projectlombok + lombok + + + com.github.oshi + oshi-core + 6.4.0 + + + diff --git a/itbaima-monitor-client/src/main/java/com/test/MonitorClientApplication.java b/itbaima-monitor-client/src/main/java/com/test/MonitorClientApplication.java new file mode 100644 index 0000000..14c1a53 --- /dev/null +++ b/itbaima-monitor-client/src/main/java/com/test/MonitorClientApplication.java @@ -0,0 +1,11 @@ +package com.test; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class MonitorClientApplication { + public static void main(String[] args) { + SpringApplication.run(MonitorClientApplication.class, args); + } +} diff --git a/itbaima-monitor-client/src/main/java/com/test/config/QuartzConfiguration.java b/itbaima-monitor-client/src/main/java/com/test/config/QuartzConfiguration.java new file mode 100644 index 0000000..7eb7a7b --- /dev/null +++ b/itbaima-monitor-client/src/main/java/com/test/config/QuartzConfiguration.java @@ -0,0 +1,36 @@ +package com.test.config; + +import com.test.task.MonitorJobBean; +import lombok.extern.slf4j.Slf4j; +import org.quartz.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import oshi.SystemInfo; + +@Slf4j +@Configuration +public class QuartzConfiguration { + + @Bean + public SystemInfo info(){ + return new SystemInfo(); + } + + @Bean + public JobDetail jobDetailFactoryBean() { + return JobBuilder.newJob(MonitorJobBean.class) + .withIdentity("monitor-task") + .storeDurably() + .build(); + } + + @Bean + public Trigger cronTriggerFactoryBean(JobDetail detail) { + CronScheduleBuilder cron= CronScheduleBuilder.cronSchedule("*/1 * * * * ?"); + return TriggerBuilder.newTrigger() + .forJob(detail) + .withIdentity("monitor-timer") + .withSchedule(cron) + .build(); + } +} diff --git a/itbaima-monitor-client/src/main/java/com/test/entity/SystemData.java b/itbaima-monitor-client/src/main/java/com/test/entity/SystemData.java new file mode 100644 index 0000000..c55fe3d --- /dev/null +++ b/itbaima-monitor-client/src/main/java/com/test/entity/SystemData.java @@ -0,0 +1,17 @@ +package com.test.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class SystemData { + String osArch; + String osName; + String osVersion; + int osBit; + int cpuCore; + double memory; + double disk; + String ip; +} diff --git a/itbaima-monitor-client/src/main/java/com/test/task/MonitorJobBean.java b/itbaima-monitor-client/src/main/java/com/test/task/MonitorJobBean.java new file mode 100644 index 0000000..7419645 --- /dev/null +++ b/itbaima-monitor-client/src/main/java/com/test/task/MonitorJobBean.java @@ -0,0 +1,15 @@ +package com.test.task; + +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.scheduling.quartz.QuartzJobBean; +import org.springframework.stereotype.Component; + +@Component +public class MonitorJobBean extends QuartzJobBean { + + @Override + protected void executeInternal(JobExecutionContext context) throws JobExecutionException { + + } +} diff --git a/itbaima-monitor-client/src/main/java/com/test/util/DataGetter.java b/itbaima-monitor-client/src/main/java/com/test/util/DataGetter.java new file mode 100644 index 0000000..766bc3c --- /dev/null +++ b/itbaima-monitor-client/src/main/java/com/test/util/DataGetter.java @@ -0,0 +1,5 @@ +package com.test.util; + +public interface DataGetter { + T getData(); +} diff --git a/itbaima-monitor-client/src/main/java/com/test/util/SystemDataGetter.java b/itbaima-monitor-client/src/main/java/com/test/util/SystemDataGetter.java new file mode 100644 index 0000000..3ebf843 --- /dev/null +++ b/itbaima-monitor-client/src/main/java/com/test/util/SystemDataGetter.java @@ -0,0 +1,57 @@ +package com.test.util; + +import com.test.entity.SystemData; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import oshi.SystemInfo; +import oshi.hardware.HWDiskStore; +import oshi.hardware.HardwareAbstractionLayer; +import oshi.hardware.NetworkIF; +import oshi.software.os.OperatingSystem; + +import java.io.IOException; +import java.net.NetworkInterface; +import java.util.Properties; + +@Slf4j +@Service +public class SystemDataGetter implements DataGetter{ + + @Resource + SystemInfo info; + + private final Properties properties = System.getProperties(); + + public SystemData getData() { + OperatingSystem os = info.getOperatingSystem(); + HardwareAbstractionLayer hardware = info.getHardware(); + double memory = hardware.getMemory().getTotal() / 1024.0 / 1024 / 1024; + double diskSize = hardware.getDiskStores().stream().mapToLong(HWDiskStore::getSize).sum() / 1024.0 / 1024 / 1024; + try { + String ip = null; + 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) { + ip = network.getIPv4addr()[0]; + break; + } + } + return new SystemData() + .setOsBit(os.getBitness()) + .setOsArch(properties.getProperty("os.arch")) + .setOsVersion(os.getVersionInfo().getVersion()) + .setOsName(os.getFamily()) + .setCpuCore(hardware.getProcessor().getLogicalProcessorCount()) + .setMemory(memory) + .setDisk(diskSize) + .setIp(ip); + } catch (IOException e) { + log.error("读取系统网络配置时出错", e); + return null; + } + } +}