Ver código fonte

添加机器状态检测

reghao 5 anos atrás
pai
commit
122371a20c

+ 10 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/cluster/controller/crud/MachineCrudController.java

@@ -5,12 +5,14 @@ import cn.reghao.autodop.dmaster.cluster.entity.MachineInfo;
 import cn.reghao.autodop.dmaster.cluster.vo.MachineVO;
 import cn.reghao.autodop.dmaster.common.db.PageList;
 import cn.reghao.autodop.dmaster.cluster.service.crud.MachineCrudService;
+import cn.reghao.autodop.dmaster.utils.amqp.MachineDispatcher;
 import io.swagger.annotations.Api;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -22,20 +24,26 @@ import java.util.stream.Collectors;
 @RequestMapping("/api/machine")
 public class MachineCrudController {
     private MachineCrudService machineCrudService;
+    private MachineDispatcher machineDispatcher;
 
-    public MachineCrudController(MachineCrudService machineCrudService) {
+    public MachineCrudController(MachineCrudService machineCrudService, MachineDispatcher machineDispatcher) {
         this.machineCrudService = machineCrudService;
+        this.machineDispatcher = machineDispatcher;
     }
 
     @GetMapping("/list")
     public String machineIdByPage(@RequestParam("page") int page, @RequestParam("size") int size) {
         PageList<MachineInfo> pageList = machineCrudService.getByPage(page, size);
+
+        Map<String, String> map = machineDispatcher.getMachineStatus();
         PageList<MachineVO> vos = new PageList<>();
         vos.setPageSize(pageList.getPageSize());
         vos.setTotalPages(pageList.getTotalPages());
         vos.setTotalSize(pageList.getTotalSize());
         vos.setHasNext(pageList.isHasNext());
-        vos.setList(pageList.getList().stream().map(MachineVO::from).collect(Collectors.toList()));
+        vos.setList(pageList.getList().stream()
+                .map(info -> MachineVO.from(info, map.get(info.getMachineId())))
+                .collect(Collectors.toList()));
         return WebResult.success(vos);
     }
 }

+ 3 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/cluster/vo/MachineVO.java

@@ -1,9 +1,7 @@
 package cn.reghao.autodop.dmaster.cluster.vo;
 
-import cn.reghao.autodop.common.dagent.machine.Machine;
 import cn.reghao.autodop.dmaster.cluster.entity.MachineInfo;
 import cn.reghao.autodop.dmaster.cluster.entity.NetworkInfo;
-import cn.reghao.autodop.dmaster.vm.kvm.Network;
 import lombok.Data;
 
 import java.util.List;
@@ -16,11 +14,12 @@ import java.util.List;
 public class MachineVO {
     private String machineId;
     private String ipv4;
+    private String lastCheckedTime;
 
-    public static MachineVO from(MachineInfo machineInfo) {
+    public static MachineVO from(MachineInfo machineInfo, String lastCheckedTime) {
         MachineVO vo = new MachineVO();
         vo.machineId = machineInfo.getMachineId();
-
+        vo.lastCheckedTime = lastCheckedTime;
         List<NetworkInfo> list = machineInfo.getNetworkInfo();
         if (!list.isEmpty()) {
             vo.ipv4 = list.get(0).getIpv4();

+ 18 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/amqp/MachineDispatcher.java

@@ -1,6 +1,7 @@
 package cn.reghao.autodop.dmaster.utils.amqp;
 
 import cn.reghao.autodop.common.dagent.machine.api.MachineOps;
+import cn.reghao.autodop.common.utils.DatetimeConverter;
 import cn.reghao.autodop.common.utils.serializer.JsonConverter;
 import cn.reghao.autodop.dmaster.cluster.entity.MachineHeartbeat;
 import cn.reghao.autodop.dmaster.cluster.entity.MachineLog;
@@ -10,6 +11,9 @@ import cn.reghao.autodop.dmaster.cluster.service.crud.MachineLogCrudService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 /**
  * @author reghao
  * @date 2020-12-30 10:26:47
@@ -19,11 +23,12 @@ import org.springframework.stereotype.Component;
 public class MachineDispatcher {
     private MachineCrudService machineCrudService;
     private MachineLogCrudService machineLogCrudService;
+    private Map<String, String> machineStatus;
 
-    public MachineDispatcher(MachineCrudService machineCrudService,
-                             MachineLogCrudService machineLogCrudService) {
+    public MachineDispatcher(MachineCrudService machineCrudService, MachineLogCrudService machineLogCrudService) {
         this.machineCrudService = machineCrudService;
         this.machineLogCrudService = machineLogCrudService;
+        this.machineStatus = new ConcurrentHashMap<>();
     }
 
     public void dispatch(String ops, String payload) {
@@ -38,6 +43,7 @@ public class MachineDispatcher {
                     // TODO 做一些逻辑处理,判断内存和磁盘的使用量,然后存入数据库,更新数据
                     // TODO 存到 MongoDB
                     MachineHeartbeat machineHeartbeat = (MachineHeartbeat) JsonConverter.jsonToObject(payload, MachineHeartbeat.class);
+                    setMachineStatus(machineHeartbeat);
                     log.info("来自机器的心跳...");
                     break;
                 case machineLogOps:
@@ -51,4 +57,14 @@ public class MachineDispatcher {
             e.printStackTrace();
         }
     }
+
+    private void setMachineStatus(MachineHeartbeat heartbeat) {
+        String machineId = heartbeat.getMachineId();
+        String heartbeatTime = DatetimeConverter.msTimestampFormat(System.currentTimeMillis());
+        machineStatus.put(machineId, heartbeatTime);
+    }
+
+    public Map<String, String> getMachineStatus() {
+        return this.machineStatus;
+    }
 }