ソースを参照

调整机器模块 web 页面接口

reghao 4 年 前
コミット
9b5d8149e7
47 ファイル変更402 行追加409 行削除
  1. 6 0
      common/pom.xml
  2. 3 6
      common/src/main/java/cn/reghao/autodop/common/docker/Docker.java
  3. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/DockerAuth.java
  4. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/DockerException.java
  5. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/DockerHeader.java
  6. 4 4
      common/src/main/java/cn/reghao/autodop/common/docker/api/ContainerOps.java
  7. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/api/ImageOps.java
  8. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/Config.java
  9. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/Data.java
  10. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/ExposedPorts.java
  11. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/GraphDriver.java
  12. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/Health.java
  13. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/Healthcheck.java
  14. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/HostConfig.java
  15. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/Labels.java
  16. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/Log.java
  17. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/NetworkingConfig.java
  18. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/RestartPolicy.java
  19. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/State.java
  20. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/Volumes.java
  21. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/result/Bridge.java
  22. 2 2
      common/src/main/java/cn/reghao/autodop/common/docker/po/result/Container.java
  23. 4 4
      common/src/main/java/cn/reghao/autodop/common/docker/po/result/ContainerInfo.java
  24. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/result/Mount.java
  25. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/result/NetworkSettings.java
  26. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/result/Networks.java
  27. 1 1
      common/src/main/java/cn/reghao/autodop/common/docker/po/result/Port.java
  28. 1 0
      common/src/main/java/cn/reghao/autodop/common/docker/unixdomain/HttpClient.java
  29. 38 0
      common/src/main/test/UnixDomainTest.java
  30. 1 1
      dagent/src/main/java/cn/reghao/autodop/dagent/app/AppService.java
  31. 5 5
      dagent/src/main/java/cn/reghao/autodop/dagent/app/DockerAppServiceImpl.java
  32. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/controller/MachineHostController.java
  33. 0 245
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/controller/MachinePageController.java
  34. 135 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/controller/page/MachineHostPageController.java
  35. 43 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/controller/page/MachineStatPageController.java
  36. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/vo/MachineHostVO.java
  37. 22 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/service/page/MachineHostPage.java
  38. 78 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/service/page/MachineHostPageImpl.java
  39. 29 0
      dmaster/src/main/resources/templates/error.html
  40. 0 0
      dmaster/src/main/resources/templates/machine/host/detail.html
  41. 0 0
      dmaster/src/main/resources/templates/machine/host/edit.html
  42. 5 5
      dmaster/src/main/resources/templates/machine/host/index.html
  43. 0 0
      dmaster/src/main/resources/templates/machine/host/machinenotify.html
  44. 0 0
      dmaster/src/main/resources/templates/machine/host/sshauth.html
  45. 0 0
      dmaster/src/main/resources/templates/machine/host/webssh.html
  46. 0 111
      dmaster/src/main/resources/templates/machine/node.html
  47. 0 0
      dmaster/src/main/resources/templates/machine/stat/status.html

+ 6 - 0
common/pom.xml

@@ -18,6 +18,12 @@
             <version>4.1.36.Final</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.github.jnr</groupId>
+            <artifactId>jnr-unixsocket</artifactId>
+            <version>0.38.8</version>
+        </dependency>
+
         <dependency>
             <groupId>com.google.code.gson</groupId>
             <artifactId>gson</artifactId>

+ 3 - 6
common/src/main/java/cn/reghao/autodop/common/docker/Docker.java

@@ -4,12 +4,9 @@ import cn.reghao.autodop.common.dagent.app.log.LogLevel;
 import cn.reghao.autodop.common.docker.api.ContainerOps;
 import cn.reghao.autodop.common.docker.api.DockerApi;
 import cn.reghao.autodop.common.docker.api.ImageOps;
-import cn.reghao.autodop.common.docker.exception.DockerException;
-import cn.reghao.autodop.common.docker.pojo.*;
-import cn.reghao.autodop.common.docker.pojo.result.Container;
-import cn.reghao.autodop.common.docker.pojo.result.ContainerInfo;
-import cn.reghao.autodop.common.docker.unixdomain.DockerAuth;
-import cn.reghao.autodop.common.docker.unixdomain.DockerHeader;
+import cn.reghao.autodop.common.docker.po.*;
+import cn.reghao.autodop.common.docker.po.result.Container;
+import cn.reghao.autodop.common.docker.po.result.ContainerInfo;
 import cn.reghao.autodop.common.docker.unixdomain.UnixSocketClient;
 import cn.reghao.autodop.common.docker.unixdomain.HttpClient;
 import cn.reghao.autodop.common.util.ExceptionUtil;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/unixdomain/DockerAuth.java → common/src/main/java/cn/reghao/autodop/common/docker/DockerAuth.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.unixdomain;
+package cn.reghao.autodop.common.docker;
 
 import lombok.Data;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/exception/DockerException.java → common/src/main/java/cn/reghao/autodop/common/docker/DockerException.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.exception;
+package cn.reghao.autodop.common.docker;
 
 /**
  * @author reghao

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/unixdomain/DockerHeader.java → common/src/main/java/cn/reghao/autodop/common/docker/DockerHeader.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.unixdomain;
+package cn.reghao.autodop.common.docker;
 
 import lombok.AllArgsConstructor;
 import lombok.Data;

+ 4 - 4
common/src/main/java/cn/reghao/autodop/common/docker/api/ContainerOps.java

@@ -1,9 +1,9 @@
 package cn.reghao.autodop.common.docker.api;
 
-import cn.reghao.autodop.common.docker.pojo.Config;
-import cn.reghao.autodop.common.docker.pojo.result.Container;
-import cn.reghao.autodop.common.docker.exception.DockerException;
-import cn.reghao.autodop.common.docker.pojo.result.ContainerInfo;
+import cn.reghao.autodop.common.docker.po.Config;
+import cn.reghao.autodop.common.docker.po.result.Container;
+import cn.reghao.autodop.common.docker.DockerException;
+import cn.reghao.autodop.common.docker.po.result.ContainerInfo;
 
 import java.util.List;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/api/ImageOps.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.common.docker.api;
 
-import cn.reghao.autodop.common.docker.exception.DockerException;
+import cn.reghao.autodop.common.docker.DockerException;
 
 /**
  * docker 镜像操作接口

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/Config.java → common/src/main/java/cn/reghao/autodop/common/docker/po/Config.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/Data.java → common/src/main/java/cn/reghao/autodop/common/docker/po/Data.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Getter;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/ExposedPorts.java → common/src/main/java/cn/reghao/autodop/common/docker/po/ExposedPorts.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import lombok.Data;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/GraphDriver.java → common/src/main/java/cn/reghao/autodop/common/docker/po/GraphDriver.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Getter;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/Health.java → common/src/main/java/cn/reghao/autodop/common/docker/po/Health.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/Healthcheck.java → common/src/main/java/cn/reghao/autodop/common/docker/po/Healthcheck.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/HostConfig.java → common/src/main/java/cn/reghao/autodop/common/docker/po/HostConfig.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.AllArgsConstructor;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/Labels.java → common/src/main/java/cn/reghao/autodop/common/docker/po/Labels.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import lombok.Data;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/Log.java → common/src/main/java/cn/reghao/autodop/common/docker/po/Log.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/NetworkingConfig.java → common/src/main/java/cn/reghao/autodop/common/docker/po/NetworkingConfig.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import lombok.Data;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/RestartPolicy.java → common/src/main/java/cn/reghao/autodop/common/docker/po/RestartPolicy.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.AllArgsConstructor;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/State.java → common/src/main/java/cn/reghao/autodop/common/docker/po/State.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/Volumes.java → common/src/main/java/cn/reghao/autodop/common/docker/po/Volumes.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo;
+package cn.reghao.autodop.common.docker.po;
 
 import lombok.Data;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/result/Bridge.java → common/src/main/java/cn/reghao/autodop/common/docker/po/result/Bridge.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo.result;
+package cn.reghao.autodop.common.docker.po.result;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;

+ 2 - 2
common/src/main/java/cn/reghao/autodop/common/docker/pojo/result/Container.java → common/src/main/java/cn/reghao/autodop/common/docker/po/result/Container.java

@@ -1,6 +1,6 @@
-package cn.reghao.autodop.common.docker.pojo.result;
+package cn.reghao.autodop.common.docker.po.result;
 
-import cn.reghao.autodop.common.docker.pojo.*;
+import cn.reghao.autodop.common.docker.po.*;
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
 

+ 4 - 4
common/src/main/java/cn/reghao/autodop/common/docker/pojo/result/ContainerInfo.java → common/src/main/java/cn/reghao/autodop/common/docker/po/result/ContainerInfo.java

@@ -1,8 +1,8 @@
-package cn.reghao.autodop.common.docker.pojo.result;
+package cn.reghao.autodop.common.docker.po.result;
 
-import cn.reghao.autodop.common.docker.pojo.GraphDriver;
-import cn.reghao.autodop.common.docker.pojo.HostConfig;
-import cn.reghao.autodop.common.docker.pojo.State;
+import cn.reghao.autodop.common.docker.po.GraphDriver;
+import cn.reghao.autodop.common.docker.po.HostConfig;
+import cn.reghao.autodop.common.docker.po.State;
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/result/Mount.java → common/src/main/java/cn/reghao/autodop/common/docker/po/result/Mount.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo.result;
+package cn.reghao.autodop.common.docker.po.result;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/result/NetworkSettings.java → common/src/main/java/cn/reghao/autodop/common/docker/po/result/NetworkSettings.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo.result;
+package cn.reghao.autodop.common.docker.po.result;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/result/Networks.java → common/src/main/java/cn/reghao/autodop/common/docker/po/result/Networks.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo.result;
+package cn.reghao.autodop.common.docker.po.result;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/docker/pojo/result/Port.java → common/src/main/java/cn/reghao/autodop/common/docker/po/result/Port.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.docker.pojo.result;
+package cn.reghao.autodop.common.docker.po.result;
 
 import com.google.gson.annotations.SerializedName;
 import lombok.Data;

+ 1 - 0
common/src/main/java/cn/reghao/autodop/common/docker/unixdomain/HttpClient.java

@@ -1,5 +1,6 @@
 package cn.reghao.autodop.common.docker.unixdomain;
 
+import cn.reghao.autodop.common.docker.DockerHeader;
 import cn.reghao.autodop.common.util.ExceptionUtil;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;

+ 38 - 0
common/src/main/test/UnixDomainTest.java

@@ -0,0 +1,38 @@
+import jnr.unixsocket.UnixSocket;
+import jnr.unixsocket.UnixSocketAddress;
+import jnr.unixsocket.UnixSocketChannel;
+
+import java.io.*;
+
+/**
+ * @author reghao
+ * @date 2021-10-17 15:33:32
+ */
+public class UnixDomainTest {
+    public static void main(String[] args) throws IOException {
+        // 建立 Unix Socket 连接
+        File sockFile = new File("/var/run/docker.sock");
+        UnixSocketAddress address = new UnixSocketAddress(sockFile);
+        UnixSocketChannel channel = UnixSocketChannel.open(address);
+        UnixSocket unixSocket = new UnixSocket(channel);
+
+        // 调用 Docker API
+        PrintWriter w = new PrintWriter(unixSocket.getOutputStream());
+        w.println("GET /v1.24/containers/json HTTP/1.1");
+        w.println("Host: http");
+        w.println("Accept: */*");
+        w.println("");
+        w.flush();
+        // 关闭 Output,否则会导致下面的 read 操作一直阻塞
+        unixSocket.shutdownOutput();
+
+        // 获取返回结果
+        System.out.println("---- Docker Response ----");
+        BufferedReader br = new BufferedReader(new InputStreamReader(unixSocket.getInputStream()));
+        String line;
+        while ((line = br.readLine()) != null){
+            System.out.println(line);
+        }
+        unixSocket.close();
+    }
+}

+ 1 - 1
dagent/src/main/java/cn/reghao/autodop/dagent/app/AppService.java

@@ -4,7 +4,7 @@ import cn.reghao.autodop.common.msg.rpc.dto.app.AppStatus;
 import cn.reghao.autodop.common.msg.rpc.dto.app.DeployParam;
 import cn.reghao.autodop.common.dagent.app.log.AppLogArgs;
 import cn.reghao.autodop.common.dagent.app.log.LogFile;
-import cn.reghao.autodop.common.docker.exception.DockerException;
+import cn.reghao.autodop.common.docker.DockerException;
 
 import java.util.List;
 

+ 5 - 5
dagent/src/main/java/cn/reghao/autodop/dagent/app/DockerAppServiceImpl.java

@@ -8,11 +8,11 @@ import cn.reghao.autodop.common.dagent.app.log.LogConfig;
 import cn.reghao.autodop.common.dagent.app.log.LogFile;
 import cn.reghao.autodop.common.dagent.app.log.LogType;
 import cn.reghao.autodop.common.docker.Docker;
-import cn.reghao.autodop.common.docker.exception.DockerException;
-import cn.reghao.autodop.common.docker.pojo.Config;
-import cn.reghao.autodop.common.docker.pojo.HostConfig;
-import cn.reghao.autodop.common.docker.pojo.State;
-import cn.reghao.autodop.common.docker.pojo.result.ContainerInfo;
+import cn.reghao.autodop.common.docker.DockerException;
+import cn.reghao.autodop.common.docker.po.Config;
+import cn.reghao.autodop.common.docker.po.HostConfig;
+import cn.reghao.autodop.common.docker.po.State;
+import cn.reghao.autodop.common.docker.po.result.ContainerInfo;
 import cn.reghao.autodop.common.util.ExceptionUtil;
 import cn.reghao.jdkutil.converter.DateTimeConverter;
 import cn.reghao.jdkutil.serializer.JsonConverter;

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/controller/MachineController.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/controller/MachineHostController.java

@@ -21,11 +21,11 @@ import java.util.List;
 @Slf4j
 @Api(tags = "机器接口")
 @RestController
-@RequestMapping("/api/machine")
-public class MachineController {
+@RequestMapping("/api/machine/host")
+public class MachineHostController {
     private final MachineService machineService;
 
-    public MachineController(MachineService machineService) {
+    public MachineHostController(MachineService machineService) {
         this.machineService = machineService;
     }
 

+ 0 - 245
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/controller/MachinePageController.java

@@ -1,245 +0,0 @@
-package cn.reghao.autodop.dmaster.machine.controller;
-
-import cn.reghao.autodop.dmaster.app.model.constant.EnvList;
-import cn.reghao.autodop.dmaster.app.model.vo.KeyValue;
-import cn.reghao.autodop.dmaster.machine.db.crud.MachineInfoCrud;
-import cn.reghao.autodop.dmaster.machine.db.query.MachineHostQuery;
-import cn.reghao.autodop.dmaster.machine.db.query.MachineInfoQuery;
-import cn.reghao.autodop.dmaster.machine.db.query.MachineStatQuery;
-import cn.reghao.autodop.dmaster.machine.model.SshConnData;
-import cn.reghao.autodop.dmaster.machine.model.po.MachineHost;
-import cn.reghao.autodop.dmaster.machine.model.po.MachineStat;
-import cn.reghao.autodop.dmaster.machine.model.po.SshAuth;
-import cn.reghao.autodop.dmaster.machine.model.po.MachineInfo;
-import cn.reghao.autodop.dmaster.machine.service.ssh.Keys;
-import cn.reghao.autodop.dmaster.notification.model.po.NotifyGroup;
-import cn.reghao.autodop.dmaster.notification.db.repository.NotifyGroupRepository;
-import cn.reghao.autodop.dmaster.util.db.PageList;
-import cn.reghao.autodop.dmaster.util.db.PageSort;
-import cn.reghao.jdkutil.converter.DateTimeConverter;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.time.LocalDateTime;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2019-08-30 18:49:15
- */
-@Slf4j
-@Api(tags = "机器模块页面")
-@Controller
-@RequestMapping("/machine")
-public class MachinePageController {
-    private MachineInfoQuery infoQuery;
-    private MachineInfoCrud infoCrud;
-    private MachineHostQuery hostQuery;
-    private MachineStatQuery statQuery;
-    private NotifyGroupRepository receiverRepository;
-
-    public MachinePageController(MachineInfoCrud infoCrud, MachineInfoQuery infoQuery,
-                                 MachineHostQuery hostQuery, MachineStatQuery statQuery,
-                                 NotifyGroupRepository receiverRepository) {
-        this.infoCrud = infoCrud;
-        this.infoQuery = infoQuery;
-        this.hostQuery = hostQuery;
-        this.statQuery = statQuery;
-        this.receiverRepository = receiverRepository;
-    }
-
-    @ApiOperation(value = "机器节点页面")
-    @GetMapping("/host")
-    public String hostPage(@RequestParam(value = "env", required = false) String env,
-                           @RequestParam(value = "machineIpv4", required = false) String machineIpv4,
-                           Model model) {
-        if (env == null) {
-            env = EnvList.test.name();
-        }
-
-        if (machineIpv4 != null) {
-            searchByMachineIpv4(env, machineIpv4, model);
-            return "/machine/host";
-        }
-
-        PageRequest pageRequest = PageSort.pageRequest();
-        Page<MachineHost> page = hostQuery.findByEnv(env, pageRequest);
-        PageList<MachineHost> pageList = PageList.pageList(page);
-
-        model.addAttribute("env", env);
-        model.addAttribute("page", page);
-        model.addAttribute("list", pageList.getList());
-        return "/machine/host";
-    }
-
-    private void searchByMachineIpv4(String env, String machineIpv4, Model model) {
-        MachineHost machineHost = hostQuery.findByMachineIpv4(machineIpv4);
-        List<MachineHost> list = new ArrayList<>();
-        list.add(machineHost);
-        Page<MachineHost> page = new PageImpl<>(list);
-        PageList<MachineHost> pageList = PageList.pageList(page);
-
-        model.addAttribute("env", env);
-        model.addAttribute("page", page);
-        model.addAttribute("list", pageList.getList());
-    }
-
-    @ApiOperation(value = "机器所属环境设置页面")
-    @GetMapping("/env/{machineId}")
-    public String hostEditPage(@PathVariable("machineId") String machineId, Model model) {
-        List<KeyValue> envs = new ArrayList<>();
-        for (EnvList envList : EnvList.values()) {
-            envs.add(new KeyValue(envList.name(), envList.name()));
-        }
-
-        MachineHost machineHost = hostQuery.findByMachineId(machineId);
-        model.addAttribute("machineId", machineId);
-        model.addAttribute("environments", envs);
-        model.addAttribute("env", machineHost.getEnv());
-        return "/machine/edit";
-    }
-
-    @ApiOperation(value = "SSH 认证设置页面")
-    @GetMapping("/sshauth/{machineId}")
-    public String sshAuthPage(@PathVariable("machineId") String machineId, Model model) {
-        MachineHost machineHost = hostQuery.findByMachineId(machineId);
-        SshAuth sshAuth = machineHost.getSshAuth();
-
-        model.addAttribute("machineId", machineId);
-        model.addAttribute("sshAuth", sshAuth);
-        return "/machine/sshauth";
-    }
-
-    @ApiOperation(value = "机器通知设置页面")
-    @GetMapping("/notify/{machineId}")
-    public String machineNotifyPage(@PathVariable("machineId") String machineId, Model model) {
-        MachineHost machineHost = hostQuery.findByMachineId(machineId);
-        Set<NotifyGroup> currentSet = new HashSet<>(machineHost.getNotifyGroups());
-        List<NotifyGroup> list = receiverRepository.findAll();
-
-        model.addAttribute("machineId", machineId);
-        model.addAttribute("currentSet", currentSet);
-        model.addAttribute("list", list);
-        return "/machine/machinenotify";
-    }
-
-    @ApiOperation(value = "SSH 控制台页面")
-    @GetMapping("/webssh/{machineId}")
-    public String webSshPage(@PathVariable("machineId") String machineId, Model model) {
-        MachineHost machineHost = hostQuery.findByMachineId(machineId);
-        String machineIpv4 = machineHost.getMachineIpv4();
-        SshAuth sshAuth = machineHost.getSshAuth();
-        if (sshAuth == null) {
-            return "先设置 SSH 认证";
-        }
-
-        SshConnData sshConnData = new SshConnData();
-        sshConnData.setOps(Keys.OPS_CONNECT);
-        sshConnData.setHost(machineIpv4);
-        sshConnData.setPort(sshAuth.getPort());
-        sshConnData.setUsername(sshAuth.getUsername());
-        sshConnData.setPassword(sshAuth.getPassword());
-
-        model.addAttribute("sshConnData", sshConnData);
-        return "/machine/webssh";
-    }
-
-    @ApiOperation(value = "机器信息详情页面")
-    @GetMapping("/detail/{machineId}")
-    public String hostDetailPage(@PathVariable("machineId") String machineId, Model model) {
-        MachineInfo machineInfo = infoQuery.findByMachineId(machineId);
-        model.addAttribute("machine", machineInfo);
-        return "/machine/detail";
-    }
-
-    @ApiOperation(value = "机器状态列表页面")
-    @GetMapping("/status")
-    public String statusPage(@RequestParam(value = "env", required = false) String env,
-                             @RequestParam(value = "machineIpv4", required = false) String machineIpv4,
-                             Model model) {
-        if (env == null) {
-            env = EnvList.test.name();
-        }
-
-        if (machineIpv4 != null) {
-            searchByMachineIpv4(env, machineIpv4, model);
-            return "/machine/status";
-        }
-
-        PageRequest pageRequest = PageSort.pageRequest();
-        Page<MachineHost> page = hostQuery.findByEnv(env, pageRequest);
-        PageList<MachineHost> pageList = PageList.pageList(page);
-
-        model.addAttribute("env", env);
-        model.addAttribute("page", page);
-        model.addAttribute("list", pageList.getList());
-        return "/machine/status";
-    }
-
-    @ApiOperation(value = "系统负载页面")
-    @GetMapping("/status/sys/{machineId}")
-    public String hostStatusPage(@PathVariable("machineId") String machineId, Model model) {
-        /*MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
-        LocalDateTime statTime = DateTimeConverter.localDateTime(machineStat.getTimestamp());
-
-        model.addAttribute("statTime", DateTimeConverter.format(statTime));
-        model.addAttribute("sysload", machineStat.getOsStat());*/
-        return "/machine/stat/sysload";
-    }
-
-    @ApiOperation(value = "网络状态页面")
-    @GetMapping("/status/network/{machineId}")
-    public String networkStatusPage(@PathVariable("machineId") String machineId, Model model) {
-        /*MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
-        LocalDateTime statTime = DateTimeConverter.localDateTime(machineStat.getTimestamp());
-
-        model.addAttribute("statTime", DateTimeConverter.format(statTime));
-        model.addAttribute("tcpConnNum", machineStat.getTcpConnNum());
-        model.addAttribute("networkStat", machineStat.getNetworkStat());*/
-        return "/machine/stat/network";
-    }
-
-    @ApiOperation(value = "CPU 使用率页面")
-    @GetMapping("/status/cpu/{machineId}")
-    public String cpuUsagePage(@PathVariable("machineId") String machineId, Model model) {
-        /*MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
-        LocalDateTime statTime = DateTimeConverter.localDateTime(machineStat.getTimestamp());
-
-        model.addAttribute("statTime", DateTimeConverter.format(statTime));
-        model.addAttribute("cpuUsage", machineStat.getCpuStat());*/
-        return "/machine/stat/cpu";
-    }
-
-    @ApiOperation(value = "内存详情页面")
-    @GetMapping("/status/mem/{machineId}")
-    public String memUsagePage(@PathVariable("machineId") String machineId, Model model) {
-        /*MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
-        LocalDateTime statTime = DateTimeConverter.localDateTime(machineStat.getTimestamp());
-
-        model.addAttribute("statTime", DateTimeConverter.format(statTime));
-        model.addAttribute("memoryUsage", machineStat.getMemoryUsage());*/
-        return "/machine/stat/mem";
-    }
-
-    @ApiOperation(value = "磁盘详情页面")
-    @GetMapping("/status/disk/{machineId}")
-    public String diskUsagePage(@PathVariable("machineId") String machineId, Model model) {
-        /*MachineStat machineStat = statQuery.queryByMachineId(machineId, 1).get(0);
-        LocalDateTime statTime = DateTimeConverter.localDateTime(machineStat.getTimestamp());
-
-        model.addAttribute("statTime", DateTimeConverter.format(statTime));
-        model.addAttribute("diskUsages", machineStat.getDiskUsages());*/
-        return "/machine/stat/disk";
-    }
-}

+ 135 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/controller/page/MachineHostPageController.java

@@ -0,0 +1,135 @@
+package cn.reghao.autodop.dmaster.machine.controller.page;
+
+import cn.reghao.autodop.dmaster.app.model.constant.EnvList;
+import cn.reghao.autodop.dmaster.app.model.vo.KeyValue;
+import cn.reghao.autodop.dmaster.machine.model.SshConnData;
+import cn.reghao.autodop.dmaster.machine.model.po.MachineHost;
+import cn.reghao.autodop.dmaster.machine.model.po.SshAuth;
+import cn.reghao.autodop.dmaster.machine.model.po.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.model.vo.MachineHostVO;
+import cn.reghao.autodop.dmaster.machine.service.page.MachineHostPage;
+import cn.reghao.autodop.dmaster.machine.service.ssh.Keys;
+import cn.reghao.autodop.dmaster.util.db.PageList;
+import cn.reghao.autodop.dmaster.util.db.PageSort;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.*;
+
+/**
+ * @author reghao
+ * @date 2019-08-30 18:49:15
+ */
+@Slf4j
+@Api(tags = "机器节点页面")
+@Controller
+@RequestMapping("/machine/host")
+public class MachineHostPageController {
+    private final MachineHostPage machineHostPage;
+
+    public MachineHostPageController(MachineHostPage machineHostPage) {
+        this.machineHostPage = machineHostPage;
+    }
+
+    @ApiOperation(value = "机器节点页面")
+    @GetMapping
+    public String hostPage(@RequestParam(value = "env", required = false) String env,
+                           @RequestParam(value = "machineIpv4", required = false) String machineIpv4,
+                           Model model) {
+        if (env == null) {
+            env = EnvList.test.name();
+        }
+
+        Page<MachineHostVO> page;
+        if (machineIpv4 != null) {
+            page = machineHostPage.searchResultPage(machineIpv4);
+        } else {
+            PageRequest pageRequest = PageSort.pageRequest();
+            page = machineHostPage.indexPage(env, pageRequest);
+        }
+
+        PageList<MachineHostVO> pageList = PageList.pageList(page);
+        model.addAttribute("env", env);
+        model.addAttribute("page", page);
+        model.addAttribute("list", pageList.getList());
+        return "/machine/host/index";
+    }
+
+    @ApiOperation(value = "机器所属环境设置页面")
+    @GetMapping("/env/{machineId}")
+    public String hostEditPage(@PathVariable("machineId") String machineId, Model model) {
+        List<KeyValue> envs = new ArrayList<>();
+        for (EnvList envList : EnvList.values()) {
+            envs.add(new KeyValue(envList.name(), envList.name()));
+        }
+
+        String env = machineHostPage.setEnvPage(machineId);
+        model.addAttribute("machineId", machineId);
+        model.addAttribute("environments", envs);
+        model.addAttribute("env", env);
+        return "/machine/host/edit";
+    }
+
+    @ApiOperation(value = "SSH 认证设置页面")
+    @GetMapping("/sshauth/{machineId}")
+    public String sshAuthPage(@PathVariable("machineId") String machineId, Model model) {
+        SshAuth sshAuth = machineHostPage.setSshAuthPage(machineId);
+
+        model.addAttribute("machineId", machineId);
+        model.addAttribute("sshAuth", sshAuth);
+        return "/machine/host/sshauth";
+    }
+
+    @ApiOperation(value = "机器通知设置页面")
+    @GetMapping("/notify/{machineId}")
+    public String machineNotifyPage(@PathVariable("machineId") String machineId, Model model) {
+        /*MachineHostVO machineHost = hostQuery.findByMachineId(machineId);
+        Set<NotifyGroup> currentSet = new HashSet<>(machineHost.getNotifyGroups());
+        List<NotifyGroup> list = receiverRepository.findAll();
+
+        model.addAttribute("machineId", machineId);
+        model.addAttribute("currentSet", currentSet);
+        model.addAttribute("list", list);*/
+        return "/machine/host/machinenotify";
+    }
+
+    @ApiOperation(value = "SSH 控制台页面")
+    @GetMapping("/webssh/{machineId}")
+    public String webSshPage(@PathVariable("machineId") String machineId, Model model) {
+        MachineHost machineHost = machineHostPage.sshTerminalPage(machineId);
+        SshAuth sshAuth = machineHost.getSshAuth();
+        if (sshAuth == null) {
+            String errMsg = "先设置 SSH 认证";
+            model.addAttribute("errMsg", errMsg);
+            return "/error";
+        }
+
+        String machineIpv4 = machineHost.getMachineIpv4();
+        SshConnData sshConnData = new SshConnData();
+        sshConnData.setOps(Keys.OPS_CONNECT);
+        sshConnData.setHost(machineIpv4);
+        sshConnData.setPort(sshAuth.getPort());
+        sshConnData.setUsername(sshAuth.getUsername());
+        sshConnData.setPassword(sshAuth.getPassword());
+
+        model.addAttribute("sshConnData", sshConnData);
+        return "/machine/host/webssh";
+    }
+
+    @ApiOperation(value = "机器信息详情页面")
+    @GetMapping("/detail/{machineId}")
+    public String hostDetailPage(@PathVariable("machineId") String machineId, Model model) {
+        MachineInfo machineInfo = machineHostPage.hostDetailPage(machineId);
+        model.addAttribute("machine", machineInfo);
+        return "/machine/host/detail";
+    }
+}

+ 43 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/controller/page/MachineStatPageController.java

@@ -0,0 +1,43 @@
+package cn.reghao.autodop.dmaster.machine.controller.page;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author reghao
+ * @date 2021-10-17 15:03:48
+ */
+@Api(tags = "机器状态页面")
+@Controller
+@RequestMapping("/machine/stat")
+public class MachineStatPageController {
+    @ApiOperation(value = "机器状态列表页面")
+    @GetMapping("/")
+    public String statusPage(@RequestParam(value = "env", required = false) String env,
+                             @RequestParam(value = "machineIpv4", required = false) String machineIpv4,
+                             Model model) {
+        /*if (env == null) {
+            env = EnvList.test.name();
+        }
+
+        if (machineIpv4 != null) {
+            searchByMachineIpv4(env, machineIpv4, model);
+            return "/machine/status";
+        }
+
+        PageRequest pageRequest = PageSort.pageRequest();
+        Page<MachineHost> page = hostQuery.findByEnv(env, pageRequest);
+        PageList<MachineHost> pageList = PageList.pageList(page);
+
+        model.addAttribute("env", env);
+        model.addAttribute("page", page);
+        model.addAttribute("list", pageList.getList());*/
+        return "/machine/status";
+    }
+}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/model/vo/MachineHostVO.java

@@ -22,7 +22,7 @@ public class MachineHostVO {
     public MachineHostVO(MachineHost machineHost) {
         this.machineId = machineHost.getMachineId();
         this.machineIpv4 = machineHost.getMachineIpv4();
-        this.bootTime = DateTimeConverter.format(machineHost.getBootTime());
+        this.bootTime = DateTimeConverter.format(machineHost.getBootTime()*1000);
         this.osArch = machineHost.getOsArch();
         this.osName = machineHost.getOsName();
         this.osVersion = machineHost.getOsVersion();

+ 22 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/service/page/MachineHostPage.java

@@ -0,0 +1,22 @@
+package cn.reghao.autodop.dmaster.machine.service.page;
+
+import cn.reghao.autodop.dmaster.machine.model.po.MachineHost;
+import cn.reghao.autodop.dmaster.machine.model.po.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.model.po.SshAuth;
+import cn.reghao.autodop.dmaster.machine.model.vo.MachineHostVO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+
+/**
+ * @author reghao
+ * @date 2021-10-16 23:15:45
+ */
+public interface MachineHostPage {
+    Page<MachineHostVO> indexPage(String env, PageRequest pageRequest);
+    Page<MachineHostVO> searchResultPage(String machineIpv4);
+    String setEnvPage(String machineId);
+    SshAuth setSshAuthPage(String machineId);
+    void setNotifyPage(String machineId);
+    MachineHost sshTerminalPage(String machineId);
+    MachineInfo hostDetailPage(String machineId);
+}

+ 78 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/service/page/MachineHostPageImpl.java

@@ -0,0 +1,78 @@
+package cn.reghao.autodop.dmaster.machine.service.page;
+
+import cn.reghao.autodop.dmaster.machine.db.crud.MachineHostCrud;
+import cn.reghao.autodop.dmaster.machine.db.query.MachineHostQuery;
+import cn.reghao.autodop.dmaster.machine.db.query.MachineInfoQuery;
+import cn.reghao.autodop.dmaster.machine.model.po.MachineHost;
+import cn.reghao.autodop.dmaster.machine.model.po.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.model.po.SshAuth;
+import cn.reghao.autodop.dmaster.machine.model.vo.MachineHostVO;
+import cn.reghao.autodop.dmaster.notification.db.repository.NotifyGroupRepository;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2021-10-16 23:15:45
+ */
+@Service
+public class MachineHostPageImpl implements MachineHostPage {
+    private MachineHostQuery hostQuery;
+    private MachineHostCrud hostCrud;
+    private MachineInfoQuery infoQuery;
+    private NotifyGroupRepository receiverRepository;
+
+    public MachineHostPageImpl(MachineHostCrud hostCrud, MachineHostQuery hostQuery,
+                               MachineInfoQuery infoQuery, NotifyGroupRepository receiverRepository) {
+        this.hostCrud = hostCrud;
+        this.hostQuery = hostQuery;
+        this.infoQuery = infoQuery;
+        this.receiverRepository = receiverRepository;
+    }
+
+    @Override
+    public Page<MachineHostVO> indexPage(String env, PageRequest pageRequest) {
+        Page<MachineHost> page = hostQuery.findByEnv(env, pageRequest);
+        return page.map(MachineHostVO::new);
+    }
+
+    @Override
+    public Page<MachineHostVO> searchResultPage(String machineIpv4) {
+        MachineHost machineHost = hostQuery.findByMachineIpv4(machineIpv4);
+        List<MachineHostVO> list = new ArrayList<>();
+        if (machineHost != null) {
+            list.add(new MachineHostVO(machineHost));
+        }
+
+        return new PageImpl<>(list);
+    }
+
+    @Override
+    public String setEnvPage(String machineId) {
+        return hostQuery.findByMachineId(machineId).getEnv();
+    }
+
+    @Override
+    public SshAuth setSshAuthPage(String machineId) {
+        return hostQuery.findByMachineId(machineId).getSshAuth();
+    }
+
+    @Override
+    public void setNotifyPage(String machineId) {
+    }
+
+    @Override
+    public MachineHost sshTerminalPage(String machineId) {
+        return hostQuery.findByMachineId(machineId);
+    }
+
+    @Override
+    public MachineInfo hostDetailPage(String machineId) {
+        return infoQuery.findByMachineId(machineId);
+    }
+}

+ 29 - 0
dmaster/src/main/resources/templates/error.html

@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head th:replace="/common/template :: header(~{::title},~{::link},~{::style})">
+    <style>
+        .page-error {
+            display: -webkit-box;
+            display: -ms-flexbox;
+            display: flex;
+            -webkit-box-align: center;
+            -ms-flex-align: center;
+            align-items: center;
+            -webkit-box-pack: center;
+            -ms-flex-pack: center;
+            justify-content: center;
+            -webkit-box-orient: vertical;
+            -webkit-box-direction: normal;
+            -ms-flex-direction: column;
+            flex-direction: column;
+            min-height: calc(100vh - 110px);
+            margin-bottom: 0;
+        }
+    </style>
+</head>
+<body>
+<div class="page-error" style="color: #009688">
+    <div style="font-size: 24px" th:text="${errMsg}"></div>
+</div>
+</body>
+</html>

+ 0 - 0
dmaster/src/main/resources/templates/machine/detail.html → dmaster/src/main/resources/templates/machine/host/detail.html


+ 0 - 0
dmaster/src/main/resources/templates/machine/edit.html → dmaster/src/main/resources/templates/machine/host/edit.html


+ 5 - 5
dmaster/src/main/resources/templates/machine/host.html → dmaster/src/main/resources/templates/machine/host/index.html

@@ -70,20 +70,20 @@
                     <td th:text="${item.osVersion}">系统版本</td>
                     <td>
                         <a class="open-popup" data-title="设置机器所属环境"
-                           th:attr="data-url=@{'/machine/env/'+${item.machineId}}" href="#">设置</a>
+                           th:attr="data-url=@{'/machine/host/env/'+${item.machineId}}" href="#">设置</a>
                     </td>
                     <td>
                         <a class="open-popup" data-title="设置 SSH 帐号"
-                           th:attr="data-url=@{'/machine/sshauth/'+${item.machineId}}" href="#">设置</a>
+                           th:attr="data-url=@{'/machine/host/sshauth/'+${item.machineId}}" href="#">设置</a>
                     </td>
                     <td>
                         <a class="open-popup" data-title="设置通知组"
-                           th:attr="data-url=@{'/machine/notify/'+${item.machineId}}" href="#">设置</a>
+                           th:attr="data-url=@{'/machine/host/notify/'+${item.machineId}}" href="#">设置</a>
                     </td>
                     <td>
-                        <a class="open-popup" data-title="WebTerminal" th:attr="data-url=@{'/machine/webssh/'+${item.machineId}}"
+                        <a class="open-popup" data-title="WebTerminal" th:attr="data-url=@{'/machine/host/webssh/'+${item.machineId}}"
                            href="#">SSH 终端</a>
-                        <a class="open-popup" data-title="机器详细信息" th:attr="data-url=@{'/machine/detail/'+${item.machineId}}"
+                        <a class="open-popup" data-title="机器详细信息" th:attr="data-url=@{'/machine/host/detail/'+${item.machineId}}"
                            data-size="960,480" href="#">详细</a>
                         <a class="ajax-delete" th:attr="data-msg='确定要删除 '+ ${item.machineId} + ' 机器?'"
                            th:href="@{'/api/machine/host/' + ${item.machineId}}">删除</a>

+ 0 - 0
dmaster/src/main/resources/templates/machine/machinenotify.html → dmaster/src/main/resources/templates/machine/host/machinenotify.html


+ 0 - 0
dmaster/src/main/resources/templates/machine/sshauth.html → dmaster/src/main/resources/templates/machine/host/sshauth.html


+ 0 - 0
dmaster/src/main/resources/templates/machine/webssh.html → dmaster/src/main/resources/templates/machine/host/webssh.html


+ 0 - 111
dmaster/src/main/resources/templates/machine/node.html

@@ -1,111 +0,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org"
-      xmlns:mo="https://gitee.com/aun/Timo">
-<head th:replace="/common/template :: header(~{::title},~{::link},~{::style})"></head>
-
-<body class="timo-layout-page">
-<div class="layui-card">
-    <div class="layui-card-header timo-card-header">
-        <span><i class="fa fa-bars"></i> 机器列表</span>
-        <i class="layui-icon layui-icon-refresh refresh-btn"></i>
-    </div>
-    <div class="layui-card-body">
-        <div class="layui-row timo-card-screen put-row">
-            <div class="layui-row timo-card-screen put-row">
-                <div class="pull-left layui-form-pane">
-                    <div class="layui-inline">
-                        <label class="layui-form-label">环境</label>
-                        <div class="layui-input-block timo-search-status">
-                            <select id="getPageByEnv" class="timo-search-select" name="env" onchange="getPageByEnv()"
-                                    mo:dict="ENVIRONMENT" mo-selected="${env}"></select>
-                        </div>
-                    </div>
-                    <div class="layui-inline timo-search-box">
-                        <label class="layui-form-label">机器地址</label>
-                        <div class="layui-input-block">
-                            <input type="text" name="machineIpv4" th:value="${param.machineIpv4}" placeholder="请输入机器地址"
-                                   autocomplete="off" class="layui-input">
-                        </div>
-                    </div>
-                    <div class="layui-inline">
-                        <button class="layui-btn timo-search-btn">
-                            <i class="fa fa-search"></i>
-                        </button>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div class="timo-table-wrap">
-            <table class="layui-table timo-table">
-                <thead>
-                <tr>
-                    <!-- TODO 使用 checkbox 批量设置环境 -->
-                    <th class="timo-table-checkbox">
-                        <label class="timo-checkbox"><input type="checkbox">
-                            <i class="layui-icon layui-icon-ok"></i></label>
-                    </th>
-                    <th data-field="machineIpv4">机器地址</th>
-                    <th data-field="bootTime">启动时间</th>
-                    <th data-field="status">当前状态</th>
-                    <th data-field="lastCheck">上次心跳时间</th>
-                    <th data-field="osArch">系统架构</th>
-                    <th data-field="osName">系统名字</th>
-                    <th data-field="osVersion">系统版本</th>
-                    <th>通知组</th>
-                    <th>SSH 认证</th>
-                    <th>SSH 控制台</th>
-                    <th>操作</th>
-                </tr>
-                </thead>
-                <tbody>
-                <tr th:each="item:${list}">
-                    <td><label class="timo-checkbox"><input type="checkbox" th:value="${item.machineId}">
-                        <i class="layui-icon layui-icon-ok"></i></label></td>
-                    <td th:text="${item.machineIpv4}">机器地址</td>
-                    <td th:text="${item.bootTime}">启动时间</td>
-                    <td th:text="${item.status}">当前状态</td>
-                    <td th:text="${item.lastCheck}">上次心跳时间</td>
-                    <td th:text="${item.osArch}">系统架构</td>
-                    <td th:text="${item.osName}">系统名字</td>
-                    <td th:text="${item.osVersion}">系统版本</td>
-                    <td>
-                        <a class="open-popup" data-title="设置通知组"
-                           th:attr="data-url=@{'/machine/notify/'+${item.machineId}}" href="#">设置</a>
-                    </td>
-                    <td>
-                        <a class="open-popup" data-title="设置 SSH 帐号"
-                           th:attr="data-url=@{'/machine/sshauth/'+${item.machineId}}" href="#">设置</a>
-                    </td>
-                    <td>
-                        <a class="open-popup" data-title="WebTerminal"
-                           th:attr="data-url=@{'/machine/webssh/'+${item.machineId}}"
-                           href="#">SSH</a>
-                    </td>
-                    <td>
-                        <a class="open-popup" data-title="机器详细信息" th:attr="data-url=@{'/machine/host/detail/'+${item.machineId}}"
-                           data-size="960,480" href="#">详细</a>
-                        <a class="open-popup" data-title="编辑" th:attr="data-url=@{'/machine/host/edit/'+${item.machineId}}"
-                           href="#">编辑</a>
-                        <a class="ajax-delete" th:attr="data-msg='确定要删除 '+ ${item.machineId} + ' 机器?'"
-                           th:href="@{'/api/machine/host/' + ${item.machineId}}">删除</a>
-                    </td>
-                </tr>
-                </tbody>
-            </table>
-        </div>
-        <div th:replace="/common/fragment :: page"></div>
-    </div>
-</div>
-
-<script th:replace="/common/template :: script"></script>
-<script type="text/javascript" th:src="@{/js/plugins/jquery-2.2.4.min.js}"></script>
-<script type="text/javascript">
-    function getPageByEnv() {
-        var selectedOption = $("#getPageByEnv option:selected")
-        var param = selectedOption.text()
-        url = '?env=' + param
-        window.location.href = window.location.pathname + url;
-    }
-</script>
-</body>
-</html>

+ 0 - 0
dmaster/src/main/resources/templates/machine/status.html → dmaster/src/main/resources/templates/machine/stat/status.html