From 79f0c62037e3b81058a898dca234261a7c801742 Mon Sep 17 00:00:00 2001 From: gaoxq <376340421@qq.com> Date: Sun, 24 Aug 2025 17:03:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96=E7=A3=81?= =?UTF-8?q?=E7=9B=98=E4=B8=BB=E6=9C=BA=E7=9A=84=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mini/capi/CApiApplication.java | 2 + .../com/mini/capi/biz/domain/DiskMount.java | 10 +- .../com/mini/capi/biz/domain/SysHost.java | 10 +- .../java/com/mini/capi/job/taskEnable.java | 100 ++++++++++++++++++ .../java/com/mini/capi/utils/HostInfo.java | 3 - src/main/java/com/mini/capi/utils/vDate.java | 2 - src/main/resources/mapper/SysHostMapper.xml | 3 +- 7 files changed, 114 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/mini/capi/job/taskEnable.java diff --git a/src/main/java/com/mini/capi/CApiApplication.java b/src/main/java/com/mini/capi/CApiApplication.java index 232d363..dad8939 100644 --- a/src/main/java/com/mini/capi/CApiApplication.java +++ b/src/main/java/com/mini/capi/CApiApplication.java @@ -3,7 +3,9 @@ package com.mini.capi; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; +@EnableScheduling @SpringBootApplication @MapperScan("com.mini.capi.biz.mapper") public class CApiApplication { diff --git a/src/main/java/com/mini/capi/biz/domain/DiskMount.java b/src/main/java/com/mini/capi/biz/domain/DiskMount.java index 005f8e2..ae1ba42 100644 --- a/src/main/java/com/mini/capi/biz/domain/DiskMount.java +++ b/src/main/java/com/mini/capi/biz/domain/DiskMount.java @@ -4,18 +4,15 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; - -import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; - import lombok.Getter; import lombok.Setter; /** *

- * + * *

* * @author gaoxq @@ -26,7 +23,6 @@ import lombok.Setter; @TableName("biz_disk_mount") public class DiskMount implements Serializable { - @Serial private static final long serialVersionUID = 1L; @TableField("create_time") @@ -68,6 +64,9 @@ public class DiskMount implements Serializable { @TableId(value = "disk_mount_id", type = IdType.AUTO) private String diskMountId; + @TableField("update_time") + private String updateTime; + /** * 租户id */ @@ -104,5 +103,4 @@ public class DiskMount implements Serializable { ", mountPoint='" + mountPoint + '\'' + '}'; } - } diff --git a/src/main/java/com/mini/capi/biz/domain/SysHost.java b/src/main/java/com/mini/capi/biz/domain/SysHost.java index 4654d65..9c68984 100644 --- a/src/main/java/com/mini/capi/biz/domain/SysHost.java +++ b/src/main/java/com/mini/capi/biz/domain/SysHost.java @@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; - -import java.io.Serial; import java.io.Serializable; -import java.math.BigDecimal; import java.time.LocalDateTime; import lombok.Getter; import lombok.Setter; @@ -25,7 +22,6 @@ import lombok.Setter; @TableName("biz_sys_host") public class SysHost implements Serializable { - @Serial private static final long serialVersionUID = 1L; @TableField("create_time") @@ -67,6 +63,12 @@ public class SysHost implements Serializable { @TableField("cpu_usage") private String cpuUsage; + @TableField("doker_host_id") + private String dokerHostId; + + @TableField("update_time") + private String updateTime; + /** * 租户id */ diff --git a/src/main/java/com/mini/capi/job/taskEnable.java b/src/main/java/com/mini/capi/job/taskEnable.java new file mode 100644 index 0000000..c515c15 --- /dev/null +++ b/src/main/java/com/mini/capi/job/taskEnable.java @@ -0,0 +1,100 @@ +package com.mini.capi.job; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.mini.capi.biz.domain.*; +import com.mini.capi.biz.service.*; +import com.mini.capi.utils.HostInfo; +import com.mini.capi.utils.vDate; +import com.mini.capi.utils.vId; +import jakarta.annotation.Resource; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Controller; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Controller +public class taskEnable { + + + @Resource + private SshInfoService sshInfoService; + + @Resource + private SshUserService sshUserService; + + @Resource + private DockerHostService dockerHostService; + + @Resource + private DiskMountService diskMountService; + + @Resource + private SysHostService sysHostService; + + + @Scheduled(cron = "0 0/10 * * * ?") + public void jobHostDisk() { + List dockerHosts = dockerHostService.list(); + for (DockerHost host : dockerHosts) { + SshUser sshUser = sshUserService.getById(host.getUserId()); + SshInfo sshInfo = sshInfoService.getById(host.getHostId()); + try { + /* 1. 采集实时数据 */ + HostInfo.Result r = HostInfo.collect( + sshInfo.getHostIp(), + Integer.parseInt(sshInfo.getHostPort()), + sshUser.getCUsername(), + sshUser.getCPassword()); + + /* 2. 主机维度 saveOrUpdate */ + SysHost sysHost = r.host; + sysHost.setSysHostId(host.getHostId()); + sysHost.setUpdateTime(vDate.getNow()); + sysHost.setDokerHostId(host.getDokerHostId()); + sysHostService.saveOrUpdate(sysHost); + + /* 3. 处理磁盘:先查库做索引,再比对 */ + List dbDisks = diskMountService.lambdaQuery() + .eq(DiskMount::getSysHostId, host.getHostId()) + .list(); + Map dbDiskMap = dbDisks.stream() + .collect(Collectors.toMap(DiskMount::getMountPoint, Function.identity())); + + List toSaveOrUpdate = new ArrayList<>(); + Set liveMountPoint = new HashSet<>(); + + for (DiskMount d : r.disks) { + liveMountPoint.add(d.getMountPoint()); + DiskMount exist = dbDiskMap.get(d.getMountPoint()); + if (exist != null) { + // 存在 -> 更新 + d.setDiskMountId(exist.getDiskMountId()); + } else { + // 不存在 -> 新增 + d.setDiskMountId(vId.getUid()); + } + d.setSysHostId(host.getHostId()); + d.setUpdateTime(vDate.getNow()); + toSaveOrUpdate.add(d); + } + + /* 4. 批量保存/更新 */ + diskMountService.saveOrUpdateBatch(toSaveOrUpdate); + + /* 5. 删除实时已消失的盘 */ + List delIds = dbDisks.stream() + .filter(d -> !liveMountPoint.contains(d.getMountPoint())) + .map(DiskMount::getDiskMountId) + .collect(Collectors.toList()); + if (!delIds.isEmpty()) { + diskMountService.removeByIds(delIds); + } + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } + } + +} diff --git a/src/main/java/com/mini/capi/utils/HostInfo.java b/src/main/java/com/mini/capi/utils/HostInfo.java index 0428f77..0f7fb72 100644 --- a/src/main/java/com/mini/capi/utils/HostInfo.java +++ b/src/main/java/com/mini/capi/utils/HostInfo.java @@ -32,7 +32,6 @@ public final class HostInfo { session = createSession(hostIp, port, username, password); SysHost host = collectHost(session); List disks = collectDisk(session); - disks.forEach(d -> d.setSysHostId(host.getSysHostId())); return new Result(host, disks); } finally { if (session != null && session.isConnected()) { @@ -80,8 +79,6 @@ public final class HostInfo { /* ========== 采集主机信息 ========== */ private static SysHost collectHost(Session session) throws Exception { SysHost host = new SysHost(); - String id = vId.getUid(); - host.setSysHostId(id); host.setHostTag(HOST_TAG); host.setHostname(exec(session, "hostname -s")); host.setCpuArch(exec(session, "uname -m")); diff --git a/src/main/java/com/mini/capi/utils/vDate.java b/src/main/java/com/mini/capi/utils/vDate.java index 1dd181d..5c31925 100644 --- a/src/main/java/com/mini/capi/utils/vDate.java +++ b/src/main/java/com/mini/capi/utils/vDate.java @@ -1,7 +1,6 @@ package com.mini.capi.utils; - import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -30,7 +29,6 @@ public class vDate { return dateTime.format(DateTimeFormatter.ofPattern(pattern)); } - public static String getNow() { Date date = new Date(); return DEFAULT_SDF.format(date); diff --git a/src/main/resources/mapper/SysHostMapper.xml b/src/main/resources/mapper/SysHostMapper.xml index ee298e5..0fba7e5 100644 --- a/src/main/resources/mapper/SysHostMapper.xml +++ b/src/main/resources/mapper/SysHostMapper.xml @@ -12,6 +12,7 @@ + @@ -20,7 +21,7 @@ - create_time, sys_host_id, host_tag, hostname, cpu_arch, cpu_model, cpu_cores, cpu_usage, f_tenant_id, f_flow_id, f_flow_task_id, f_flow_state + create_time, sys_host_id, host_tag, hostname, cpu_arch, cpu_model, cpu_cores, cpu_usage,doker_host_id, f_tenant_id, f_flow_id, f_flow_task_id, f_flow_state