新增获取磁盘主机的信息
This commit is contained in:
@@ -3,7 +3,9 @@ package com.mini.capi;
|
|||||||
import org.mybatis.spring.annotation.MapperScan;
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
|
||||||
|
@EnableScheduling
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@MapperScan("com.mini.capi.biz.mapper")
|
@MapperScan("com.mini.capi.biz.mapper")
|
||||||
public class CApiApplication {
|
public class CApiApplication {
|
||||||
|
|||||||
@@ -4,18 +4,15 @@ import com.baomidou.mybatisplus.annotation.IdType;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
*
|
*
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @author gaoxq
|
* @author gaoxq
|
||||||
@@ -26,7 +23,6 @@ import lombok.Setter;
|
|||||||
@TableName("biz_disk_mount")
|
@TableName("biz_disk_mount")
|
||||||
public class DiskMount implements Serializable {
|
public class DiskMount implements Serializable {
|
||||||
|
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@TableField("create_time")
|
@TableField("create_time")
|
||||||
@@ -68,6 +64,9 @@ public class DiskMount implements Serializable {
|
|||||||
@TableId(value = "disk_mount_id", type = IdType.AUTO)
|
@TableId(value = "disk_mount_id", type = IdType.AUTO)
|
||||||
private String diskMountId;
|
private String diskMountId;
|
||||||
|
|
||||||
|
@TableField("update_time")
|
||||||
|
private String updateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 租户id
|
* 租户id
|
||||||
*/
|
*/
|
||||||
@@ -104,5 +103,4 @@ public class DiskMount implements Serializable {
|
|||||||
", mountPoint='" + mountPoint + '\'' +
|
", mountPoint='" + mountPoint + '\'' +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@@ -25,7 +22,6 @@ import lombok.Setter;
|
|||||||
@TableName("biz_sys_host")
|
@TableName("biz_sys_host")
|
||||||
public class SysHost implements Serializable {
|
public class SysHost implements Serializable {
|
||||||
|
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@TableField("create_time")
|
@TableField("create_time")
|
||||||
@@ -67,6 +63,12 @@ public class SysHost implements Serializable {
|
|||||||
@TableField("cpu_usage")
|
@TableField("cpu_usage")
|
||||||
private String cpuUsage;
|
private String cpuUsage;
|
||||||
|
|
||||||
|
@TableField("doker_host_id")
|
||||||
|
private String dokerHostId;
|
||||||
|
|
||||||
|
@TableField("update_time")
|
||||||
|
private String updateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 租户id
|
* 租户id
|
||||||
*/
|
*/
|
||||||
|
|||||||
100
src/main/java/com/mini/capi/job/taskEnable.java
Normal file
100
src/main/java/com/mini/capi/job/taskEnable.java
Normal file
@@ -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<DockerHost> 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<DiskMount> dbDisks = diskMountService.lambdaQuery()
|
||||||
|
.eq(DiskMount::getSysHostId, host.getHostId())
|
||||||
|
.list();
|
||||||
|
Map<String, DiskMount> dbDiskMap = dbDisks.stream()
|
||||||
|
.collect(Collectors.toMap(DiskMount::getMountPoint, Function.identity()));
|
||||||
|
|
||||||
|
List<DiskMount> toSaveOrUpdate = new ArrayList<>();
|
||||||
|
Set<String> 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<String> 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -32,7 +32,6 @@ public final class HostInfo {
|
|||||||
session = createSession(hostIp, port, username, password);
|
session = createSession(hostIp, port, username, password);
|
||||||
SysHost host = collectHost(session);
|
SysHost host = collectHost(session);
|
||||||
List<DiskMount> disks = collectDisk(session);
|
List<DiskMount> disks = collectDisk(session);
|
||||||
disks.forEach(d -> d.setSysHostId(host.getSysHostId()));
|
|
||||||
return new Result(host, disks);
|
return new Result(host, disks);
|
||||||
} finally {
|
} finally {
|
||||||
if (session != null && session.isConnected()) {
|
if (session != null && session.isConnected()) {
|
||||||
@@ -80,8 +79,6 @@ public final class HostInfo {
|
|||||||
/* ========== 采集主机信息 ========== */
|
/* ========== 采集主机信息 ========== */
|
||||||
private static SysHost collectHost(Session session) throws Exception {
|
private static SysHost collectHost(Session session) throws Exception {
|
||||||
SysHost host = new SysHost();
|
SysHost host = new SysHost();
|
||||||
String id = vId.getUid();
|
|
||||||
host.setSysHostId(id);
|
|
||||||
host.setHostTag(HOST_TAG);
|
host.setHostTag(HOST_TAG);
|
||||||
host.setHostname(exec(session, "hostname -s"));
|
host.setHostname(exec(session, "hostname -s"));
|
||||||
host.setCpuArch(exec(session, "uname -m"));
|
host.setCpuArch(exec(session, "uname -m"));
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.mini.capi.utils;
|
package com.mini.capi.utils;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
@@ -30,7 +29,6 @@ public class vDate {
|
|||||||
return dateTime.format(DateTimeFormatter.ofPattern(pattern));
|
return dateTime.format(DateTimeFormatter.ofPattern(pattern));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static String getNow() {
|
public static String getNow() {
|
||||||
Date date = new Date();
|
Date date = new Date();
|
||||||
return DEFAULT_SDF.format(date);
|
return DEFAULT_SDF.format(date);
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
<result column="cpu_model" property="cpuModel" />
|
<result column="cpu_model" property="cpuModel" />
|
||||||
<result column="cpu_cores" property="cpuCores" />
|
<result column="cpu_cores" property="cpuCores" />
|
||||||
<result column="cpu_usage" property="cpuUsage" />
|
<result column="cpu_usage" property="cpuUsage" />
|
||||||
|
<result column="doker_host_id" property="dokerHostId" />
|
||||||
<result column="f_tenant_id" property="fTenantId" />
|
<result column="f_tenant_id" property="fTenantId" />
|
||||||
<result column="f_flow_id" property="fFlowId" />
|
<result column="f_flow_id" property="fFlowId" />
|
||||||
<result column="f_flow_task_id" property="fFlowTaskId" />
|
<result column="f_flow_task_id" property="fFlowTaskId" />
|
||||||
@@ -20,7 +21,7 @@
|
|||||||
|
|
||||||
<!-- 通用查询结果列 -->
|
<!-- 通用查询结果列 -->
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
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
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user