Jelajahi Sumber

web.devops 中添加 DiskInfo, agent 发送的事件中添加磁盘相关信息

reghao 1 tahun lalu
induk
melakukan
1610b20d83

+ 1 - 0
common/src/main/java/cn/reghao/bnt/common/machine/Disk.java

@@ -25,6 +25,7 @@ public class Disk implements MachineData<List<DiskDetail>, List<DiskStat>> {
     @Override
     public List<DiskDetail> detail() {
         return os.getFileSystem().getFileStores().stream()
+                .filter(osFileStore -> osFileStore.getVolume().startsWith("/dev/"))
                 .map(osFileStore -> {
                     String vol = osFileStore.getVolume();
                     String mount = osFileStore.getMount();

+ 39 - 0
web/src/main/java/cn/reghao/bnt/web/devops/machine/model/po/DiskInfo.java

@@ -0,0 +1,39 @@
+package cn.reghao.bnt.web.devops.machine.model.po;
+
+import cn.reghao.jutil.jdk.machine.data.detail.DiskDetail;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Embeddable;
+import java.io.Serializable;
+
+/**
+ * @author reghao
+ * @date 2024-07-26 09:28:35
+ */
+@NoArgsConstructor
+@Data
+@Embeddable
+public class DiskInfo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String diskPath;
+    private String mountedOn;
+    private String fsType;
+    private Long total;
+    private Long avail;
+    private Long used;
+    private long inodeTotal;
+    private long inodeAvail;
+
+    public DiskInfo(DiskDetail diskDetail) {
+        this.diskPath = diskDetail.getDiskPath();
+        this.mountedOn = diskDetail.getMountedOn();
+        this.fsType = diskDetail.getFsType();
+        this.total = diskDetail.getTotal();
+        this.avail = diskDetail.getAvail();
+        this.used = diskDetail.getUsed();
+        this.inodeTotal = diskDetail.getInodeTotal();
+        this.inodeAvail = diskDetail.getInodeAvail();
+    }
+}

+ 14 - 1
web/src/main/java/cn/reghao/bnt/web/devops/machine/model/po/MachineInfo.java

@@ -49,6 +49,12 @@ public class MachineInfo extends BaseEntity {
     @CollectionTable(name = "devops_machine_info_networks")
     private List<NetworkInfo> networkInfos;
 
+    @NotNull
+    @ElementCollection(targetClass = DiskInfo.class)
+    @LazyCollection(LazyCollectionOption.FALSE)
+    @CollectionTable(name = "devops_machine_info_disks")
+    private List<DiskInfo> diskInfos;
+
     public MachineInfo(EvtAgentStart machineDetail) {
         this.machineId = machineDetail.getMachineId();
         OsDetail osDetail = machineDetail.getOsDetail();
@@ -58,11 +64,18 @@ public class MachineInfo extends BaseEntity {
         this.byteOrder = osDetail.getByteOrder();
         this.bootTime = osDetail.getBootTime();
         this.agentVersion = machineDetail.getAppVersion().getCommitId();
+        this.stat = 1;
+
         setNetworkInfos(machineDetail.getNetworkDetails());
+        setDiskInfos(machineDetail.getDiskDetails());
     }
 
-    public void setNetworkInfos(List<NetworkDetail> networkDetails) {
+    private void setNetworkInfos(List<NetworkDetail> networkDetails) {
         this.networkInfos = networkDetails.stream().map(NetworkInfo::new).collect(Collectors.toList());
         this.machineIpv4 = networkInfos.isEmpty() ? "127.0.0.1" : networkInfos.get(0).getIpv4();
     }
+
+    private void setDiskInfos(List<DiskDetail> diskDetails) {
+        this.diskInfos = diskDetails.stream().map(DiskInfo::new).collect(Collectors.toList());
+    }
 }

+ 2 - 14
web/src/main/java/cn/reghao/bnt/web/devops/machine/model/vo/MachineHostVO.java

@@ -22,7 +22,7 @@ public class MachineHostVO {
     @Deprecated
     private String lastCheck;
 
-    public MachineHostVO(MachineHost machineHost, String bootTime) {
+    public MachineHostVO(MachineHost machineHost, String bootTime, String status) {
         this.machineId = machineHost.getMachineId();
         this.machineIpv4 = machineHost.getMachineIpv4();
         this.bootTime = bootTime;
@@ -30,18 +30,6 @@ public class MachineHostVO {
         this.osName = machineHost.getMachineInfo().getName();
         this.osVersion = machineHost.getMachineInfo().getVersion();
         this.agentVersion = machineHost.getMachineInfo().getAgentVersion();
-        this.status = NodeStatus.Online.name();
-    }
-
-    public MachineHostVO(MachineHost machineHost) {
-        this.machineId = machineHost.getMachineId();
-        this.machineIpv4 = machineHost.getMachineIpv4();
-        this.bootTime = NotAvailable.na.getDesc();
-        this.osArch = machineHost.getMachineInfo().getArch();
-        this.osName = machineHost.getMachineInfo().getName();
-        this.osVersion = machineHost.getMachineInfo().getVersion();
-        this.agentVersion = machineHost.getMachineInfo().getAgentVersion();
-        this.status = NodeStatus.Offline.name();
-        this.lastCheck = NotAvailable.na.getDesc();
+        this.status = status;
     }
 }

+ 8 - 4
web/src/main/java/cn/reghao/bnt/web/devops/machine/service/MachineHostServiceImpl.java

@@ -56,7 +56,15 @@ public class MachineHostServiceImpl implements MachineHostService {
     }
 
     public Result delete(String machineId) {
+        if (machineService.isAgentOnline(machineId)) {
+            return Result.result(ResultStatus.FAIL, "机器当前在线, 不能删除");
+        }
+
         MachineHost machineHost = machineHostRepository.findByMachineId(machineId);
+        if (machineHost != null) {
+            appDeployConfigRepository.deleteByMachineHost(machineHost);
+        }
+
         List<AppDeployConfig> list = appDeployConfigRepository.findByMachineHost(machineHost);
         if (!list.isEmpty()) {
             List<String> apps = list.stream()
@@ -73,10 +81,6 @@ public class MachineHostServiceImpl implements MachineHostService {
             return Result.result(ResultStatus.FAIL, errMsg);
         }
 
-        if (machineService.isAgentOnline(machineId)) {
-            return Result.result(ResultStatus.FAIL, "机器当前在线, 不能删除");
-        }
-
         if (machineHost != null) {
             machineHostRepository.delete(machineHost);
         }

+ 11 - 2
web/src/main/java/cn/reghao/bnt/web/devops/machine/service/MachineService.java

@@ -1,5 +1,6 @@
 package cn.reghao.bnt.web.devops.machine.service;
 
+import cn.reghao.bnt.common.msg.constant.NodeStatus;
 import cn.reghao.bnt.web.devops.machine.db.repository.MachineInfoRepository;
 import cn.reghao.bnt.web.devops.machine.model.po.MachineHost;
 import cn.reghao.bnt.web.devops.machine.model.po.MachineInfo;
@@ -28,7 +29,7 @@ public class MachineService {
     public void agentShutdown(String machineId) {
         MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
         if (machineInfo != null) {
-            machineInfo.setStat(1);
+            machineInfo.setStat(2);
             machineInfoRepository.save(machineInfo);
         }
     }
@@ -40,7 +41,15 @@ public class MachineService {
             MachineHost machineHost = new MachineHost(machineInfo);
             long bootTime = machineInfo.getBootTime();
             String bootTimeStr = DateTimeConverter.format(bootTime*1000);
-            return new MachineHostVO(machineHost, bootTimeStr);
+            String status = NodeStatus.Online.name();
+            int stat = machineInfo.getStat();
+            if (stat == 2) {
+                status = NodeStatus.Offline.name();
+            } else if (stat == 3) {
+                status = NodeStatus.Timeout.name();
+            }
+
+            return new MachineHostVO(machineHost, bootTimeStr, status);
         }).collect(Collectors.toList());
         return PageList.pageList(pageNumber, pageSize, (int) machineInfos.getTotalElements(), list1);
     }

+ 9 - 13
web/src/main/java/cn/reghao/bnt/web/ws/event/MachineEventService.java

@@ -9,7 +9,6 @@ import cn.reghao.bnt.web.devops.machine.db.repository.MachineHostRepository;
 import cn.reghao.bnt.web.devops.machine.db.repository.MachineInfoRepository;
 import cn.reghao.bnt.web.devops.machine.model.po.MachineHost;
 import cn.reghao.bnt.web.devops.machine.model.po.MachineInfo;
-import cn.reghao.bnt.web.devops.machine.service.MachineService;
 import cn.reghao.jutil.jdk.machine.data.detail.DiskDetail;
 import cn.reghao.jutil.jdk.machine.data.detail.MemoryDetail;
 import org.springframework.stereotype.Service;
@@ -23,15 +22,13 @@ import java.util.List;
  */
 @Service
 public class MachineEventService {
-    private final MachineService machineService;
     private final MachineInfoRepository machineInfoRepository;
     private final MachineHostRepository machineHostRepository;
     private final DeployStat deployStat;
     private final AppStat appStat;
 
-    public MachineEventService(MachineService machineService, MachineInfoRepository machineInfoRepository,
-                               MachineHostRepository machineHostRepository, DeployStat deployStat, AppStat appStat) {
-        this.machineService = machineService;
+    public MachineEventService(MachineInfoRepository machineInfoRepository, MachineHostRepository machineHostRepository,
+                               DeployStat deployStat, AppStat appStat) {
         this.machineInfoRepository = machineInfoRepository;
         this.machineHostRepository = machineHostRepository;
         this.deployStat = deployStat;
@@ -45,20 +42,18 @@ public class MachineEventService {
 
         MachineInfo machineInfo = new MachineInfo(evtAgentStart);
         MachineInfo infoEntity = machineInfoRepository.findByMachineId(machineId);
-        MachineHost hostEntity;
         if (infoEntity == null) {
             infoEntity = machineInfoRepository.save(machineInfo);
-            hostEntity = machineHostRepository.save(new MachineHost(infoEntity));
+            machineHostRepository.save(new MachineHost(infoEntity));
         } else {
             machineInfo.setId(infoEntity.getId());
             machineInfo.setCreateTime(infoEntity.getCreateTime());
-            infoEntity = machineInfoRepository.save(machineInfo);
+            machineInfoRepository.save(machineInfo);
 
-            hostEntity = machineHostRepository.findByMachineId(machineId);
-            MachineHost machineHost = new MachineHost(infoEntity);
-            machineHost.setId(hostEntity.getId());
-            machineHost.setCreateTime(hostEntity.getCreateTime());
-            hostEntity = machineHostRepository.save(hostEntity);
+            MachineHost hostEntity = machineHostRepository.findByMachineId(machineId);
+            String machineIpv4 = infoEntity.getMachineIpv4();
+            hostEntity.setMachineIpv4(machineIpv4);
+            machineHostRepository.save(hostEntity);
         }
 
         // 向 agent 发送 EvtAppStat 事件, 获取应用的状态
@@ -75,5 +70,6 @@ public class MachineEventService {
 
         MemoryDetail memoryDetail = evtAgentHeartbeat.getMemoryDetail();
         List<DiskDetail> diskDetails = evtAgentHeartbeat.getDiskDetails();
+        MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
     }
 }