Переглянути джерело

已部署的应用状态接口走通

reghao 5 роки тому
батько
коміт
51874d936b
38 змінених файлів з 475 додано та 258 видалено
  1. 15 0
      common/src/main/java/cn/reghao/autodop/common/deploy/AppStatus.java
  2. 0 45
      common/src/main/java/cn/reghao/autodop/common/dockerc/ContainerInfo.java
  3. 20 11
      common/src/main/java/cn/reghao/autodop/common/dockerc/DockerClient.java
  4. 8 4
      common/src/main/java/cn/reghao/autodop/common/dockerc/api/ContainerOps.java
  5. 1 1
      common/src/main/java/cn/reghao/autodop/common/dockerc/api/DockerApi.java
  6. 3 1
      common/src/main/java/cn/reghao/autodop/common/dockerc/api/ImageOps.java
  7. 2 2
      common/src/main/java/cn/reghao/autodop/common/dockerc/exception/DockerException.java
  8. 1 1
      common/src/main/java/cn/reghao/autodop/common/dockerc/httpclient/DockerAuth.java
  9. 1 1
      common/src/main/java/cn/reghao/autodop/common/dockerc/httpclient/DockerHeader.java
  10. 0 1
      common/src/main/java/cn/reghao/autodop/common/dockerc/httpclient/HttpClient.java
  11. 5 5
      common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/Config.java
  12. 1 1
      common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/Container.java
  13. 32 0
      common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/ContainerInspect.java
  14. 18 0
      common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/Data.java
  15. 16 0
      common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/GraphDriver.java
  16. 1 1
      common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/HostConfig.java
  17. 1 1
      common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/RestartPolicy.java
  18. 25 0
      common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/State.java
  19. 0 41
      common/src/main/java/cn/reghao/autodop/common/grpc/facade/AppService.java
  20. 4 4
      common/src/main/java/cn/reghao/autodop/common/grpc/facade/app/AppDeployService.java
  21. 41 0
      common/src/main/java/cn/reghao/autodop/common/grpc/facade/app/AppLogService.java
  22. 60 0
      common/src/main/java/cn/reghao/autodop/common/grpc/facade/app/AppStatusService.java
  23. 7 4
      dagent/src/main/java/cn/reghao/autodop/dagent/app/DockerAppDeployServiceImpl.java
  24. 45 0
      dagent/src/main/java/cn/reghao/autodop/dagent/app/DockerAppLogServiceImpl.java
  25. 83 0
      dagent/src/main/java/cn/reghao/autodop/dagent/app/DockerAppStatusServiceImpl.java
  26. 1 1
      dagent/src/main/java/cn/reghao/autodop/dagent/app/deploy/Deploy.java
  27. 1 1
      dagent/src/main/java/cn/reghao/autodop/dagent/app/deploy/DockerDeploy.java
  28. 1 1
      dagent/src/main/java/cn/reghao/autodop/dagent/app/deploy/ZipDeploy.java
  29. 1 1
      dagent/src/main/java/cn/reghao/autodop/dagent/app/deploy/ZipRemoteDeploy.java
  30. 0 85
      dagent/src/main/java/cn/reghao/autodop/dagent/service/DockerAppServiceImpl.java
  31. 2 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppBuildController.java
  32. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppOrchestrateController.java
  33. 8 11
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppStatusController.java
  34. 60 20
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/AppManager.java
  35. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppIntegrate.java
  36. 4 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployTask.java
  37. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployer.java
  38. 2 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/common/config/SwaggerConfig.java

+ 15 - 0
common/src/main/java/cn/reghao/autodop/common/deploy/AppStatus.java

@@ -0,0 +1,15 @@
+package cn.reghao.autodop.common.deploy;
+
+import lombok.Data;
+
+/**
+ * @author reghao
+ * @date 2020-05-19 20:32:35
+ */
+@Data
+public class AppStatus {
+    private String appId;
+    private String commitId;
+    private String status;
+    private String startedTime;
+}

+ 0 - 45
common/src/main/java/cn/reghao/autodop/common/dockerc/ContainerInfo.java

@@ -1,45 +0,0 @@
-package cn.reghao.autodop.common.dockerc;
-
-import com.google.gson.annotations.SerializedName;
-import lombok.Data;
-
-import java.util.Date;
-
-/**
- * @author reghao
- * @date 2019-12-10 18:30:02
- */
-@Data
-public class ContainerInfo {
-    @SerializedName("Id") private String id;
-    @SerializedName("Created") private Date created;
-    @SerializedName("Path") private String path;
-    @SerializedName("Config") private ContainerConfig config;
-    @SerializedName("HostConfig") private HostConfig hostConfig;
-    @SerializedName("GraphDriver") private GraphDriver graphDriver;
-    @SerializedName("Image") private String image;
-    @SerializedName("ResolvConfPath") private String resolvConfPath;
-    @SerializedName("HostnamePath") private String hostnamePath;
-    @SerializedName("HostsPath") private String hostsPath;
-    @SerializedName("Name") private String name;
-    @SerializedName("Driver") private String driver;
-    @SerializedName("ExecDriver") private String execDriver;
-    @SerializedName("ProcessLabel") private String processLabel;
-    @SerializedName("MountLabel") private String mountLabel;
-    @SerializedName("AppArmorProfile") private String appArmorProfile;
-    @SerializedName("LogPath") private String logPath;
-    @SerializedName("RestartCount") private Long restartCount;
-
-    @lombok.Data
-    static class GraphDriver {
-        @SerializedName("Data")  private Data data;
-    }
-
-    @lombok.Data
-    static class Data {
-        @SerializedName("LowerDir") private String lowerDir;
-        @SerializedName("MergedDir") private String mergedDir;
-        @SerializedName("UpperDir") private String upperDir;
-        @SerializedName("WorkDir") private String workDir;
-    }
-}

+ 20 - 11
common/src/main/java/cn/reghao/autodop/common/dockerc/DockerClient.java

@@ -1,8 +1,18 @@
 package cn.reghao.autodop.common.dockerc;
 
 import cn.reghao.autodop.common.deploy.LogLevel;
+import cn.reghao.autodop.common.dockerc.api.ContainerOps;
+import cn.reghao.autodop.common.dockerc.api.DockerApi;
+import cn.reghao.autodop.common.dockerc.api.ImageOps;
+import cn.reghao.autodop.common.dockerc.exception.DockerException;
+import cn.reghao.autodop.common.dockerc.httpclient.DockerAuth;
+import cn.reghao.autodop.common.dockerc.httpclient.DockerHeader;
 import cn.reghao.autodop.common.dockerc.httpclient.UnixSocketClient;
 import cn.reghao.autodop.common.dockerc.httpclient.HttpClient;
+import cn.reghao.autodop.common.dockerc.pojo.Container;
+import cn.reghao.autodop.common.dockerc.pojo.Config;
+import cn.reghao.autodop.common.dockerc.pojo.ContainerInspect;
+import cn.reghao.autodop.common.dockerc.pojo.HostConfig;
 import cn.reghao.autodop.common.utils.JsonUtil;
 import cn.reghao.autodop.common.utils.security.Base64Util;
 import cn.reghao.autodop.common.utils.compression.TarUtil;
@@ -44,7 +54,6 @@ public class DockerClient implements ImageOps, ContainerOps, AutoCloseable {
                 throw new DockerException(result);
             }
 
-            log.info("{}", result);
             return result;
         } else {
             throw new NullPointerException("docker response is null");
@@ -153,9 +162,9 @@ public class DockerClient implements ImageOps, ContainerOps, AutoCloseable {
         /*Map<String, String> volumes = new HashMap<>();
         volumes.put("/home/reghao/tmp/autodop/opt/logs", "/app/Logs");*/
         // TODO 挂载日志目录到宿主机
-        ContainerConfig containerConfig = ContainerConfig.builder()
+        Config config = Config.builder()
                 .image(image).hostConfig(hostConfig).build();
-        String tmp = JsonUtil.objectToJson(containerConfig);
+        String tmp = JsonUtil.objectToJson(config);
         String json = tmp.replace("image", "Image")
                 .replace("hostConfig", "HostConfig")
                 .replace("networkMode", "NetworkMode");
@@ -235,7 +244,7 @@ public class DockerClient implements ImageOps, ContainerOps, AutoCloseable {
      * @return
      * @date 2020-03-13 下午10:16
      */
-    public void stopAndDelete(String containerName) throws DockerException {
+    private void stopAndDelete(String containerName) throws DockerException {
         List<Container> containers = ps(true);
         String name = "/" + containerName;
         for (Container container : containers) {
@@ -258,7 +267,7 @@ public class DockerClient implements ImageOps, ContainerOps, AutoCloseable {
      * @date 2020-05-19 上午10:26
      */
     @Override
-    public List<String> consoleLog(String containerId, String logLevel) {
+    public List<String> logs(String containerId, String logLevel) {
         LogLevel level = LogLevel.valueOf(logLevel);
         String uri = DockerApi.logsGet.replace("{}", containerId);
         FullHttpResponse response;
@@ -306,7 +315,7 @@ public class DockerClient implements ImageOps, ContainerOps, AutoCloseable {
         }
     }
 
-    List<String> appLog(String containerId, String filePath) throws IOException {
+    private List<String> appLog(String containerId, String filePath) throws IOException {
         String logDir = rootfs(containerId) + filePath;
         File dir = new File(logDir);
         if (!dir.exists()) {
@@ -319,20 +328,20 @@ public class DockerClient implements ImageOps, ContainerOps, AutoCloseable {
     }
 
     @Override
-    public String inspectContainer(String contianerId) {
+    public ContainerInspect inspectContainer(String contianerId) {
         String uri = DockerApi.inspectContainerGet.replace("{}", contianerId);
         FullHttpResponse response = client.get(uri, null);
         if (response != null) {
-            return response.content().toString(StandardCharsets.UTF_8);
+            String result =  response.content().toString(StandardCharsets.UTF_8);
+            return (ContainerInspect) JsonUtil.jsonToObject(result, ContainerInspect.class);
         }
         return null;
     }
 
     @Override
     public String rootfs(String containerId) {
-        String result = inspectContainer(containerId);
-        ContainerInfo containerInfo = (ContainerInfo) JsonUtil.jsonToObject(result, ContainerInfo.class);
+        ContainerInspect containerInspect = inspectContainer(containerId);;
         // TODO 可能抛出 null 异常
-        return containerInfo.getGraphDriver().getData().getMergedDir();
+        return containerInspect.getGraphDriver().getData().getMergedDir();
     }
 }

+ 8 - 4
common/src/main/java/cn/reghao/autodop/common/dockerc/ContainerOps.java → common/src/main/java/cn/reghao/autodop/common/dockerc/api/ContainerOps.java

@@ -1,4 +1,8 @@
-package cn.reghao.autodop.common.dockerc;
+package cn.reghao.autodop.common.dockerc.api;
+
+import cn.reghao.autodop.common.dockerc.pojo.Container;
+import cn.reghao.autodop.common.dockerc.exception.DockerException;
+import cn.reghao.autodop.common.dockerc.pojo.ContainerInspect;
 
 import java.io.IOException;
 import java.util.List;
@@ -38,7 +42,7 @@ public interface ContainerOps {
      * @return
      * @date 2020-05-19 上午10:57
      */
-    List<String> consoleLog(String containerId, String logLevel);
+    List<String> logs(String containerId, String logLevel);
 
     /**
      * 文件日志
@@ -52,11 +56,11 @@ public interface ContainerOps {
     /**
      * 查看容器的详细信息
      *
-     * @param contianerId 容器 ID
+     * @param containerId 容器 ID
      * @return 容器详细信息
      * @date 2020-01-19 下午1:39
      */
-    String inspectContainer(String contianerId);
+    ContainerInspect inspectContainer(String containerId);
 
     /**
      * 容器映射到宿主机上的根目录

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/dockerc/DockerApi.java → common/src/main/java/cn/reghao/autodop/common/dockerc/api/DockerApi.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.dockerc;
+package cn.reghao.autodop.common.dockerc.api;
 
 /**
  * Docker v1.40

+ 3 - 1
common/src/main/java/cn/reghao/autodop/common/dockerc/ImageOps.java → common/src/main/java/cn/reghao/autodop/common/dockerc/api/ImageOps.java

@@ -1,4 +1,6 @@
-package cn.reghao.autodop.common.dockerc;
+package cn.reghao.autodop.common.dockerc.api;
+
+import cn.reghao.autodop.common.dockerc.exception.DockerException;
 
 /**
  * @author reghao

+ 2 - 2
common/src/main/java/cn/reghao/autodop/common/dockerc/DockerException.java → common/src/main/java/cn/reghao/autodop/common/dockerc/exception/DockerException.java

@@ -1,11 +1,11 @@
-package cn.reghao.autodop.common.dockerc;
+package cn.reghao.autodop.common.dockerc.exception;
 
 /**
  * @author reghao
  * @date 2020-01-19 14:53:34
  */
 public class DockerException extends Exception {
-    DockerException(String msg) {
+    public DockerException(String msg) {
         super(msg);
     }
 }

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/dockerc/DockerAuth.java → common/src/main/java/cn/reghao/autodop/common/dockerc/httpclient/DockerAuth.java

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

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/dockerc/DockerHeader.java → common/src/main/java/cn/reghao/autodop/common/dockerc/httpclient/DockerHeader.java

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

+ 0 - 1
common/src/main/java/cn/reghao/autodop/common/dockerc/httpclient/HttpClient.java

@@ -1,6 +1,5 @@
 package cn.reghao.autodop.common.dockerc.httpclient;
 
-import cn.reghao.autodop.common.dockerc.DockerHeader;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import io.netty.handler.codec.http.*;

+ 5 - 5
common/src/main/java/cn/reghao/autodop/common/dockerc/ContainerConfig.java → common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/Config.java

@@ -1,15 +1,15 @@
-package cn.reghao.autodop.common.dockerc;
+package cn.reghao.autodop.common.dockerc.pojo;
 
 /**
  * @author reghao
  * @date 2020-01-14 23:11:21
  */
-public class ContainerConfig {
+public class Config {
     private String image;
     private HostConfig hostConfig;
     //private Map<String, String> volumes;
 
-    public ContainerConfig(Builder builder) {
+    public Config(Builder builder) {
         this.image = builder.image;
         this.hostConfig = builder.hostConfig;
         //this.volumes = builder.volumes;
@@ -42,8 +42,8 @@ public class ContainerConfig {
             return this;
         }*/
 
-        public ContainerConfig build() {
-            return new ContainerConfig(this);
+        public Config build() {
+            return new Config(this);
         }
     }
 }

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/dockerc/Container.java → common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/Container.java

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

+ 32 - 0
common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/ContainerInspect.java

@@ -0,0 +1,32 @@
+package cn.reghao.autodop.common.dockerc.pojo;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * docker inspect 的返回值(部分)
+ *
+ * @author reghao
+ * @date 2019-12-10 18:30:02
+ */
+@Data
+public class ContainerInspect {
+    @SerializedName("Id") private String id;
+    @SerializedName("Created") private Date created;
+    @SerializedName("Path") private String path;
+    @SerializedName("State") private State state;
+    @SerializedName("Image") private String image;
+    @SerializedName("Name") private String name;
+    @SerializedName("RestartCount") private Long restartCount;
+    @SerializedName("HostConfig") private HostConfig hostConfig;
+    @SerializedName("GraphDriver") private GraphDriver graphDriver;
+    @SerializedName("Config") private Config config;
+
+    @Data
+    static public class Config {
+        @SerializedName("Image") private String image;
+        @SerializedName("StopSignal") private String stopSignal;
+    }
+}

+ 18 - 0
common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/Data.java

@@ -0,0 +1,18 @@
+package cn.reghao.autodop.common.dockerc.pojo;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author reghao
+ * @date 2020-05-19 20:50:24
+ */
+@Getter
+@Setter
+public class Data {
+    @SerializedName("LowerDir") private String lowerDir;
+    @SerializedName("MergedDir") private String mergedDir;
+    @SerializedName("UpperDir") private String upperDir;
+    @SerializedName("WorkDir") private String workDir;
+}

+ 16 - 0
common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/GraphDriver.java

@@ -0,0 +1,16 @@
+package cn.reghao.autodop.common.dockerc.pojo;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author reghao
+ * @date 2020-05-19 20:51:13
+ */
+@Getter
+@Setter
+public class GraphDriver {
+    @SerializedName("Data") private Data data;
+    @SerializedName("Name") private String name;
+}

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

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

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

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

+ 25 - 0
common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/State.java

@@ -0,0 +1,25 @@
+package cn.reghao.autodop.common.dockerc.pojo;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author reghao
+ * @date 2020-05-19 21:04:06
+ */
+@Data
+public class State {
+    @SerializedName("Status") private String status;
+    @SerializedName("Running") private boolean running;
+    @SerializedName("Paused") private boolean paused;
+    @SerializedName("Restarting") private boolean restarting;
+    @SerializedName("OOMKilled") private boolean oomKilled;
+    @SerializedName("Dead") private boolean dead;
+    @SerializedName("Pid") private int pid;
+    @SerializedName("ExitCode") private int exitCode;
+    @SerializedName("Error") private String error;
+    @SerializedName("StartedAt") private Date startedAt;
+    @SerializedName("FinishedAt") private Date finishedAt;
+}

+ 0 - 41
common/src/main/java/cn/reghao/autodop/common/grpc/facade/AppService.java

@@ -1,41 +0,0 @@
-package cn.reghao.autodop.common.grpc.facade;
-
-import cn.reghao.autodop.common.dockerc.DockerException;
-import cn.reghao.autodop.common.grpc.common.annotation.GrpcService;
-import cn.reghao.autodop.common.grpc.common.serializer.SerializerType;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2019-11-01 10:53:22
- */
-@GrpcService(service = "app", serialization = SerializerType.FastJson)
-public interface AppService {
-    void run(String appId, String version) throws DockerException;
-    void start(String appId) throws DockerException;
-    void stop(String appId) throws DockerException;
-    void restart(String appId) throws DockerException;
-
-    /**
-     * 应用日志
-     * TODO 实现双向流
-     *
-     * @param appId 应用 ID
-     * @param logType 日志类型
-     * @param logLevel 日志等级
-     * @param logPath 日志文件在应用内的相对路径(仅适用于文件日志)
-     * @return
-     * @date 2020-05-19 上午10:37
-     */
-    List<String> log(String appId, String logType, String logLevel, String logPath) throws Exception;
-
-    /**
-     * 应用日志内容
-     *
-     * @param
-     * @return
-     * @date 2020-05-19 下午2:18
-     */
-    List<String> logcontent(String appId, String logType, String logLevel, String logfilePath) throws Exception;
-}

+ 4 - 4
common/src/main/java/cn/reghao/autodop/common/grpc/facade/DeployService.java → common/src/main/java/cn/reghao/autodop/common/grpc/facade/app/AppDeployService.java

@@ -1,15 +1,15 @@
-package cn.reghao.autodop.common.grpc.facade;
+package cn.reghao.autodop.common.grpc.facade.app;
 
 import cn.reghao.autodop.common.grpc.common.annotation.GrpcService;
 import cn.reghao.autodop.common.grpc.common.serializer.SerializerType;
 
 /**
- * 部署服务
+ * 应用部署服务
  *
  * @author reghao
  * @date 2019-11-07 10:48:58
  */
-@GrpcService(service = "deploy", serialization = SerializerType.FastJson)
-public interface DeployService {
+@GrpcService(service = "appDeploy", serialization = SerializerType.FastJson)
+public interface AppDeployService {
     Object deploy(Object object);
 }

+ 41 - 0
common/src/main/java/cn/reghao/autodop/common/grpc/facade/app/AppLogService.java

@@ -0,0 +1,41 @@
+package cn.reghao.autodop.common.grpc.facade.app;
+
+import cn.reghao.autodop.common.grpc.common.annotation.GrpcService;
+import cn.reghao.autodop.common.grpc.common.serializer.SerializerType;
+
+import java.util.List;
+
+/**
+ * 应用日志服务
+ *
+ * @author reghao
+ * @date 2019-11-01 10:53:22
+ */
+@GrpcService(service = "appLog", serialization = SerializerType.FastJson)
+public interface AppLogService {
+    /**
+     * 应用日志文件列表
+     *
+     * @param appId 应用 ID
+     * @param logType 日志类型
+     * @param logLevel 日志等级
+     * @param logdirPath 日志目录相对路径
+     *
+     * @return 日志文件名列表
+     * @date 2020-05-19 上午10:37
+     */
+    List<String> logFiles(String appId, String logType, String logLevel, String logdirPath) throws Exception;
+
+    /**
+     * 应用日志内容
+     *
+     * @param appId 应用 ID
+     * @param logType 日志类型
+     * @param logLevel 日志等级
+     * @param logfilePath 日志文件相对路径
+     *
+     * @return 日志文件内容
+     * @date 2020-05-19 下午2:18
+     */
+    List<String> logContent(String appId, String logType, String logLevel, String logfilePath) throws Exception;
+}

+ 60 - 0
common/src/main/java/cn/reghao/autodop/common/grpc/facade/app/AppStatusService.java

@@ -0,0 +1,60 @@
+package cn.reghao.autodop.common.grpc.facade.app;
+
+import cn.reghao.autodop.common.deploy.AppStatus;
+import cn.reghao.autodop.common.dockerc.exception.DockerException;
+import cn.reghao.autodop.common.grpc.common.annotation.GrpcService;
+import cn.reghao.autodop.common.grpc.common.serializer.SerializerType;
+
+/**
+ * 应用状态服务
+ *
+ * @author reghao
+ * @date 2019-11-01 10:53:22
+ */
+@GrpcService(service = "appStatus", serialization = SerializerType.FastJson)
+public interface AppStatusService {
+    /**
+     * 运行应用
+     *
+     * @param
+     * @return
+     * @date 2020-05-19 下午8:03
+     */
+    void run(String appId, String commitId) throws DockerException;
+
+    /**
+     * 启动应用
+     *
+     * @param
+     * @return
+     * @date 2020-05-19 下午8:03
+     */
+    void start(String appId) throws DockerException;
+
+    /**
+     * 停止应用
+     *
+     * @param
+     * @return
+     * @date 2020-05-19 下午8:03
+     */
+    void stop(String appId) throws DockerException;
+
+    /**
+     * 重启应用
+     *
+     * @param
+     * @return
+     * @date 2020-05-19 下午8:03
+     */
+    void restart(String appId) throws DockerException;
+
+    /**
+     * 应用当前状态
+     *
+     * @param
+     * @return
+     * @date 2020-05-19 下午8:03
+     */
+    Object status(String appId) throws DockerException;
+}

+ 7 - 4
dagent/src/main/java/cn/reghao/autodop/dagent/deploy/DeployServiceImpl.java → dagent/src/main/java/cn/reghao/autodop/dagent/app/DockerAppDeployServiceImpl.java

@@ -1,10 +1,13 @@
-package cn.reghao.autodop.dagent.deploy;
+package cn.reghao.autodop.dagent.app;
 
 import cn.reghao.autodop.common.deploy.DeployResult;
 import cn.reghao.autodop.common.deploy.DeployConfig;
 import cn.reghao.autodop.common.deploy.PackerType;
-import cn.reghao.autodop.common.grpc.facade.DeployService;
+import cn.reghao.autodop.common.grpc.facade.app.AppDeployService;
 import cn.reghao.autodop.common.utils.NetworkUtil;
+import cn.reghao.autodop.dagent.app.deploy.Deploy;
+import cn.reghao.autodop.dagent.app.deploy.DockerDeploy;
+import cn.reghao.autodop.dagent.app.deploy.ZipDeploy;
 import com.alibaba.fastjson.JSONObject;
 import org.springframework.stereotype.Service;
 
@@ -13,8 +16,8 @@ import org.springframework.stereotype.Service;
  * @date 2019-11-07 10:54:01
  */
 @Service
-public class DeployServiceImpl implements DeployService {
-    public DeployServiceImpl() {
+public class DockerAppDeployServiceImpl implements AppDeployService {
+    public DockerAppDeployServiceImpl() {
     }
 
     @Override

+ 45 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/app/DockerAppLogServiceImpl.java

@@ -0,0 +1,45 @@
+package cn.reghao.autodop.dagent.app;
+
+import cn.reghao.autodop.common.deploy.LogType;
+import cn.reghao.autodop.common.dockerc.DockerClient;
+import cn.reghao.autodop.common.grpc.facade.app.AppLogService;
+import cn.reghao.autodop.common.utils.text.TextFile;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-01-19 21:51:37
+ */
+@Slf4j
+@Service
+public class DockerAppLogServiceImpl implements AppLogService {
+    @Override
+    public List<String> logFiles(String appId, String logType, String logLevel, String logPath) throws Exception {
+        try (DockerClient docker = new DockerClient()) {
+            String containerId = docker.getIdByName(appId);
+            LogType type = LogType.valueOf(logType);
+            switch (type) {
+                case console:
+                    return docker.logs(containerId, logLevel);
+                case file:
+                    return docker.fileLog(containerId, logLevel, logPath);
+                default:
+                    throw new Exception(type + " 日志类型不存在");
+            }
+        }
+    }
+
+    @Override
+    public List<String> logContent(String appId, String logType, String logLevel, String logfilePath) throws Exception {
+        try (DockerClient docker = new DockerClient()) {
+            String containerId = docker.getIdByName(appId);
+            String rootfs = docker.rootfs(containerId);
+            // 返回最近的 500 行日志
+            // TODO 实现双向流,读取更早的日志
+            return new TextFile().tailRead(rootfs + logfilePath, 500);
+        }
+    }
+}

+ 83 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/app/DockerAppStatusServiceImpl.java

@@ -0,0 +1,83 @@
+package cn.reghao.autodop.dagent.app;
+
+import cn.reghao.autodop.common.deploy.AppStatus;
+import cn.reghao.autodop.common.dockerc.DockerClient;
+import cn.reghao.autodop.common.dockerc.exception.DockerException;
+import cn.reghao.autodop.common.dockerc.pojo.ContainerInspect;
+import cn.reghao.autodop.common.dockerc.pojo.State;
+import cn.reghao.autodop.common.grpc.facade.app.AppStatusService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+/**
+ * @author reghao
+ * @date 2020-01-19 21:51:37
+ */
+@Slf4j
+@Service
+public class DockerAppStatusServiceImpl implements AppStatusService {
+    @Override
+    public void run(String appId, String version) throws DockerException {
+        log.info("运行 {} 应用的 {} 版本", appId, version);
+    }
+
+    @Override
+    public void start(String appId) throws DockerException {
+        try (DockerClient docker = new DockerClient()) {
+            String containerId = docker.getIdByName(appId);
+            docker.start(containerId);
+        }
+    }
+
+    @Override
+    public void stop(String appId) throws DockerException {
+        try (DockerClient docker = new DockerClient()) {
+            String containerId = docker.getIdByName(appId);
+            docker.stop(containerId);
+        }
+    }
+
+    @Override
+    public void restart(String appId) throws DockerException {
+        try (DockerClient docker = new DockerClient()) {
+            String containerId = docker.getIdByName(appId);
+            docker.restart(containerId);
+        }
+    }
+
+    @Override
+    public AppStatus status(String appId) throws DockerException {
+        try (DockerClient docker = new DockerClient()) {
+            String containerId = docker.getIdByName(appId);
+            ContainerInspect container = docker.inspectContainer(containerId);
+            State state = container.getState();
+            String status = state.getStatus();
+            Date date = state.getStartedAt();
+            String[] str = container.getConfig().getImage().split(appId + ":");
+            String commitId = null;
+            if (str.length == 2) {
+                commitId = str[1];
+            }
+
+            AppStatus appStatus = new AppStatus();
+            appStatus.setAppId(appId);
+            appStatus.setCommitId(commitId);
+            appStatus.setStatus(status);
+            if ("running".equals(status)) {
+                appStatus.setStartedTime(date.toString());
+            } else {
+                appStatus.setStartedTime("0");
+            }
+
+            return appStatus;
+        }
+    }
+
+    public static void main(String[] args) throws DockerException {
+        AppStatusService statusService = new DockerAppStatusServiceImpl();
+        /*AppStatus status = statusService.status("timuke");
+        log.info("{}", status);*/
+    }
+}

+ 1 - 1
dagent/src/main/java/cn/reghao/autodop/dagent/deploy/Deploy.java → dagent/src/main/java/cn/reghao/autodop/dagent/app/deploy/Deploy.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dagent.deploy;
+package cn.reghao.autodop.dagent.app.deploy;
 
 import cn.reghao.autodop.common.deploy.DeployResult;
 

+ 1 - 1
dagent/src/main/java/cn/reghao/autodop/dagent/deploy/DockerDeploy.java → dagent/src/main/java/cn/reghao/autodop/dagent/app/deploy/DockerDeploy.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dagent.deploy;
+package cn.reghao.autodop.dagent.app.deploy;
 
 import cn.reghao.autodop.common.deploy.DeployResult;
 import cn.reghao.autodop.common.dockerc.DockerClient;

+ 1 - 1
dagent/src/main/java/cn/reghao/autodop/dagent/deploy/ZipDeploy.java → dagent/src/main/java/cn/reghao/autodop/dagent/app/deploy/ZipDeploy.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dagent.deploy;
+package cn.reghao.autodop.dagent.app.deploy;
 
 import cn.reghao.autodop.common.deploy.DeployResult;
 import cn.reghao.autodop.common.http.DefaultWebRequest;

+ 1 - 1
dagent/src/main/java/cn/reghao/autodop/dagent/deploy/ZipRemoteDeploy.java → dagent/src/main/java/cn/reghao/autodop/dagent/app/deploy/ZipRemoteDeploy.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dagent.deploy;
+package cn.reghao.autodop.dagent.app.deploy;
 
 import cn.reghao.autodop.common.deploy.DeployResult;
 import cn.reghao.autodop.common.http.DefaultWebRequest;

+ 0 - 85
dagent/src/main/java/cn/reghao/autodop/dagent/service/DockerAppServiceImpl.java

@@ -1,85 +0,0 @@
-package cn.reghao.autodop.dagent.service;
-
-import cn.reghao.autodop.common.deploy.LogType;
-import cn.reghao.autodop.common.dockerc.DockerClient;
-import cn.reghao.autodop.common.dockerc.DockerException;
-import cn.reghao.autodop.common.grpc.facade.AppService;
-import cn.reghao.autodop.common.utils.text.TextFile;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * Docker 应用管理
- *
- * @author reghao
- * @date 2020-01-19 21:51:37
- */
-@Slf4j
-@Service
-public class DockerAppServiceImpl implements AppService {
-    @Override
-    public void run(String appId, String version) throws DockerException {
-        log.info("运行 {} 应用的 {} 版本", appId, version);
-    }
-
-    @Override
-    public void start(String app) throws DockerException {
-        try (DockerClient docker = new DockerClient()) {
-            String containerId = docker.getIdByName(app);
-            docker.start(containerId);
-        }
-    }
-
-    @Override
-    public void stop(String app) throws DockerException {
-        try (DockerClient docker = new DockerClient()) {
-            String containerId = docker.getIdByName(app);
-            docker.stop(containerId);
-        }
-    }
-
-    @Override
-    public void restart(String app) throws DockerException {
-        try (DockerClient docker = new DockerClient()) {
-            String containerId = docker.getIdByName(app);
-            docker.restart(containerId);
-        }
-    }
-
-    @Override
-    public List<String> log(String appId, String logType, String logLevel, String logPath) throws Exception {
-        try (DockerClient docker = new DockerClient()) {
-            String containerId = docker.getIdByName(appId);
-            LogType type = LogType.valueOf(logType);
-            switch (type) {
-                case console:
-                    return docker.consoleLog(containerId, logLevel);
-                case file:
-                    return docker.fileLog(containerId, logLevel, logPath);
-                default:
-                    throw new Exception(type + " 日志类型不存在");
-            }
-        }
-    }
-
-    @Override
-    public List<String> logcontent(String appId, String logType, String logLevel, String logfilePath) throws Exception {
-        try (DockerClient docker = new DockerClient()) {
-            String containerId = docker.getIdByName(appId);
-            String rootfs = docker.rootfs(containerId);
-            return new TextFile().tailRead(rootfs + logfilePath, 500);
-        }
-    }
-
-    /**
-     * 容器已运行时间
-     *
-     * @param
-     * @return
-     * @date 2020-05-18 下午11:41
-     */
-    public void runningTime() {
-    }
-}

+ 2 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildController.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppBuildController.java

@@ -28,14 +28,12 @@ import java.util.stream.Collectors;
 @Api(tags = "应用构建部署接口")
 @RestController
 @RequestMapping("/api/app")
-public class BuildController {
+public class AppBuildController {
     private BuildDispatcher buildDispatcher;
-    private AppManager appManager;
     private OssService ossService;
 
-    public BuildController(BuildDispatcher buildDispatcher, AppManager appManager, OssService ossService) {
+    public AppBuildController(BuildDispatcher buildDispatcher, OssService ossService) {
         this.buildDispatcher = buildDispatcher;
-        this.appManager = appManager;
         this.ossService = ossService;
     }
 

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/OrchestrateController.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppOrchestrateController.java

@@ -16,10 +16,10 @@ import org.springframework.web.bind.annotation.*;
 @Api(tags = "应用编排 CURD 接口")
 @RestController
 @RequestMapping("/api/app/orchestrate")
-public class OrchestrateController {
+public class AppOrchestrateController {
     private OrchestrateService orchestrateService;
 
-    public OrchestrateController(OrchestrateService orchestrateService) {
+    public AppOrchestrateController(OrchestrateService orchestrateService) {
         this.orchestrateService = orchestrateService;
     }
 

+ 8 - 11
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/AppStatusController.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.dmaster.app.controller;
 
-import cn.reghao.autodop.common.dockerc.DockerException;
+import cn.reghao.autodop.common.dockerc.exception.DockerException;
 import cn.reghao.autodop.dmaster.app.service.AppManager;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -25,16 +25,6 @@ public class AppStatusController {
         this.appManager = appManager;
     }
 
-    @ApiOperation(value = "获取所有已注册应用的运行状态")
-    @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="一个或多个应用(多个应用间使用 , 分隔)",
-                    paramType="path", dataType = "String")
-    )
-    @GetMapping("/status")
-    public ResponseEntity<String> status() {
-        return ResponseEntity.ok().body("ok");
-    }
-
     @ApiOperation(value = "启动应用")
     @ApiImplicitParams(
             @ApiImplicitParam(name="appId", value="一个或多个应用(多个应用间使用 , 分隔)",
@@ -67,4 +57,11 @@ public class AppStatusController {
         appManager.restart(appId);
         return ResponseEntity.ok().body("ok");
     }
+
+    @ApiOperation(value = "获取所有已注册应用的运行状态")
+    @GetMapping("/status")
+    public ResponseEntity<String> status() throws DockerException {
+        appManager.status();
+        return ResponseEntity.ok().body("ok");
+    }
 }

+ 60 - 20
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/AppManager.java

@@ -1,14 +1,20 @@
 package cn.reghao.autodop.dmaster.app.service;
 
-import cn.reghao.autodop.common.dockerc.DockerException;
+import cn.reghao.autodop.common.deploy.AppStatus;
+import cn.reghao.autodop.common.deploy.DeployResult;
+import cn.reghao.autodop.common.dockerc.exception.DockerException;
 import cn.reghao.autodop.common.grpc.client.GrpcClientProxy;
-import cn.reghao.autodop.common.grpc.facade.AppService;
+import cn.reghao.autodop.common.grpc.facade.app.AppLogService;
+import cn.reghao.autodop.common.grpc.facade.app.AppStatusService;
+import cn.reghao.autodop.common.utils.JsonUtil;
 import cn.reghao.autodop.dmaster.app.caching.OrchestrationCaching;
 import cn.reghao.autodop.dmaster.app.entity.deploy.AppDeploy;
 import cn.reghao.autodop.dmaster.app.entity.deploy.AppLog;
 import cn.reghao.autodop.dmaster.app.entity.orchestration.AppOrchestration;
+import com.alibaba.fastjson.JSONObject;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -26,18 +32,25 @@ public class AppManager {
         this.caching = caching;
     }
 
-    public void run(String appId, String version) {
+    public void run(String appId, String commitId) throws DockerException {
+        AppOrchestration app = caching.findByAppId(appId);
+        String[] hosts = app.getAppDeploy().getHosts().split(",");
+        for (String host : hosts) {
+            AppStatusService appStatusService = (AppStatusService) new GrpcClientProxy<AppStatusService>()
+                    .getProxy(host, GRPC_PORT, AppStatusService.class);
 
+            appStatusService.run(appId, commitId);
+        }
     }
 
     public void start(String appId) throws DockerException {
         AppOrchestration app = caching.findByAppId(appId);
         String[] hosts = app.getAppDeploy().getHosts().split(",");
         for (String host : hosts) {
-            AppService appService = (AppService) new GrpcClientProxy<AppService>()
-                    .getProxy(host, GRPC_PORT, AppService.class);
+            AppStatusService appStatusService = (AppStatusService) new GrpcClientProxy<AppStatusService>()
+                    .getProxy(host, GRPC_PORT, AppStatusService.class);
 
-            appService.start(appId);
+            appStatusService.start(appId);
         }
     }
 
@@ -45,10 +58,10 @@ public class AppManager {
         AppOrchestration app = caching.findByAppId(appId);
         String[] hosts = app.getAppDeploy().getHosts().split(",");
         for (String host : hosts) {
-            AppService appService = (AppService) new GrpcClientProxy<AppService>()
-                    .getProxy(host, GRPC_PORT, AppService.class);
+            AppStatusService appStatusService = (AppStatusService) new GrpcClientProxy<AppStatusService>()
+                    .getProxy(host, GRPC_PORT, AppStatusService.class);
 
-            appService.stop(appId);
+            appStatusService.stop(appId);
         }
     }
 
@@ -56,13 +69,39 @@ public class AppManager {
         AppOrchestration app = caching.findByAppId(appId);
         String[] hosts = app.getAppDeploy().getHosts().split(",");
         for (String host : hosts) {
-            AppService appService = (AppService) new GrpcClientProxy<AppService>()
-                    .getProxy(host, GRPC_PORT, AppService.class);
+            AppStatusService appStatusService = (AppStatusService) new GrpcClientProxy<AppStatusService>()
+                    .getProxy(host, GRPC_PORT, AppStatusService.class);
 
-            appService.restart(appId);
+            appStatusService.restart(appId);
         }
     }
 
+    public List<AppStatus> status() throws DockerException {
+        List<AppStatus> appStatusList = new ArrayList<>();
+        // TODO 查找所有已部署的应用
+        /*caching.findByAppId("appId");
+        List<AppOrchestration> apps = new ArrayList<>();
+        AppOrchestration app = apps.get(0);
+
+        String[] hosts = app.getAppDeploy().getHosts().split(",");
+        for (String host : hosts) {
+            AppStatusService appStatusService = (AppStatusService) new GrpcClientProxy<AppStatusService>()
+                    .getProxy(host, GRPC_PORT, AppStatusService.class);
+
+            AppStatus status = appStatusService.status(app.getAppId());
+            appStatusList.add(status);
+        }*/
+        AppStatusService appStatusService = (AppStatusService) new GrpcClientProxy<AppStatusService>()
+                .getProxy("localhost", GRPC_PORT, AppStatusService.class);
+
+        Object object = appStatusService.status("timuke");
+        JSONObject jsonObject = (JSONObject) object;
+        AppStatus status = jsonObject.toJavaObject(AppStatus.class);
+        appStatusList.add(status);
+
+        return appStatusList;
+    }
+
     public List<String> log(String appId, String logType, String logLevel) throws Exception {
         AppOrchestration app = caching.findByAppId(appId);
         AppDeploy appDeploy = app.getAppDeploy();
@@ -78,12 +117,12 @@ public class AppManager {
 
         String[] hosts = app.getAppDeploy().getHosts().split(",");
         for (String host : hosts) {
-            AppService appService = (AppService) new GrpcClientProxy<AppService>()
-                    .getProxy(host, GRPC_PORT, AppService.class);
+            AppLogService logService = (AppLogService) new GrpcClientProxy<AppLogService>()
+                    .getProxy(host, GRPC_PORT, AppLogService.class);
 
             // TODO logs 为 null 表示没有日志
-            List<String> logs = appService.log(appId, logType, logLevel, logdirPath);
-            return logs;
+            List<String> logFiles = logService.logFiles(appId, logType, logLevel, logdirPath);
+            return logFiles;
         }
 
         return null;
@@ -104,11 +143,12 @@ public class AppManager {
 
         String[] hosts = app.getAppDeploy().getHosts().split(",");
         for (String host : hosts) {
-            AppService appService = (AppService) new GrpcClientProxy<AppService>()
-                    .getProxy(host, GRPC_PORT, AppService.class);
+            AppLogService logService = (AppLogService) new GrpcClientProxy<AppLogService>()
+                    .getProxy(host, GRPC_PORT, AppLogService.class);
 
-            List<String> logs = appService.logcontent(appId, logType, logLevel, logfilePath);
-            return logs;
+            // TODO logs 为 null 表示没有日志
+            List<String> logContent = logService.logContent(appId, logType, logLevel, logfilePath);
+            return logContent;
         }
 
         return null;

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppIntegrate.java

@@ -12,7 +12,7 @@ import cn.reghao.autodop.dmaster.app.entity.deploy.AppDeploy;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
 import cn.reghao.autodop.dmaster.app.entity.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.entity.orchestration.ProjOrchestration;
-import cn.reghao.autodop.dmaster.app.service.deploy.Deployer;
+import cn.reghao.autodop.dmaster.app.service.deploy.AppDeployer;
 import cn.reghao.autodop.dmaster.app.service.tools.compiler.*;
 import cn.reghao.autodop.dmaster.app.service.tools.packer.*;
 import cn.reghao.autodop.dmaster.app.service.tools.updater.CodeUpdater;
@@ -243,7 +243,7 @@ public class AppIntegrate {
 
     public boolean deploy() {
         try {
-            Deployer.deploy(app, buildLog);
+            AppDeployer.deploy(app, buildLog);
             return true;
         } catch (Exception e) {
             e.printStackTrace();

+ 4 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployTask.java

@@ -3,7 +3,7 @@ package cn.reghao.autodop.dmaster.app.service.deploy;
 import cn.reghao.autodop.common.deploy.DeployConfig;
 import cn.reghao.autodop.common.deploy.DeployResult;
 import cn.reghao.autodop.common.grpc.client.GrpcClientProxy;
-import cn.reghao.autodop.common.grpc.facade.DeployService;
+import cn.reghao.autodop.common.grpc.facade.app.AppDeployService;
 import com.alibaba.fastjson.JSONObject;
 
 import java.util.concurrent.Callable;
@@ -24,11 +24,11 @@ public class AppDeployTask implements Callable<DeployResult> {
     @Override
     public DeployResult call() {
         // TODO 公共网络下,gRPC 调用需要经过认证
-        DeployService deployService = (DeployService)new GrpcClientProxy<DeployService>()
-                .getProxy(deployConfig.getHost(), GRPC_PORT, DeployService.class);
+        AppDeployService appDeployService = (AppDeployService)new GrpcClientProxy<AppDeployService>()
+                .getProxy(deployConfig.getHost(), GRPC_PORT, AppDeployService.class);
 
         // TODO 处理超时未返回的情况
-        Object object = deployService.deploy(deployConfig);
+        Object object = appDeployService.deploy(deployConfig);
         JSONObject jsonObject = (JSONObject) object;
         return jsonObject.toJavaObject(DeployResult.class);
     }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/Deployer.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployer.java

@@ -23,7 +23,7 @@ import java.util.concurrent.Future;
  * @author reghao
  * @date 2020-03-13 10:26:22
  */
-public class Deployer {
+public class AppDeployer {
     private static ExecutorService threadPool = ThreadPoolWrapper.threadPool("deploy");
 
     /**

+ 2 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/config/SwaggerConfig.java

@@ -17,7 +17,8 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
  * @author reghao
  * @date 2019-05-14 17:01:07
  */
-@Profile({"dev1", "test"})
+// Swagger 仅在 dev 和 test 环境生效
+@Profile({"dev", "test"})
 @Configuration
 @EnableSwagger2
 public class SwaggerConfig {