Selaa lähdekoodia

更新 /home 页面的节点状态统计

reghao 1 vuosi sitten
vanhempi
commit
edefc4298b

+ 10 - 3
mgr/src/main/java/cn/reghao/devops/mgr/admin/account/controller/HomeController.java → mgr/src/main/java/cn/reghao/devops/mgr/app/HomeController.java

@@ -1,4 +1,4 @@
-package cn.reghao.devops.mgr.admin.account.controller;
+package cn.reghao.devops.mgr.app;
 
 import cn.reghao.devops.common.util.NotAvailable;
 import cn.reghao.devops.common.version.AppVersion;
@@ -8,6 +8,8 @@ import cn.reghao.devops.mgr.admin.account.model.po.User;
 import cn.reghao.devops.mgr.admin.account.service.HomeService;
 import cn.reghao.devops.mgr.admin.account.service.UserContext;
 import cn.reghao.devops.mgr.admin.sys.service.SysMessageService;
+import cn.reghao.devops.mgr.mgr.machine.db.query.MachineQuery;
+import cn.reghao.devops.mgr.mgr.machine.model.vo.MachineStat;
 import cn.reghao.jutil.jdk.jvm.JVM;
 import cn.reghao.jutil.jdk.jvm.model.JvmInfo;
 import cn.reghao.jutil.jdk.machine.id.MachineIdLinux;
@@ -34,15 +36,18 @@ public class HomeController {
     private final AppVersion appVersion;
     private final HomeService homeService;
     private final SysMessageService sysMessageService;
+    private final MachineQuery machineQuery;
 
-    public HomeController(HomeService homeService, SysMessageService sysMessageService) {
+    public HomeController(HomeService homeService, SysMessageService sysMessageService,
+                          MachineQuery machineQuery) {
         this.jvm = new JVM();
         this.machineId = new MachineIdLinux();
         this.appVersion = AppVersion.getVersion();
         this.homeService = homeService;
         this.sysMessageService = sysMessageService;
+        this.machineQuery = machineQuery;
     }
-    
+
     @GetMapping("/login")
     public String toLogin(Model model) {
         model.addAttribute("isCaptcha", false);
@@ -84,6 +89,7 @@ public class HomeController {
         int pid = jvmInfo.getJvmPid();
         String startAt = jvmInfo.getJvmStartTime();
         String ipv4 = machineId.ipv4();
+        List<MachineStat> list = machineQuery.getMachineStats();
 
         model.addAttribute("mgrVersion", commitId);
         model.addAttribute("hostAddr", ipv4);
@@ -92,6 +98,7 @@ public class HomeController {
         model.addAttribute("pid", pid);
         model.addAttribute("startAt", startAt);
         //model.addAttribute("jvmStat", jvmStat);
+        model.addAttribute("list", list);
 
         String template = "/home/index";
         template = "/home/index1";

+ 2 - 0
mgr/src/main/java/cn/reghao/devops/mgr/mgr/machine/db/query/MachineQuery.java

@@ -5,6 +5,7 @@ import cn.reghao.devops.mgr.mgr.machine.model.po.MachineHost;
 import cn.reghao.devops.mgr.mgr.machine.model.po.MachineInfo;
 import cn.reghao.devops.mgr.mgr.machine.model.vo.MachineHostVO;
 import cn.reghao.devops.mgr.mgr.machine.model.vo.MachineSshAuth;
+import cn.reghao.devops.mgr.mgr.machine.model.vo.MachineStat;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
@@ -16,6 +17,7 @@ import java.util.List;
  */
 public interface MachineQuery {
     Page<MachineHostVO> getMachineHostByPage(String env, Pageable pageable);
+    List<MachineStat> getMachineStats();
     MachineHost getMachineHost(String machineId);
     MachineSshAuth getMachineSshAuth(String machineId);
     MachineInfo getMachineInfo(String machineId);

+ 20 - 9
mgr/src/main/java/cn/reghao/devops/mgr/mgr/machine/db/query/impl/MachineQueryImpl.java

@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
 import javax.persistence.criteria.*;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -57,16 +58,26 @@ public class MachineQueryImpl implements MachineQuery {
         });
     }
 
-    public void getMachineStats() {
-        List<MachineStat> list = machineHostRepository.findAll().stream().map(machineHost -> {
-            String machineId = machineHost.getMachineId();
-            String machineIpv4 = machineHost.getMachineIpv4();
-            String env = machineHost.getEnv();
+    @Override
+    public List<MachineStat> getMachineStats() {
+        PageRequest pageRequest = PageRequest.of(0, 100);
+        Page<MachineHost> page = machineHostRepository.findAll(pageRequest);
+        Map<String, List<MachineHost>> map = page.stream().collect(Collectors.groupingBy(MachineHost::getEnv));
+
+        List<MachineStat> stats = new ArrayList<>();
+        map.forEach((env, list) -> {
+            int total = list.size();
+            int onlineCount = (int)list.stream()
+                    .filter(machineHost -> machineHost.getMachineInfo().getStat() == NodeStatus.Online.getCode())
+                    .count();
+            int offlineCount = (int) list.stream()
+                    .filter(machineHost -> machineHost.getMachineInfo().getStat() != NodeStatus.Online.getCode())
+                    .count();
+            MachineStat machineStat = new MachineStat(env, total, onlineCount, offlineCount);
+            stats.add(machineStat);
+        });
 
-            MachineInfo machineInfo = machineHost.getMachineInfo();
-            String status = getMachineStat(machineInfo);
-            return new MachineStat(machineId, machineIpv4, env, status);
-        }).collect(Collectors.toList());
+        return stats;
     }
 
     private String getMachineStat(MachineInfo machineInfo) {

+ 3 - 3
mgr/src/main/java/cn/reghao/devops/mgr/mgr/machine/model/vo/MachineStat.java

@@ -10,8 +10,8 @@ import lombok.Getter;
 @AllArgsConstructor
 @Getter
 public class MachineStat {
-    private String machineId;
-    private String machineIpv4;
     private String env;
-    private String stat;
+    private int total;
+    private int onlineCount;
+    private int offlineCount;
 }

+ 9 - 46
mgr/src/main/resources/templates/home/index1.html

@@ -96,55 +96,18 @@
                 <table class="layui-table timo-detail-table">
                     <thead>
                     <tr>
-                        <th data-field="status">环境</th>
-                        <th data-field="status">状态</th>
-                        <th data-field="total">数量</th>
+                        <th data-field="env">环境</th>
+                        <th data-field="total">总数</th>
+                        <th data-field="onlineCount">在线</th>
+                        <th data-field="offlineCount">离线</th>
                     </tr>
                     </thead>
                     <tbody>
-                    <tr>
-                        <td>
-                            <span>prod</span>
-                        </td>
-                        <td>
-                            <div class="avatar active"></div>
-                        </td>
-                        <td>
-                            <span>7</span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span>uat</span>
-                        </td>
-                        <td>
-                            <div class="avatar inactive"></div>
-                        </td>
-                        <td>
-                            <span>1</span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span>test</span>
-                        </td>
-                        <td>
-                            <div class="avatar inactive"></div>
-                        </td>
-                        <td>
-                            <span>9</span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span>dev</span>
-                        </td>
-                        <td>
-                            <div class="avatar inactive"></div>
-                        </td>
-                        <td>
-                            <span>2</span>
-                        </td>
+                    <tr th:each="item:${list}">
+                        <td th:text="${item.env}">环境</td>
+                        <td th:text="${item.total}">总数</td>
+                        <td style="color: #009688" th:text="${item.onlineCount}">在线</td>
+                        <td style="color: #ff0000" th:text="${item.offlineCount}">离线</td>
                     </tr>
                     </tbody>
                 </table>