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