Bladeren bron

优化项目结构

reghao 6 jaren geleden
bovenliggende
commit
4d241d0975
94 gewijzigde bestanden met toevoegingen van 263 en 2337 verwijderingen
  1. 27 45
      common/pom.xml
  2. 0 16
      common/src/main/java/cn/reghao/autodop/common/config/DeployResult.java
  3. 0 16
      common/src/main/java/cn/reghao/autodop/common/config/StaticDeployConfig.java
  4. 0 63
      common/src/main/java/cn/reghao/autodop/common/deploy/BuilderUtil.java
  5. 0 128
      common/src/main/java/cn/reghao/autodop/common/deploy/StaticDeploy.java
  6. 0 58
      common/src/main/java/cn/reghao/autodop/common/deploy/vc/GitImpl.java
  7. 0 77
      common/src/main/java/cn/reghao/autodop/common/deploy/vc/SvnImpl.java
  8. 0 28
      common/src/main/java/cn/reghao/autodop/common/deploy/vc/VersionControl.java
  9. 0 1
      common/src/main/java/cn/reghao/autodop/common/grpc/facade/DeployService.java
  10. 0 23
      common/src/main/java/cn/reghao/autodop/common/module/sys/AppStatus.java
  11. 0 18
      common/src/main/java/cn/reghao/autodop/common/module/sys/DeployConfig.java
  12. 0 19
      common/src/main/java/cn/reghao/autodop/common/module/sys/FileEntity.java
  13. 0 98
      common/src/main/java/cn/reghao/autodop/common/module/sys/GlobalConfig.java
  14. 0 20
      common/src/main/java/cn/reghao/autodop/common/module/sys/NodeInfo.java
  15. 0 15
      common/src/main/java/cn/reghao/autodop/common/module/sys/StaticDeployConfig.java
  16. 0 27
      common/src/main/java/cn/reghao/autodop/common/module/sys/constant/AppType.java
  17. 0 17
      common/src/main/java/cn/reghao/autodop/common/module/sys/constant/NotifyType.java
  18. 0 25
      common/src/main/java/cn/reghao/autodop/common/module/sys/constant/PackType.java
  19. 0 22
      common/src/main/java/cn/reghao/autodop/common/module/sys/constant/RepoType.java
  20. 0 100
      common/src/main/java/cn/reghao/autodop/common/module/sys/entity/AppConfig.java
  21. 0 34
      common/src/main/java/cn/reghao/autodop/common/module/sys/entity/BaseEntityImpl.java
  22. 0 22
      common/src/main/java/cn/reghao/autodop/common/module/sys/entity/Notifier.java
  23. 0 33
      common/src/main/java/cn/reghao/autodop/common/module/sys/entity/ProjectConfig.java
  24. 0 50
      common/src/main/java/cn/reghao/autodop/common/module/sys/entity/SysConfig.java
  25. 0 29
      common/src/main/java/cn/reghao/autodop/common/module/sys/entity/deploy/CompileConfig.java
  26. 0 30
      common/src/main/java/cn/reghao/autodop/common/module/sys/entity/deploy/PackConfig.java
  27. 0 27
      common/src/main/java/cn/reghao/autodop/common/module/sys/entity/deploy/RepoConfig.java
  28. 6 6
      common/src/main/java/cn/reghao/autodop/common/monitor/Cpu.java
  29. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/Disk.java
  30. 5 5
      common/src/main/java/cn/reghao/autodop/common/monitor/Memory.java
  31. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/Network.java
  32. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/ProcessState.java
  33. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/SysInfo.java
  34. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/pojo/CpuInfo.java
  35. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/pojo/CpuUsage.java
  36. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/pojo/DiskStats.java
  37. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/pojo/DiskUsage.java
  38. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/pojo/MemInfo.java
  39. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/pojo/NetState.java
  40. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/pojo/ProcessInfo.java
  41. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/utils/AbstractCalculator.java
  42. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/utils/BeanConversion.java
  43. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/utils/ByteConvert.java
  44. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/utils/ByteType.java
  45. 3 3
      common/src/main/java/cn/reghao/autodop/common/monitor/utils/CpuCalculator.java
  46. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/utils/IpAddressConversion.java
  47. 3 3
      common/src/main/java/cn/reghao/autodop/common/monitor/utils/MemCalculator.java
  48. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/vo/CpuStat.java
  49. 1 1
      common/src/main/java/cn/reghao/autodop/common/monitor/vo/MemUsage.java
  50. 0 35
      common/src/main/java/cn/reghao/autodop/common/result/AbstractAppResult.java
  51. 0 16
      common/src/main/java/cn/reghao/autodop/common/result/DeployResult.java
  52. 0 49
      common/src/main/java/cn/reghao/autodop/common/result/DeployStage.java
  53. 0 35
      common/src/main/java/cn/reghao/autodop/common/utils/HibernateLazyResolver.java
  54. 0 6
      dagent/pom.xml
  55. 22 0
      dagent/src/main/java/cn/reghao/autodop/dagent/config/DmasterProperties.java
  56. 19 6
      dagent/src/main/java/cn/reghao/autodop/dagent/utils/AfterStart.java
  57. 2 16
      dagent/src/main/java/cn/reghao/autodop/dagent/utils/BeforeShutdown.java
  58. 0 5
      dagent/src/main/resources/application-dev.yml
  59. 0 5
      dagent/src/main/resources/application-prod.yml
  60. 0 5
      dagent/src/main/resources/application-test.yml
  61. 6 28
      dagent/src/main/resources/application.yml
  62. 54 40
      dmaster/pom.xml
  63. 18 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/DmasterApplication.java
  64. 1 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildController.java
  65. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/FileController.java
  66. 4 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/DnktZipTarPack.java
  67. 0 17
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/Container.java
  68. 0 41
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/ContainerConfig.java
  69. 0 45
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/ContainerInfo.java
  70. 0 50
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/ContainerOps.java
  71. 0 28
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/DockerApi.java
  72. 0 15
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/DockerAuth.java
  73. 0 297
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/DockerClient.java
  74. 0 11
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/DockerException.java
  75. 0 15
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/DockerHeader.java
  76. 0 37
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/HostConfig.java
  77. 0 28
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/ImageOps.java
  78. 0 67
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/httpclient/HttpClientHandler.java
  79. 0 99
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/httpclient/UnixSocketClient.java
  80. 0 120
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/httpclient/WebClient.java
  81. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/controller/TestController.java
  82. 4 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/exception/GlobalExceptionHandler.java
  83. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/exception/WebErrorController.java
  84. 0 18
      dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/NodeController.java
  85. 2 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/HealthCheckScheduler.java
  86. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/controller/OrchestrateController.java
  87. 2 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/service/OrchestrateService.java
  88. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/result/ErrorResult.java
  89. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/result/ResultCode.java
  90. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/result/WebResult.java
  91. 51 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/BeforeShutdown.java
  92. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/SpringBootUtil.java
  93. 1 6
      dmaster/src/main/resources/application.yml
  94. 5 85
      pom.xml

+ 27 - 45
common/pom.xml

@@ -20,15 +20,9 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.tmatesoft.svnkit</groupId>
-            <artifactId>svnkit</artifactId>
-            <version>1.9.3</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.eclipse.jgit</groupId>
-            <artifactId>org.eclipse.jgit</artifactId>
-            <version>5.5.0.201909110433-r</version>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-all</artifactId>
+            <version>4.1.36.Final</version>
         </dependency>
 
         <dependency>
@@ -49,36 +43,6 @@
             <version>${grpc.version}</version>
         </dependency>
 
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-autoconfigure</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-        </dependency>
-
-        <!-- 通用工具类 -->
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-            <version>3.7</version>
-        </dependency>
-
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>1.1.7</version>
-        </dependency>
-
         <!-- 序列化/反序列化工具 -->
         <dependency>
             <groupId>io.protostuff</groupId>
@@ -105,9 +69,15 @@
         </dependency>
 
         <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-all</artifactId>
-            <version>4.1.36.Final</version>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.5</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.7</version>
         </dependency>
 
         <dependency>
@@ -117,9 +87,21 @@
         </dependency>
 
         <dependency>
-            <groupId>com.spotify</groupId>
-            <artifactId>docker-client</artifactId>
-            <version>3.5.12</version>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.8</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+            <version>4.5.8</version>
         </dependency>
     </dependencies>
 

+ 0 - 16
common/src/main/java/cn/reghao/autodop/common/config/DeployResult.java

@@ -1,16 +0,0 @@
-package cn.reghao.autodop.common.config;
-
-import lombok.Data;
-
-/**
- * 部署操作的结果
- *
- * @author reghao
- * @date 2019-10-10 00:51:36
- */
-@Data
-public class DeployResult {
-    private String host;
-    private int code;
-    private String msg;
-}

+ 0 - 16
common/src/main/java/cn/reghao/autodop/common/config/StaticDeployConfig.java

@@ -1,16 +0,0 @@
-package cn.reghao.autodop.common.config;
-
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2020-01-03 08:43:03
- */
-@Data
-public class StaticDeployConfig {
-    private String appId;
-    private String appPath;
-    private String packerType;
-    private String runningDir;
-    private String host;
-}

+ 0 - 63
common/src/main/java/cn/reghao/autodop/common/deploy/BuilderUtil.java

@@ -1,63 +0,0 @@
-package cn.reghao.autodop.common.deploy;
-
-import cn.reghao.autodop.common.deploy.vc.GitImpl;
-import cn.reghao.autodop.common.deploy.vc.SvnImpl;
-import cn.reghao.autodop.common.deploy.vc.VersionControl;
-import cn.reghao.autodop.common.module.sys.GlobalConfig;
-import cn.reghao.autodop.common.module.sys.entity.AppConfig;
-import cn.reghao.autodop.common.module.sys.entity.deploy.RepoConfig;
-import cn.reghao.autodop.common.utils.FileUtil;
-import cn.reghao.autodop.common.utils.text.ReplaceCharacter;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2019-11-16 21:55:31
- */
-public class BuilderUtil {
-    private static GlobalConfig config = GlobalConfig.getInstance();
-
-    /**
-     * 复制源码到编译目录
-     *
-     * @param
-     * @date 2019-12-03 上午9:55
-     */
-    public static void copyToCompileDir(String appLocalRepo, AppConfig appConfig) throws IOException {
-        String appCompileDir = config.getCompileDir() + "/" + appConfig.getAppId();
-
-        File compileDir = new File(appCompileDir);
-        if (!compileDir.exists() && !FileUtil.mkdir(compileDir)) {
-            return;
-        } else {
-            FileUtil.eraseDir(compileDir);
-        }
-
-        String remoteRepo = appConfig.getRepo();
-        FileUtil.copyDirToDir(appLocalRepo + dirname(remoteRepo), appCompileDir);
-        List<String> dependencyRepos = appConfig.getDependencyRepos();
-        for (String repo : dependencyRepos) {
-            FileUtil.copyDirToDir(appLocalRepo + dirname(repo), appCompileDir);
-        }
-    }
-
-    public static String dirname(String svnUrl) {
-        int index = svnUrl.lastIndexOf("/");
-        return svnUrl.substring(index);
-    }
-
-    public static void replaceCharacter(String appCompileDir) {
-        FileUtil.traversal(appCompileDir, new ReplaceCharacter());
-    }
-
-    public static VersionControl versionControl(RepoConfig repoConfig) {
-        if (repoConfig.getRepoType() == 1) {
-            return new SvnImpl(repoConfig.getUsername(), repoConfig.getPassword());
-        } else {
-            return new GitImpl(repoConfig.getUsername(), repoConfig.getPassword());
-        }
-    }
-}

+ 0 - 128
common/src/main/java/cn/reghao/autodop/common/deploy/StaticDeploy.java

@@ -1,128 +0,0 @@
-package cn.reghao.autodop.common.deploy;
-
-import cn.reghao.autodop.common.deploy.vc.VersionControl;
-import cn.reghao.autodop.common.module.sys.entity.AppConfig;
-import cn.reghao.autodop.common.utils.FileUtil;
-import cn.reghao.autodop.common.result.DeployResult;
-import cn.reghao.autodop.common.utils.compression.ZipUtil;
-import cn.reghao.autodop.common.utils.spring.SpringBootUtil;
-import lombok.extern.slf4j.Slf4j;
-
-import java.io.File;
-import java.io.IOException;
-import java.time.LocalDate;
-
-/**
- * 部署静态文件
- *
- * @author reghao
- * @date 2019-10-08 16:15:05
- */
-@Slf4j
-public class StaticDeploy {
-    public DeployResult deploy(AppConfig appConfig) throws Exception {
-        String app = appConfig.getAppId();
-        String runningDir = appConfig.getRunningDir();
-
-        checkAndSetDir(runningDir);
-        String remoteRepo = appConfig.getRepo();
-        String localRepo = runningDir + remoteRepo.substring(remoteRepo.lastIndexOf("/"));
-        VersionControl vc = BuilderUtil.versionControl(appConfig.getRepoConfig());
-
-        long oldVersion = -1;
-        if (new File(localRepo).exists()) {
-            oldVersion = vc.localVersion(localRepo);
-        }
-        long newVersion = vc.update(remoteRepo, localRepo);
-        if (oldVersion == newVersion) {
-            // 版本一致,不需更新
-            return new DeployResult();
-        } else if (oldVersion > newVersion) {
-            throw new Exception("版本更新错误");
-        }
-
-        String appDir = appConfig.getRunningDir() + "/" + app + "/app";
-        if (backup(appDir, oldVersion)) {
-            FileUtil.eraseDir(appDir);
-        }
-
-        // 执行应用相关的逻辑
-        if ("dnkt-mgr".equals(app)) {
-            String appDir1 = "/src";
-            String appDir2 = "/start";
-
-            if (!FileUtil.mkdir(appDir + appDir1) ||
-                    !FileUtil.mkdir(appDir + appDir2)) {
-                return new DeployResult();
-            }
-
-            FileUtil.copyDir(localRepo + appDir1, appDir + appDir1);
-            FileUtil.copyDir(localRepo + appDir2, appDir + appDir2);
-
-            if (!modifyConfig(appDir + appDir1)) {
-                return new DeployResult();
-            }
-        } else {
-            FileUtil.copyDir(localRepo + appConfig.getEntryDir(), appDir);
-        }
-
-        //ding.send(env + " -> " + app + "已更新...");
-        return new DeployResult();
-    }
-
-    /**
-     * 备份应用
-     *
-     * @param
-     * @return
-     * @date 2019-10-30 下午4:53
-     */
-    private boolean backup(String appPath, long version) throws IOException {
-        if (!new File(appPath).exists() || version == -1) {
-            log.info("{} 不存在,无需备份", appPath);
-            return false;
-        }
-
-        String dirpath = appPath + "-" + version + "-" + LocalDate.now().toString();
-        File bakfile = new File(dirpath + ".zip");
-        if (bakfile.exists()) {
-            log.info("备份文件 {} 已存在", bakfile.getAbsolutePath());
-            return false;
-        }
-
-        ZipUtil.zip(appPath, dirpath);
-        return true;
-    }
-
-    /**
-     * 修改应用配置
-     *
-     * @param
-     * @return
-     * @date 2019-10-30 下午7:40
-     */
-    private boolean modifyConfig(String appdir) throws IOException {
-        String suffix;
-        if ("dev".equals(SpringBootUtil.getEnv())) {
-            suffix = "test";
-        } else {
-            suffix = SpringBootUtil.getEnv();
-        }
-
-        String configFile = appdir + "/config.js";
-        String oidcconfigFile = appdir + "/controller/oidcconfig.js";
-
-        return FileUtil.copyFile(configFile + "." + suffix, configFile) &&
-                FileUtil.copyFile(oidcconfigFile + "." + suffix, oidcconfigFile);
-    }
-
-    private void checkAndSetDir(String dirpath) {
-        File dir = new File(dirpath);
-        if (!dir.exists()) {
-            dir.mkdir();
-        } else if (dir.isFile()) {
-            dir.delete();
-            dir.mkdir();
-        }
-    }
-}

+ 0 - 58
common/src/main/java/cn/reghao/autodop/common/deploy/vc/GitImpl.java

@@ -1,58 +0,0 @@
-package cn.reghao.autodop.common.deploy.vc;
-
-import org.eclipse.jgit.api.CloneCommand;
-import org.eclipse.jgit.api.Git;
-import org.eclipse.jgit.api.errors.GitAPIException;
-import org.eclipse.jgit.internal.storage.file.FileRepository;
-import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
-
-import java.io.File;
-
-/**
- * TODO git 实现
- *
- * @author reghao
- * @date 2019-10-12 22:22:00
- */
-public class GitImpl implements VersionControl {
-    private final UsernamePasswordCredentialsProvider credentials;
-
-    public GitImpl(String username, String password) {
-        this.credentials = new UsernamePasswordCredentialsProvider(username, password);
-    }
-
-    @Override
-    public long update(String remote, String local) throws Exception {
-        File localRepo = new File(local);
-        if (!localRepo.exists()) {
-            cloneRepo(remote, local);
-        } else {
-            Git git = new Git(new FileRepository(local + "/.git"));
-            git.pull().setRemoteBranchName("master").setCredentialsProvider(credentials).call();
-            return -1;
-        }
-        return -1;
-    }
-
-    private void cloneRepo(String remote, String local) throws GitAPIException {
-        CloneCommand clone = Git.cloneRepository();
-        Git git = clone.setURI(remote)
-                .setBranch("master")
-                .setDirectory(new File(local))
-                .setCredentialsProvider(credentials)
-                .call();
-    }
-
-    @Override
-    public long localVersion(String local) throws Exception {
-        return -1;
-    }
-
-    public static void main(String[] args) throws Exception {
-        GitImpl git = new GitImpl("git", "gjs");
-        String remote = "git@git.reghao.cn:/git/autodop.git";
-        String local = "/home/reghao/tmp/opt/repos/git";
-
-        git.update(remote, local);
-    }
-}

+ 0 - 77
common/src/main/java/cn/reghao/autodop/common/deploy/vc/SvnImpl.java

@@ -1,77 +0,0 @@
-package cn.reghao.autodop.common.deploy.vc;
-
-import org.tmatesoft.svn.core.SVNDepth;
-import org.tmatesoft.svn.core.SVNException;
-import org.tmatesoft.svn.core.SVNURL;
-import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
-import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
-import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
-import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions;
-import org.tmatesoft.svn.core.wc.*;
-
-import java.io.File;
-
-/**
- * svn 实现
- *
- * @author reghao
- * @date 2019-09-07 16:18:46
- */
-public class SvnImpl implements VersionControl {
-    private SVNUpdateClient updateClient;
-    private ISVNAuthenticationManager authManager;
-
-    public SvnImpl(String username, String password) {
-        DAVRepositoryFactory.setup();
-        SVNRepositoryFactoryImpl.setup();
-
-        authManager = SVNWCUtil.createDefaultAuthenticationManager(username, password.toCharArray());
-        DefaultSVNOptions options = SVNWCUtil.createDefaultOptions(true);
-
-        SVNClientManager clientManager = SVNClientManager.newInstance(options, authManager);
-        updateClient = clientManager.getUpdateClient();
-        updateClient.setIgnoreExternals(false);
-    }
-
-    /**
-     * TODO 多线程问题
-     */
-    @Override
-    public synchronized long update(String remote, String local) throws SVNException {
-        File localRepo = new File(local);
-        if (!localRepo.exists()) {
-            checkout(remote, localRepo);
-        } else {
-            updateClient.doUpdate(
-                    localRepo, SVNRevision.HEAD, SVNDepth.INFINITY, true, false);
-        }
-
-        return localVersion(local);
-    }
-
-    /**
-     * 从远程仓库拉取代码
-     *
-     * @param
-     * @return
-     * @date 2020-01-06 下午3:48
-     */
-    private void checkout(String remote, File local) throws SVNException {
-        SVNURL remoteRepo = SVNURL.parseURIEncoded(remote);
-        updateClient.doCheckout(remoteRepo, local,
-                SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.UNKNOWN, true);
-    }
-
-    @Override
-    public long localVersion(String local) throws SVNException {
-        File file = new File(local);
-        if (!file.exists()) {
-            return -1;
-        }
-
-        SVNStatusClient statusClient = SVNClientManager.newInstance().getStatusClient();
-        final SVNStatus status = statusClient.doStatus(new File(local), false);
-
-        return status != null ? status.getCommittedRevision().getNumber() : -1;
-    }
-}

+ 0 - 28
common/src/main/java/cn/reghao/autodop/common/deploy/vc/VersionControl.java

@@ -1,28 +0,0 @@
-package cn.reghao.autodop.common.deploy.vc;
-
-/**
- * 版本控制
- *
- * @author reghao
- * @date 2019-10-12 22:24:28
- */
-public interface VersionControl {
-    /**
-     * 更新仓库
-     *
-     * @param remote 远程仓库路径
-     * @param local 本地仓库路径
-     * @return 当前仓库的版本
-     * @date 2019-10-12 下午11:08
-     */
-    long update(String remote, String local) throws Exception;
-
-    /**
-     * 本地仓库版本
-     *
-     * @param local 本地仓库路径
-     * @return 本地仓库版本
-     * @date 2019-10-30 下午5:23
-     */
-    long localVersion(String local) throws Exception;
-}

+ 0 - 1
common/src/main/java/cn/reghao/autodop/common/grpc/facade/DeployService.java

@@ -2,7 +2,6 @@ package cn.reghao.autodop.common.grpc.facade;
 
 import cn.reghao.autodop.common.grpc.common.annotation.GrpcService;
 import cn.reghao.autodop.common.grpc.common.serializer.SerializerType;
-import cn.reghao.autodop.common.result.DeployResult;
 
 /**
  * 部署服务

+ 0 - 23
common/src/main/java/cn/reghao/autodop/common/module/sys/AppStatus.java

@@ -1,23 +0,0 @@
-package cn.reghao.autodop.common.module.sys;
-
-/**
- * 应用当前状态
- *
- * @author reghao
- * @date 2019-10-18 14:31:29
- */
-public enum AppStatus {
-    UP("UP"),
-    DOWN("DOWN");
-
-    private String code;
-    private String status;
-
-    AppStatus(String status) {
-        this.status = status;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-}

+ 0 - 18
common/src/main/java/cn/reghao/autodop/common/module/sys/DeployConfig.java

@@ -1,18 +0,0 @@
-package cn.reghao.autodop.common.module.sys;
-
-import cn.reghao.autodop.common.module.sys.entity.Notifier;
-import cn.reghao.autodop.common.module.sys.entity.deploy.PackConfig;
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2020-01-03 08:43:03
- */
-@Data
-public class DeployConfig {
-    private String appId;
-    private String appPath;
-    private String runningDir;
-    private PackConfig packConfig;
-    private Notifier notifier;
-}

+ 0 - 19
common/src/main/java/cn/reghao/autodop/common/module/sys/FileEntity.java

@@ -1,19 +0,0 @@
-package cn.reghao.autodop.common.module.sys;
-
-import cn.reghao.autodop.common.module.sys.entity.BaseEntityImpl;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.persistence.Entity;
-
-/**
- * @author reghao
- * @date 2019-11-15 13:34:34
- */
-@Data
-public class FileEntity {
-    // config 或 script
-    private int type;
-    private String name;
-    private String content;
-}

+ 0 - 98
common/src/main/java/cn/reghao/autodop/common/module/sys/GlobalConfig.java

@@ -1,98 +0,0 @@
-package cn.reghao.autodop.common.module.sys;
-
-import cn.reghao.autodop.common.module.sys.entity.AppConfig;
-import cn.reghao.autodop.common.module.sys.entity.ProjectConfig;
-import cn.reghao.autodop.common.module.sys.entity.SysConfig;
-import cn.reghao.autodop.common.utils.JsonUtil;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 全局配置单例(线程不安全)
- *
- * @author reghao
- * @date 2019-09-26 16:22:55
- */
-@Slf4j
-@Data
-public class GlobalConfig {
-    private SysConfig sysConfig;
-    private Map<String, ProjectConfig> projects;
-    private Map<String, AppConfig> apps;
-
-    private static GlobalConfig instance = null;
-
-    public static GlobalConfig getInstance() {
-        if (instance == null) {
-            instance = new GlobalConfig();
-        }
-
-        return instance;
-    }
-
-    private GlobalConfig() {
-    }
-
-    public void initSysConfig(String sysConfigFile) throws IOException {
-        SysConfig sysconfig = (SysConfig) JsonUtil.jsonToObject(new File(sysConfigFile), SysConfig.class);
-        if (sysconfig != null) {
-            sysConfig = new SysConfig(sysconfig);
-        }
-    }
-
-    public void initSysConfig(SysConfig sysConfig) {
-        this.sysConfig = new SysConfig().deepCopy(sysConfig);
-    }
-
-    public void initProjectConfig(String projectConfigFile) throws IOException {
-        ProjectConfig.ProjectMap projectMap = (ProjectConfig.ProjectMap)
-                JsonUtil.jsonToObject(new File(projectConfigFile), ProjectConfig.ProjectMap.class);
-        if (projectMap != null) {
-            projects = projectMap.getProjects();
-        }
-    }
-
-    public void initProjects(List<ProjectConfig> projectConfigs) {
-        this.projects = new HashMap<>();
-        for (ProjectConfig projectConfig : projectConfigs) {
-            this.projects.put(projectConfig.getProjectId(), projectConfig);
-        }
-    }
-
-    public void initAppConfig(String appConfigFile) throws IOException {
-        AppConfig.AppMap appMap = (AppConfig.AppMap)
-                JsonUtil.jsonToObject(new File(appConfigFile), AppConfig.AppMap.class);
-        if (appMap != null) {
-            apps = appMap.getApps();
-        }
-    }
-
-    public void initApps(List<AppConfig> appConfigs) {
-        this.apps = new HashMap<>();
-        for (AppConfig appConfig : appConfigs) {
-            this.apps.put(appConfig.getAppId(), new AppConfig().deepCopy(appConfig));
-        }
-    }
-
-    public AppConfig getByAppId(String appId) {
-        return apps.get(appId);
-    }
-
-    public ProjectConfig getByProjectId(String projectId) {
-        return projects.get(projectId);
-    }
-
-    public String getLocalRepo() {
-        return sysConfig.getLocalRepo();
-    }
-
-    public String getCompileDir() {
-        return sysConfig.getCompileDir();
-    }
-}

+ 0 - 20
common/src/main/java/cn/reghao/autodop/common/module/sys/NodeInfo.java

@@ -1,20 +0,0 @@
-package cn.reghao.autodop.common.module.sys;
-
-import cn.reghao.autodop.common.module.sys.entity.BaseEntityImpl;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 每个节点的信息
- *
- * @author reghao
- * @date 2019-08-23 16:42:22
- */
-@Data
-@EqualsAndHashCode(callSuper = false)
-public class NodeInfo {
-    private String host;
-    private int port;
-    private String healthCheck;
-    private String status;
-}

+ 0 - 15
common/src/main/java/cn/reghao/autodop/common/module/sys/StaticDeployConfig.java

@@ -1,15 +0,0 @@
-package cn.reghao.autodop.common.module.sys;
-
-import cn.reghao.autodop.common.module.sys.entity.AppConfig;
-import cn.reghao.autodop.common.module.sys.entity.SysConfig;
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2020-01-03 08:43:03
- */
-@Data
-public class StaticDeployConfig {
-    private SysConfig sysConfig;
-    private AppConfig appConfig;
-}

+ 0 - 27
common/src/main/java/cn/reghao/autodop/common/module/sys/constant/AppType.java

@@ -1,27 +0,0 @@
-package cn.reghao.autodop.common.module.sys.constant;
-
-/**
- * 应用类型
- *
- * @author reghao
- * @date 2019-10-18 14:31:29
- */
-public enum AppType {
-    /*
-    * 静态文件
-    * */
-    Static(0),
-    Dotnet(1),
-    Maven(2),
-    NPM(3);
-
-    private int code;
-
-    AppType(int code) {
-        this.code = code;
-    }
-
-    public int getCode() {
-        return code;
-    }
-}

+ 0 - 17
common/src/main/java/cn/reghao/autodop/common/module/sys/constant/NotifyType.java

@@ -1,17 +0,0 @@
-package cn.reghao.autodop.common.module.sys.constant;
-
-/**
- * @author reghao
- * @date 2020-01-02 16:55:51
- */
-public enum NotifyType {
-    SMS(0),
-    EMAIL(1),
-    DING(2);
-
-    private int type;
-
-    NotifyType(int type) {
-        this.type = type;
-    }
-}

+ 0 - 25
common/src/main/java/cn/reghao/autodop/common/module/sys/constant/PackType.java

@@ -1,25 +0,0 @@
-package cn.reghao.autodop.common.module.sys.constant;
-
-/**
- * 应用打包类型
- *
- * @author reghao
- * @date 2019-11-15 21:59:35
- */
-public enum PackType {
-    // docker 应用
-    Docker(1),
-    DotnetBinary(2),
-    Jar(3),
-    War(4);
-
-    private int code;
-
-    PackType(int code) {
-        this.code = code;
-    }
-
-    public int getCode() {
-        return code;
-    }
-}

+ 0 - 22
common/src/main/java/cn/reghao/autodop/common/module/sys/constant/RepoType.java

@@ -1,22 +0,0 @@
-package cn.reghao.autodop.common.module.sys.constant;
-
-/**
- * 版本管理系统类型
- *
- * @author reghao
- * @date 2019-11-15 22:41:04
- */
-public enum RepoType {
-    SVN(1),
-    GIT(2);
-
-    private int code;
-
-    RepoType(int code) {
-        this.code = code;
-    }
-
-    public int getCode() {
-        return code;
-    }
-}

+ 0 - 100
common/src/main/java/cn/reghao/autodop/common/module/sys/entity/AppConfig.java

@@ -1,100 +0,0 @@
-package cn.reghao.autodop.common.module.sys.entity;
-
-import cn.reghao.autodop.common.module.sys.GlobalConfig;
-import cn.reghao.autodop.common.module.sys.entity.deploy.CompileConfig;
-import cn.reghao.autodop.common.module.sys.entity.deploy.PackConfig;
-import cn.reghao.autodop.common.module.sys.entity.deploy.RepoConfig;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
-import java.util.*;
-
-/**
- * 应用配置
- *
- * @author reghao
- * @date 2019-08-23 16:42:22
- */
-@Data
-public class AppConfig {
-    // 全局唯一
-    private String appId;
-    private String description;
-    private List<String> hosts;
-    // TODO 考虑部署机器上的防火墙问题
-    private int port;
-    private String healthCheck;
-    // 应用编译的输出目录
-    private String entryDir;
-    // 应用的运行目录
-    private String runningDir;
-    // TODO 应用配置文件
-    /*@ElementCollection
-    private List<FileEntity> configFiles;*/
-    // TODO 配置文件的本地目录,后期去除,配置文件全部放在数据库
-    private String configDir;
-    private String projectId;
-    private String repo;
-    private List<String> dependencyRepos;
-    // 最后三个属性和 projectId 互斥
-    private RepoConfig repoConfig;
-    private CompileConfig compileConfig;
-    private PackConfig packConfig;
-    private Notifier notifier;
-
-    public CompileConfig getCompileConfig() {
-        if (compileConfig != null) {
-            return compileConfig;
-        }
-
-        GlobalConfig globalConfig = GlobalConfig.getInstance();
-        return globalConfig.getByProjectId(projectId).getCompileConfig();
-    }
-
-    public PackConfig getPackConfig() {
-        if (packConfig != null) {
-            return packConfig;
-        }
-
-        GlobalConfig globalConfig = GlobalConfig.getInstance();
-        return globalConfig.getByProjectId(projectId).getPackConfig();
-    }
-
-    public Notifier getNotifier() {
-        if (notifier != null) {
-            return notifier;
-        }
-
-        GlobalConfig globalConfig = GlobalConfig.getInstance();
-        return globalConfig.getByProjectId(projectId).getNotifier();
-    }
-
-    public AppConfig deepCopy(AppConfig appConfig) {
-        this.appId = appConfig.getAppId();
-        this.description = appConfig.getDescription();
-        this.hosts = new ArrayList<>(appConfig.getHosts());
-        this.port = appConfig.getPort();
-        this.healthCheck = appConfig.getHealthCheck();
-        this.entryDir = appConfig.getEntryDir();
-        this.runningDir = appConfig.getRunningDir();
-        //this.configFiles = new ArrayList<>(appConfig.getConfigFiles());
-        this.configDir = appConfig.getConfigDir();
-
-        this.projectId = appConfig.getProjectId();
-        this.repo = appConfig.getRepo();
-        this.dependencyRepos = new ArrayList<>(appConfig.getDependencyRepos());
-        this.repoConfig = appConfig.getRepoConfig();
-        this.compileConfig = appConfig.getCompileConfig();
-        this.packConfig = appConfig.getPackConfig();
-        this.notifier = appConfig.getNotifier();
-
-        return this;
-    }
-
-    @Data
-    public class AppMap {
-        private Map<String, AppConfig> apps;
-    }
-}

+ 0 - 34
common/src/main/java/cn/reghao/autodop/common/module/sys/entity/BaseEntityImpl.java

@@ -1,34 +0,0 @@
-package cn.reghao.autodop.common.module.sys.entity;
-
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.hibernate.annotations.*;
-
-import javax.persistence.*;
-import javax.persistence.Entity;
-import javax.persistence.Table;
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * TODO 非抽象类在数据库中会有一个表
- *
- * @author reghao
- * @date 2019-10-18 14:42:48
- */
-@Entity
-@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-@Table
-@Data
-@NoArgsConstructor
-public class BaseEntityImpl implements Serializable {
-    private static final long serialVersionUID = 1L;
-    @Id
-    @GeneratedValue(strategy = GenerationType.TABLE)
-    protected Integer id;
-
-    @CreationTimestamp
-    @Column(updatable = false)
-    protected Date createTime;
-}

+ 0 - 22
common/src/main/java/cn/reghao/autodop/common/module/sys/entity/Notifier.java

@@ -1,22 +0,0 @@
-package cn.reghao.autodop.common.module.sys.entity;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.persistence.*;
-
-/**
- * 通知接口
- *
- * @author reghao
- * @date 2020-01-02 17:00:50
- */
-@Data
-public class Notifier {
-    private String notifierId;
-    // 1 - SMS
-    // 2 - EMAIL
-    // 3 - DING
-    private int notifierType;
-    private String webhook;
-}

+ 0 - 33
common/src/main/java/cn/reghao/autodop/common/module/sys/entity/ProjectConfig.java

@@ -1,33 +0,0 @@
-package cn.reghao.autodop.common.module.sys.entity;
-
-import cn.reghao.autodop.common.module.sys.entity.deploy.CompileConfig;
-import cn.reghao.autodop.common.module.sys.entity.deploy.PackConfig;
-import cn.reghao.autodop.common.module.sys.entity.deploy.RepoConfig;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
-import java.util.Map;
-
-/**
- * 项目配置
- *
- * @author reghao
- * @date 2019-11-10 18:38:59
- */
-@Data
-public class ProjectConfig {
-    private String projectId;
-    private String description;
-    private String repo;
-    private RepoConfig repoConfig;
-    private CompileConfig compileConfig;
-    private PackConfig packConfig;
-    private Notifier notifier;
-
-    @Data
-    public class ProjectMap {
-        private Map<String, ProjectConfig> projects;
-    }
-}

+ 0 - 50
common/src/main/java/cn/reghao/autodop/common/module/sys/entity/SysConfig.java

@@ -1,50 +0,0 @@
-package cn.reghao.autodop.common.module.sys.entity;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
-
-/**
- * autodop 系统全局配置
- * sys_config 表中应始终只存在一条记录
- *
- * @author reghao
- * @date 2019-11-08 22:07:45
- */
-@Data
-@NoArgsConstructor
-public class SysConfig {
-    // 本地仓库
-    private String localRepo;
-    // 编译目录
-    private String compileDir;
-    // 应用打包后存放的目录
-    private String packDir;
-    private Notifier notifier;
-    private String projectConfigFile;
-    private String appConfigFile;
-
-    // 浅拷贝
-    public SysConfig(SysConfig sysConfig) {
-        this.localRepo = sysConfig.getLocalRepo();
-        this.compileDir = sysConfig.getCompileDir();
-        this.packDir = sysConfig.getPackDir();
-        this.notifier = sysConfig.getNotifier();
-        this.projectConfigFile = sysConfig.getProjectConfigFile();
-        this.appConfigFile = sysConfig.getAppConfigFile();
-    }
-
-    // 深拷贝
-    public SysConfig deepCopy(SysConfig sysConfig) {
-        this.localRepo = sysConfig.getLocalRepo();
-        this.compileDir = sysConfig.getCompileDir();
-        this.packDir = sysConfig.getPackDir();
-        this.notifier = sysConfig.getNotifier();
-        this.projectConfigFile = sysConfig.getProjectConfigFile();
-        this.appConfigFile = sysConfig.getAppConfigFile();
-        return this;
-    }
-}

+ 0 - 29
common/src/main/java/cn/reghao/autodop/common/module/sys/entity/deploy/CompileConfig.java

@@ -1,29 +0,0 @@
-package cn.reghao.autodop.common.module.sys.entity.deploy;
-
-import cn.reghao.autodop.common.module.sys.entity.BaseEntityImpl;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
-/**
- * 编译配置
- *
- * @author reghao
- * @date 2020-01-03 13:28:55
- */
-@Data
-public class CompileConfig {
-    private String compileId;
-    // 应用类型
-    // 0 - Static
-    // 1 - NPM
-    // 2 - Dotnet
-    // 3 - Maven
-    private Integer appType;
-    // 编译命令或脚本
-    private String script;
-}

+ 0 - 30
common/src/main/java/cn/reghao/autodop/common/module/sys/entity/deploy/PackConfig.java

@@ -1,30 +0,0 @@
-package cn.reghao.autodop.common.module.sys.entity.deploy;
-
-import cn.reghao.autodop.common.module.sys.entity.BaseEntityImpl;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
-/**
- * 打包配置
- *
- * @author reghao
- * @date 2020-01-03 13:29:03
- */
-@Data
-public class PackConfig {
-    private String packId;
-    // 打包类型
-    // 1 - Docker 应用
-    // 2 - Dotnet 二进制应用
-    // 3 - Jar 应用
-    // 4 - War 应用
-    private int packType;
-    // 应用生成的路径
-    // 可以为 dockerRegistry 或文件系统路径
-    private String appPath;
-}

+ 0 - 27
common/src/main/java/cn/reghao/autodop/common/module/sys/entity/deploy/RepoConfig.java

@@ -1,27 +0,0 @@
-package cn.reghao.autodop.common.module.sys.entity.deploy;
-
-import cn.reghao.autodop.common.module.sys.entity.BaseEntityImpl;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
-/**
- * 仓库配置
- *
- * @author reghao
- * @date 2020-01-03 13:28:39
- */
-@Data
-public class RepoConfig {
-    private String repoId;
-    // 仓库类型
-    // 1 - svn
-    // 2 - git
-    private int repoType;
-    private String username;
-    private String password;
-}

+ 6 - 6
common/src/main/java/cn/reghao/autodop/common/module/monitor/Cpu.java → common/src/main/java/cn/reghao/autodop/common/monitor/Cpu.java

@@ -1,10 +1,10 @@
-package cn.reghao.autodop.common.module.monitor;
+package cn.reghao.autodop.common.monitor;
 
-import cn.reghao.autodop.common.module.monitor.pojo.CpuInfo;
-import cn.reghao.autodop.common.module.monitor.pojo.CpuUsage;
-import cn.reghao.autodop.common.module.monitor.utils.AbstractCalculator;
-import cn.reghao.autodop.common.module.monitor.utils.BeanConversion;
-import cn.reghao.autodop.common.module.monitor.utils.CpuCalculator;
+import cn.reghao.autodop.common.monitor.pojo.CpuInfo;
+import cn.reghao.autodop.common.monitor.pojo.CpuUsage;
+import cn.reghao.autodop.common.monitor.utils.AbstractCalculator;
+import cn.reghao.autodop.common.monitor.utils.BeanConversion;
+import cn.reghao.autodop.common.monitor.utils.CpuCalculator;
 import cn.reghao.autodop.common.utils.text.TextFile;
 import com.google.gson.Gson;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/Disk.java → common/src/main/java/cn/reghao/autodop/common/monitor/Disk.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.module.monitor;
+package cn.reghao.autodop.common.monitor;
 
 import cn.reghao.autodop.common.utils.text.TextFile;
 import lombok.extern.slf4j.Slf4j;

+ 5 - 5
common/src/main/java/cn/reghao/autodop/common/module/monitor/Memory.java → common/src/main/java/cn/reghao/autodop/common/monitor/Memory.java

@@ -1,10 +1,10 @@
-package cn.reghao.autodop.common.module.monitor;
+package cn.reghao.autodop.common.monitor;
 
 import cn.reghao.autodop.common.utils.text.TextFile;
-import cn.reghao.autodop.common.module.monitor.utils.BeanConversion;
-import cn.reghao.autodop.common.module.monitor.utils.MemCalculator;
-import cn.reghao.autodop.common.module.monitor.pojo.MemInfo;
-import cn.reghao.autodop.common.module.monitor.utils.AbstractCalculator;
+import cn.reghao.autodop.common.monitor.utils.BeanConversion;
+import cn.reghao.autodop.common.monitor.utils.MemCalculator;
+import cn.reghao.autodop.common.monitor.pojo.MemInfo;
+import cn.reghao.autodop.common.monitor.utils.AbstractCalculator;
 import com.google.gson.Gson;
 import lombok.extern.slf4j.Slf4j;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/Network.java → common/src/main/java/cn/reghao/autodop/common/monitor/Network.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.module.monitor;
+package cn.reghao.autodop.common.monitor;
 
 import cn.reghao.autodop.common.utils.text.TextFile;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/ProcessState.java → common/src/main/java/cn/reghao/autodop/common/monitor/ProcessState.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.module.monitor;
+package cn.reghao.autodop.common.monitor;
 
 import lombok.extern.slf4j.Slf4j;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/SysInfo.java → common/src/main/java/cn/reghao/autodop/common/monitor/SysInfo.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.module.monitor;
+package cn.reghao.autodop.common.monitor;
 
 import lombok.extern.slf4j.Slf4j;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/pojo/CpuInfo.java → common/src/main/java/cn/reghao/autodop/common/monitor/pojo/CpuInfo.java

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

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/pojo/CpuUsage.java → common/src/main/java/cn/reghao/autodop/common/monitor/pojo/CpuUsage.java

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

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/pojo/DiskStats.java → common/src/main/java/cn/reghao/autodop/common/monitor/pojo/DiskStats.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.module.monitor.pojo;
+package cn.reghao.autodop.common.monitor.pojo;
 
 /**
  * /proc/diskstats 文件内容

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/pojo/DiskUsage.java → common/src/main/java/cn/reghao/autodop/common/monitor/pojo/DiskUsage.java

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

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/pojo/MemInfo.java → common/src/main/java/cn/reghao/autodop/common/monitor/pojo/MemInfo.java

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

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/pojo/NetState.java → common/src/main/java/cn/reghao/autodop/common/monitor/pojo/NetState.java

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

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/pojo/ProcessInfo.java → common/src/main/java/cn/reghao/autodop/common/monitor/pojo/ProcessInfo.java

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

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/utils/AbstractCalculator.java → common/src/main/java/cn/reghao/autodop/common/monitor/utils/AbstractCalculator.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.module.monitor.utils;
+package cn.reghao.autodop.common.monitor.utils;
 
 import com.google.gson.Gson;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/utils/BeanConversion.java → common/src/main/java/cn/reghao/autodop/common/monitor/utils/BeanConversion.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.module.monitor.utils;
+package cn.reghao.autodop.common.monitor.utils;
 
 import java.lang.reflect.Field;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/utils/ByteConvert.java → common/src/main/java/cn/reghao/autodop/common/monitor/utils/ByteConvert.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.module.monitor.utils;
+package cn.reghao.autodop.common.monitor.utils;
 
 import lombok.extern.slf4j.Slf4j;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/utils/ByteType.java → common/src/main/java/cn/reghao/autodop/common/monitor/utils/ByteType.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.module.monitor.utils;
+package cn.reghao.autodop.common.monitor.utils;
 
 /**
  * @author reghao

+ 3 - 3
common/src/main/java/cn/reghao/autodop/common/module/monitor/utils/CpuCalculator.java → common/src/main/java/cn/reghao/autodop/common/monitor/utils/CpuCalculator.java

@@ -1,7 +1,7 @@
-package cn.reghao.autodop.common.module.monitor.utils;
+package cn.reghao.autodop.common.monitor.utils;
 
-import cn.reghao.autodop.common.module.monitor.vo.CpuStat;
-import cn.reghao.autodop.common.module.monitor.pojo.CpuUsage;
+import cn.reghao.autodop.common.monitor.vo.CpuStat;
+import cn.reghao.autodop.common.monitor.pojo.CpuUsage;
 
 /**
  * @author reghao

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/utils/IpAddressConversion.java → common/src/main/java/cn/reghao/autodop/common/monitor/utils/IpAddressConversion.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.module.monitor.utils;
+package cn.reghao.autodop.common.monitor.utils;
 
 /**
  * @author reghao

+ 3 - 3
common/src/main/java/cn/reghao/autodop/common/module/monitor/utils/MemCalculator.java → common/src/main/java/cn/reghao/autodop/common/monitor/utils/MemCalculator.java

@@ -1,7 +1,7 @@
-package cn.reghao.autodop.common.module.monitor.utils;
+package cn.reghao.autodop.common.monitor.utils;
 
-import cn.reghao.autodop.common.module.monitor.pojo.MemInfo;
-import cn.reghao.autodop.common.module.monitor.vo.MemUsage;
+import cn.reghao.autodop.common.monitor.pojo.MemInfo;
+import cn.reghao.autodop.common.monitor.vo.MemUsage;
 
 import java.util.LinkedHashMap;
 import java.util.Map;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/vo/CpuStat.java → common/src/main/java/cn/reghao/autodop/common/monitor/vo/CpuStat.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.module.monitor.vo;
+package cn.reghao.autodop.common.monitor.vo;
 
 import lombok.Data;
 

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/module/monitor/vo/MemUsage.java → common/src/main/java/cn/reghao/autodop/common/monitor/vo/MemUsage.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.module.monitor.vo;
+package cn.reghao.autodop.common.monitor.vo;
 
 import lombok.Data;
 

+ 0 - 35
common/src/main/java/cn/reghao/autodop/common/result/AbstractAppResult.java

@@ -1,35 +0,0 @@
-package cn.reghao.autodop.common.result;
-
-import cn.reghao.autodop.common.module.sys.entity.BaseEntityImpl;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-import javax.persistence.*;
-import java.io.Serializable;
-
-/**
- * 应用操作结果抽象类
- *
- * @author reghao
- * @date 2019-09-28 10:05:35
- */
-@Entity
-@Data
-@EqualsAndHashCode(callSuper = false)
-@NoArgsConstructor
-abstract public class AbstractAppResult extends BaseEntityImpl implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    protected Integer code;
-    protected String status;
-    private String msg;
-
-    public AbstractAppResult(ResultCode code, String msg) {
-        this.code = code.getCode();
-        this.status = code.getStatus();
-        this.msg = msg;
-    }
-
-    abstract public AbstractAppResult toResult();
-}

+ 0 - 16
common/src/main/java/cn/reghao/autodop/common/result/DeployResult.java

@@ -1,16 +0,0 @@
-package cn.reghao.autodop.common.result;
-
-import lombok.Data;
-
-/**
- * 部署操作的结果
- *
- * @author reghao
- * @date 2019-10-10 00:51:36
- */
-@Data
-public class DeployResult {
-    private String host;
-    private int code;
-    private String msg;
-}

+ 0 - 49
common/src/main/java/cn/reghao/autodop/common/result/DeployStage.java

@@ -1,49 +0,0 @@
-package cn.reghao.autodop.common.result;
-
-/**
- * 部署阶段
- *
- * @author reghao
- * @date 2019-10-17 16:21:23
- */
-public enum DeployStage {
-    UPDATE_FAIL("更新代码", 1,"失败", null),
-    UPDATE_SUCCESS("更新代码", 0, "成功", null),
-    UPDATE_UNCHANGE("更新代码", 0, "本地代码与远程代码版本一致", "本地代码与远程代码版本一致"),
-    PRECOMPILE_FAIL("编译前处理", 1, "失败", null),
-    PRECOMPILE_SUCCESS("编译前处理", 0, "成功", null),
-    COMPILE_FAIL("编译代码", 1, "失败", null),
-    COMPILE_SUCCESS("编译代码", 0, "成功", null),
-    PACKAPP_FAIL("打包应用", 1, "失败", null),
-    PACKAPP_SUCCESS("打包应用", 0, "成功", null),
-    DEPLOY_FAIL("部署应用", 1, "失败", null),
-    DEPLOY_SUCCESS("部署应用", 0, "成功", null);
-
-    private String type;
-    private int code;
-    private String status;
-    private String desc;
-
-    DeployStage(String type, int code, String status, String desc) {
-        this.type = type;
-        this.code = code;
-        this.status = status;
-        this.desc = desc;
-    }
-
-    public String getType() {
-        return this.type;
-    }
-
-    public int getCode() {
-        return code;
-    }
-
-    public String getStatus() {
-        return this.status;
-    }
-
-    public String getDesc() {
-        return desc;
-    }
-}

+ 0 - 35
common/src/main/java/cn/reghao/autodop/common/utils/HibernateLazyResolver.java

@@ -1,35 +0,0 @@
-package cn.reghao.autodop.common.utils;
-
-import lombok.extern.slf4j.Slf4j;
-import org.hibernate.FlushMode;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-
-import javax.persistence.EntityManagerFactory;
-
-/**
- * @author reghao
- * @date 2019-11-14 09:54:28
- */
-@Slf4j
-public class HibernateLazyResolver {
-    private Session session = null;
-    private EntityManagerFactory entityManagerFactory;
-
-    public HibernateLazyResolver(EntityManagerFactory entityManagerFactory) {
-        this.entityManagerFactory = entityManagerFactory;
-    }
-
-    public Session openSession() {
-        log.info("Opening single Hibernate Session in HibernateLazyResolver");
-        session = entityManagerFactory.unwrap(SessionFactory.class).openSession();
-        session.setHibernateFlushMode(FlushMode.AUTO);
-        return session;
-    }
-
-    public void releaseSession() {
-        log.info("Closing single Hibernate Session in HibernateLazyResolver");
-        //session.flush();
-        session.close();
-    }
-}

+ 0 - 6
dagent/pom.xml

@@ -25,12 +25,6 @@
             <artifactId>common</artifactId>
             <version>1.0.0</version>
         </dependency>
-
-        <dependency>
-            <groupId>org.apache.pdfbox</groupId>
-            <artifactId>pdfbox</artifactId>
-            <version>2.0.18</version>
-        </dependency>
     </dependencies>
 
     <profiles>

+ 22 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/config/DmasterProperties.java

@@ -0,0 +1,22 @@
+package cn.reghao.autodop.dagent.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author reghao
+ * @date 2019-08-27 00:17:55
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "dmaster")
+public class DmasterProperties {
+    @Value("${dmaster.address}")
+    private String address;
+    @Value("${dmaster.port}")
+    private int port;
+    @Value("${dmaster.api}")
+    private String api;
+}

+ 19 - 6
dagent/src/main/java/cn/reghao/autodop/dagent/utils/AfterStart.java

@@ -1,12 +1,13 @@
 package cn.reghao.autodop.dagent.utils;
 
+import cn.reghao.autodop.dagent.config.DmasterProperties;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
 
 /**
- * Spring Boot 应用启动完成后执行,所有的 bean 都已初始化
+ * Spring Boot 应用启动完成后执行,此时所有的 bean 都已初始化
  *
  * @author reghao
  * @date 2019-09-26 17:22:16
@@ -14,23 +15,35 @@ import org.springframework.stereotype.Component;
 @Slf4j
 @Component
 public class AfterStart implements ApplicationRunner {
+    private DmasterProperties properties;
+
+    public AfterStart(DmasterProperties properties) {
+        this.properties = properties;
+    }
+
     @Override
     public void run(ApplicationArguments args) throws Exception {
         activate();
     }
 
     /**
-     * 注册到 dmaster
+     * TODO 注册到 dmaster
      *
      * @param
      * @return
      * @date 2019-09-26 下午5:23
      */
     private void activate() throws Exception {
-        // TODO 放到配置文件中
-        String host = "http://localhost:4000";
-        host = "http://192.168.0.51:4000";
-        String api = "/api/node/register";
+        String url = httpApi(properties.getAddress(), properties.getPort(), properties.getApi());
         log.info("应用已启动");
     }
+
+    private String httpApi(String address, int port, String api) {
+        String prefix = "http://";
+        if (port != 80) {
+            return prefix + address + ":" + port + api;
+        } else {
+            return prefix + address + api;
+        }
+    }
 }

+ 2 - 16
dagent/src/main/java/cn/reghao/autodop/dagent/utils/BeforeShutdown.java

@@ -1,21 +1,5 @@
 package cn.reghao.autodop.dagent.utils;
 
-import cn.reghao.autodop.common.http.DefaultWebRequest;
-import cn.reghao.autodop.common.http.WebRequest;
-import cn.reghao.autodop.common.module.sys.AppStatus;
-import cn.reghao.autodop.common.module.sys.NodeInfo;
-import cn.reghao.autodop.common.module.monitor.Network;
-import cn.reghao.autodop.common.utils.JsonUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.catalina.connector.Connector;
-import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.event.ContextClosedEvent;
-
-import java.util.concurrent.Executor;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
 /**
  * 优雅关闭 Spring Boot 应用
  * TODO 考虑应用停止的多种情况
@@ -23,6 +7,7 @@ import java.util.concurrent.TimeUnit;
  * @author reghao
  * @date 2019-09-06 13:31:16
  */
+/*
 @Slf4j
 public class BeforeShutdown implements TomcatConnectorCustomizer, ApplicationListener<ContextClosedEvent> {
     private volatile Connector connector;
@@ -73,3 +58,4 @@ public class BeforeShutdown implements TomcatConnectorCustomizer, ApplicationLis
         String res = webRequest.postJson(host+api, json);
     }
 }
+*/

+ 0 - 5
dagent/src/main/resources/application-dev.yml

@@ -1,5 +0,0 @@
-spring:
-  datasource:
-    url: jdbc:mysql://localhost:3306/reghao_autodop_rdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
-    username: reghao
-    password: 12345678

+ 0 - 5
dagent/src/main/resources/application-prod.yml

@@ -1,5 +0,0 @@
-spring:
-  datasource:
-    url: jdbc:mysql://rdsr46zx53ze0ebceo1n168.mysql.rds.aliyuncs.com:3306/devops?useSSL=false&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
-    username: iquizoo
-    password: db62083886

+ 0 - 5
dagent/src/main/resources/application-test.yml

@@ -1,5 +0,0 @@
-spring:
-  datasource:
-    url: jdbc:mysql://192.168.0.54:3306/devops_tdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
-    username: azy_test
-    password: 123456

+ 6 - 28
dagent/src/main/resources/application.yml

@@ -1,35 +1,13 @@
-server:
-  port: 8088
 spring:
   application:
-    name: autodop-node
+    name: autodop-agent
   profiles:
+    # 这行注释后控制台没有日志
     active: @profile.active@
   grpc:
     enable: true
     port: 4001
-  servlet:
-    multipart:
-      max-file-size: 1GB
-      max-request-size: 1GB
-  datasource:
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    type: com.zaxxer.hikari.HikariDataSource
-    hikari:
-      minimum-idle: 5
-      maximum-pool-size: 10
-      auto-commit: true
-      idle-timeout: 30000
-      pool-name: EvaluationHikariCP
-      max-lifetime: 1800000
-      connection-timeout: 30000
-      connection-test-query: SELECT 1
-    jpa:
-      hibernate:
-        ddl-auto: update
-        naming-strategy: org.hibernate.cfg.DefaultNamingStrategy
-      properties:
-        hibernate:
-          hbm2ddl:
-            auto: update
-          dialect: org, String host.hibernate.dialect.MySQL57Dialect
+dmaster:
+  address: 192.168.0.222
+  port: 4000
+  api: /api/node

+ 54 - 40
dmaster/pom.xml

@@ -27,84 +27,98 @@
         </dependency>
 
         <dependency>
-            <groupId>com.aliyun.oss</groupId>
-            <artifactId>aliyun-sdk-oss</artifactId>
-            <version>2.8.3</version>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
 
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-cache</artifactId>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
         </dependency>
 
         <dependency>
-            <groupId>com.github.ben-manes.caffeine</groupId>
-            <artifactId>caffeine</artifactId>
+            <groupId>com.zaxxer</groupId>
+            <artifactId>HikariCP</artifactId>
+            <version>3.3.1</version>
         </dependency>
 
-        <!--<dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-core</artifactId>
-            <version>2.10.1</version>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
         </dependency>
 
         <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-            <version>2.10.1</version>
-        </dependency>-->
-
-        <!--<dependency>
-            <groupId>javax.xml.bind</groupId>
-            <artifactId>jaxb-api</artifactId>
-            <version>2.3.0</version>
+            <groupId>org.tmatesoft.svnkit</groupId>
+            <artifactId>svnkit</artifactId>
+            <version>1.9.3</version>
         </dependency>
+
         <dependency>
-            <groupId>com.sun.xml.bind</groupId>
-            <artifactId>jaxb-impl</artifactId>
-            <version>2.3.0</version>
+            <groupId>org.eclipse.jgit</groupId>
+            <artifactId>org.eclipse.jgit</artifactId>
+            <version>5.5.0.201909110433-r</version>
         </dependency>
+
         <dependency>
-            <groupId>com.sun.xml.bind</groupId>
-            <artifactId>jaxb-core</artifactId>
-            <version>2.3.0</version>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+            <version>2.8.3</version>
         </dependency>
-        <dependency>
-            <groupId>javax.activation</groupId>
-            <artifactId>activation</artifactId>
-            <version>1.1.1</version>
-        </dependency>-->
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-security</artifactId>
+            <artifactId>spring-boot-starter-cache</artifactId>
         </dependency>
 
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-redis</artifactId>
+            <groupId>com.github.ben-manes.caffeine</groupId>
+            <artifactId>caffeine</artifactId>
         </dependency>
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+            <artifactId>spring-boot-starter-security</artifactId>
         </dependency>
+
         <!--<dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.thymeleaf.extras</groupId>
             <artifactId>thymeleaf-extras-springsecurity5</artifactId>
             <version>RELEASE</version>
         </dependency>-->
 
-        <!--<dependency>
-            <groupId>org.springframework.session</groupId>
-            <artifactId>spring-session-data-redis</artifactId>
-        </dependency>-->
-
         <dependency>
             <groupId>cglib</groupId>
             <artifactId>cglib</artifactId>
             <version>3.3.0</version>
         </dependency>
+
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>2.9.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>2.9.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.maven.shared</groupId>
+            <artifactId>maven-invoker</artifactId>
+            <version>3.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.jcraft</groupId>
+            <artifactId>jsch</artifactId>
+            <version>0.1.55</version>
+        </dependency>
     </dependencies>
 
     <profiles>

+ 18 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/DmasterApplication.java

@@ -1,23 +1,35 @@
 package cn.reghao.autodop.dmaster;
 
 import cn.reghao.autodop.common.grpc.common.annotation.GrpcServiceScan;
+import cn.reghao.autodop.dmaster.utils.BeforeShutdown;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
-import org.springframework.cache.annotation.EnableCaching;
-import org.springframework.context.annotation.ComponentScan;
+import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
+import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
+import org.springframework.context.annotation.Bean;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-import org.springframework.scheduling.annotation.EnableScheduling;
 
 //@EnableScheduling
 @SpringBootApplication
-@ComponentScan(basePackages={"cn.reghao.autodop.common", "cn.reghao.autodop.dmaster"})
-@EnableJpaRepositories({"cn.reghao.autodop.common", "cn.reghao.autodop.dmaster"})
-@EntityScan({"cn.reghao.autodop.common", "cn.reghao.autodop.dmaster"})
+@EnableJpaRepositories
+@EntityScan
 // TODO gRPC 服务端接口所在包,定义了 gRPC 服务端提供的服务
 @GrpcServiceScan(packages = {"cn.reghao.autodop.common.grpc.facade"})
 public class DmasterApplication {
 	public static void main(String[] args) {
 		SpringApplication.run(DmasterApplication.class, args);
 	}
+
+	@Bean
+	public BeforeShutdown shutdownGracefully() {
+		return new BeforeShutdown(30);
+	}
+
+	@Bean
+	public ConfigurableServletWebServerFactory webServerFactory(final BeforeShutdown beforeShutdown) {
+		TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
+		factory.addConnectorCustomizers(beforeShutdown);
+		return factory;
+	}
 }

+ 1 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildController.java

@@ -1,20 +1,15 @@
 package cn.reghao.autodop.dmaster.app.controller;
 
 import cn.reghao.autodop.common.config.BuildDeployResult;
-import cn.reghao.autodop.common.result.WebResult;
-import cn.reghao.autodop.dmaster.app.service.build.AppDeploy;
+import cn.reghao.autodop.dmaster.result.WebResult;
 import cn.reghao.autodop.dmaster.app.service.build.BuildDispatcher;
-import cn.reghao.autodop.dmaster.orchestrate.pojo.SysConfig;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.core.io.Resource;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/FileController.java

@@ -1,7 +1,7 @@
 package cn.reghao.autodop.dmaster.app.controller;
 
-import cn.reghao.autodop.common.result.WebResult;
-import cn.reghao.autodop.common.utils.spring.SpringBootUtil;
+import cn.reghao.autodop.dmaster.result.WebResult;
+import cn.reghao.autodop.dmaster.utils.SpringBootUtil;
 import cn.reghao.autodop.dmaster.orchestrate.pojo.SysConfig;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;

+ 4 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/DnktZipTarPack.java

@@ -15,9 +15,11 @@ import java.time.LocalDate;
  */
 @Slf4j
 public class DnktZipTarPack implements PackApp {
+    private final String SUFFIX = ".zip";
+
     @Override
     public String pack(String appId, String version, String appEntryDir) throws Exception {
-        String tag = appId + "_" + version + "_" + LocalDate.now().toString();
+        String tag = appId + "_" + version + "_" + LocalDate.now().toString() + SUFFIX;
         String dst = SysConfig.packDir + "/" + tag;
         if (new File(dst).exists()) {
             return tag;
@@ -30,7 +32,7 @@ public class DnktZipTarPack implements PackApp {
         FileUtil.mvDir(src, app);
         FileUtil.mvDir(start, app);
 
-        ZipUtil.zip(new File(appEntryDir), dst);
+        ZipUtil.zip(new File(app), dst);
 
         return tag;
     }

+ 0 - 17
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/Container.java

@@ -1,17 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker;
-
-import com.google.gson.annotations.SerializedName;
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2019-12-10 18:30:02
- */
-@Data
-public class Container {
-    @SerializedName("Id") private String id;
-    @SerializedName("Names") private String[] names;
-    @SerializedName("Image") private String image;
-    @SerializedName("ImageID") private String imageId;
-    @SerializedName("State") private String state;
-}

+ 0 - 41
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/ContainerConfig.java

@@ -1,41 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker;
-
-/**
- * @author reghao
- * @date 2020-01-14 23:11:21
- */
-public class ContainerConfig {
-    private String image;
-    private HostConfig hostConfig;
-
-    public ContainerConfig(Builder builder) {
-        this.image = builder.image;
-        this.hostConfig = builder.hostConfig;
-    }
-
-    public static Builder builder() {
-        return new Builder();
-    }
-
-    public static class Builder {
-        private String image;
-        private HostConfig hostConfig;
-
-        public Builder() {
-        }
-
-        public Builder image(final String image) {
-            this.image = image;
-            return this;
-        }
-
-        public Builder hostConfig(final HostConfig hostConfig) {
-            this.hostConfig = hostConfig;
-            return this;
-        }
-
-        public ContainerConfig build() {
-            return new ContainerConfig(this);
-        }
-    }
-}

+ 0 - 45
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/ContainerInfo.java

@@ -1,45 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker;
-
-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;
-    }
-}

+ 0 - 50
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/ContainerOps.java

@@ -1,50 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker;
-
-import java.io.IOException;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2019-12-10 17:48:22
- */
-public interface ContainerOps {
-    /**
-     * 运行镜像
-     *
-     * @param name 容器运行时的名字
-     * @param image 运行的 docker image
-     * @return 容器 ID
-     * @date 2020-01-11 下午9:37
-     */
-    String run(String name, String image) throws DockerException;
-    void start(String containerId) throws DockerException;
-    void stop(String containerId) throws DockerException;
-    void restart(String containerId) throws DockerException;
-    void rmContainer(String containerId) throws DockerException;
-    /**
-     * 查看容器状态
-     *
-     * @param isAll 是否查看所有的容器
-     * @return 容器列表
-     * @date 2020-01-19 下午1:38
-     */
-    List<Container> ps(boolean isAll) throws DockerException;
-    /**
-     * 容器日志
-     *
-     * @param containerId 容器 ID
-     * @param type 日志类型 0 - 控制台日志 1 - info 2 - error
-     * @return 容器日志
-     * @date 2020-01-19 下午1:39
-     */
-    List<String> logs(String containerId, int type) throws IOException;
-    /**
-     * 查看容器的详细信息
-     *
-     * @param contianerId 容器 ID
-     * @return 容器详细信息
-     * @date 2020-01-19 下午1:39
-     */
-    String inspectContainer(String contianerId);
-    String rootfs(String containerId);
-}

+ 0 - 28
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/DockerApi.java

@@ -1,28 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker;
-
-/**
- * Docker v1.40
- * https://docs.docker.com/engine/api/v1.40/
- *
- * @author reghao
- * @date 2020-01-13 15:59:16
- */
-public class DockerApi {
-    // image
-    public static final String buildPost = "/v1.40/build";
-    public static final String tagPost = "/v1.40/images/{}/tag";
-    public static final String pushPost = "/v1.40/images/{}/push";
-    public static final String pullPost = "/v1.40/images/create";
-    public static final String inspectImageGet = "/v1.40/images/{}/json";
-    public static final String rmImageDelete = "/v1.40/images/{}";
-
-    // container
-    public static final String createPost = "/containers/create";
-    public static final String logsGet = "/containers/{}/logs";
-    public static final String startPost = "/containers/{}/start";
-    public static final String stopPost = "/containers/{}/stop";
-    public static final String restartPost = "/containers/{}/restart";
-    public static final String rmContainerDelete = "/containers/{}";
-    public static final String psGet = "/containers/json";
-    public static final String inspectContainerGet = "/v1.40/containers/{}/json";
-}

+ 0 - 15
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/DockerAuth.java

@@ -1,15 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker;
-
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2020-01-13 22:57:35
- */
-@Data
-public class DockerAuth {
-    private String username;
-    private String password;
-    private String email;
-    private String serveraddress;
-}

+ 0 - 297
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/DockerClient.java

@@ -1,297 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker;
-
-import cn.reghao.autodop.common.utils.JsonUtil;
-import cn.reghao.autodop.common.utils.compression.TarUtil;
-import cn.reghao.autodop.common.utils.security.Base64Util;
-import cn.reghao.autodop.common.utils.security.Md5Util;
-import cn.reghao.autodop.common.utils.text.TextFile;
-import cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker.httpclient.UnixSocketClient;
-import cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker.httpclient.WebClient;
-import com.google.gson.JsonObject;
-import io.netty.handler.codec.http.FullHttpResponse;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Docker 客户端
- *
- * @author reghao
- * @date 2020-01-13 14:16:38
- */
-public class DockerClient implements ImageOps, ContainerOps, AutoCloseable {
-    private static final Logger log = LoggerFactory.getLogger(DockerClient.class);
-    private WebClient client;
-
-    public DockerClient() {
-        client = new WebClient(new UnixSocketClient());
-    }
-
-    @Override
-    public void close() {
-        client.close();
-    }
-
-    private String checkResponse(FullHttpResponse response) throws DockerException {
-        if (response != null) {
-            int statusCode = response.status().code();
-            String result = response.content().toString(StandardCharsets.UTF_8);
-            if (statusCode >= 300) {
-                throw new DockerException(result);
-            }
-
-            log.info("{}", result);
-            return result;
-        } else {
-            throw new NullPointerException("docker response is null");
-        }
-    }
-
-    public String getIdByName(String name) throws DockerException {
-        String wrappedName = "/" + name;
-        List<Container> containers = ps(false);
-        for (Container container : containers) {
-            if (container.getNames()[0].equals(wrappedName)) {
-                return container.getId();
-            }
-        }
-
-        return null;
-    }
-
-    /* image 操作 */
-
-    @Override
-    public void build(String repoTag, String dockerfile) throws IOException, NoSuchAlgorithmException, DockerException {
-        String dstPath = "/tmp/" + Md5Util.md5(dockerfile) + ".tar";
-        TarUtil.tar(dockerfile, dstPath);
-
-        String uri = DockerApi.buildPost + "?t=" + repoTag;
-        File file = new File(dstPath);
-        List<DockerHeader> headers = new ArrayList<>();
-        headers.add(new DockerHeader("Content-Type", "application/tar"));
-        headers.add(new DockerHeader("Expect", "100-continue"));
-
-        FullHttpResponse response = client.postFile(uri, headers, file);
-        file.delete();
-        checkResponse(response);
-    }
-
-    @Override
-    public void push(String image) throws DockerException {
-        String uri = DockerApi.pushPost.replace("{}", image);
-
-        DockerAuth auth = new DockerAuth();
-        auth.setUsername("reghao");
-        auth.setPassword("12345678");
-        auth.setEmail("reghaodev@gmail.com");
-        auth.setServeraddress("localhost");
-        String encodeAuth = Base64Util.encode(JsonUtil.objectToJson(auth));
-        List<DockerHeader> headers = new ArrayList<>();
-        headers.add(new DockerHeader("X-Registry-Auth", encodeAuth));
-
-        FullHttpResponse response = client.post(uri, headers);
-        checkResponse(response);
-    }
-
-    @Override
-    public void pull(String repoTag) throws DockerException {
-        String params = "?fromImage=" + repoTag;
-        String uri = DockerApi.pullPost + params;
-
-        FullHttpResponse response = client.post(uri, null);
-        checkResponse(response);
-    }
-
-    @Override
-    public void rmImage(String repoTag) throws DockerException {
-        String uri = DockerApi.rmImageDelete.replace("{}", repoTag);
-        FullHttpResponse response = client.post(uri, null);
-        checkResponse(response);
-    }
-
-    @Override
-    public String inspectImage(String image) {
-        String uri = DockerApi.inspectImageGet.replace("{}", image);
-        FullHttpResponse response = client.get(uri, null);
-        if (response != null) {
-            return response.content().toString(StandardCharsets.UTF_8);
-        } else {
-            return null;
-        }
-    }
-
-    private String create(String name, String image) throws DockerException {
-        String uri = DockerApi.createPost + "?name=" + name;
-
-        HostConfig hostConfig = HostConfig.builder().networkMode("host").build();
-        ContainerConfig containerConfig = ContainerConfig.builder()
-                .image(image).hostConfig(hostConfig).build();
-        String tmp = JsonUtil.objectToJson(containerConfig);
-        String json = tmp.replace("image", "Image")
-                .replace("hostConfig", "HostConfig")
-                .replace("networkMode", "NetworkMode");
-
-        FullHttpResponse response = client.postJson(uri, null, json);
-        if (response != null) {
-            int statusCode = response.status().code();
-            String result = response.content().toString(StandardCharsets.UTF_8);
-            if (statusCode == 201) {
-                JsonObject jsonObject = JsonUtil.jsonObject(result);
-                return jsonObject.get("Id").getAsString();
-            } else {
-                throw new DockerException(result);
-            }
-        }
-
-        return null;
-    }
-
-    /* container 操作 */
-
-    @Override
-    public String run(String name, String image) throws DockerException {
-        String containerId = create(name, image);
-        if (containerId != null) {
-            start(containerId);
-        }
-        return containerId;
-    }
-
-    @Override
-    public void start(String containerId) throws DockerException {
-        String uri = DockerApi.startPost.replace("{}", containerId);
-        FullHttpResponse response = client.post(uri, null);
-        checkResponse(response);
-    }
-
-    @Override
-    public void stop(String containerId) throws DockerException {
-        String uri = DockerApi.stopPost.replace("{}", containerId);
-        FullHttpResponse response = client.post(uri, null);
-        checkResponse(response);
-    }
-
-    @Override
-    public void restart(String containerId) throws DockerException {
-        String uri = DockerApi.restartPost.replace("{}", containerId);
-        FullHttpResponse response = client.post(uri, null);
-        checkResponse(response);
-    }
-
-    @Override
-    public void rmContainer(String containerId) throws DockerException {
-        String uri = DockerApi.rmContainerDelete.replace("{}", containerId);
-        FullHttpResponse response = client.delete(uri, null);
-        checkResponse(response);
-    }
-
-    @Override
-    public List<Container> ps(boolean isAll) throws DockerException {
-        String uri = DockerApi.psGet + "?all=" + isAll;
-        FullHttpResponse response = client.get(uri, null);
-        String result = checkResponse(response);
-        List<Object> objs = JsonUtil.jsonToObjectArray(result, Container.class);
-        List<Container> containers = new ArrayList<>();
-        objs.forEach(obj -> {
-            containers.add((Container) obj);
-        });
-
-        return containers;
-    }
-
-    @Override
-    public List<String> logs(String containerId, int type) throws IOException {
-        String uri = DockerApi.logsGet.replace("{}", containerId);
-        FullHttpResponse response;
-        switch (type) {
-            case 0:
-                // TODO stdout 和 stderr 输出的编码问题,详见 https://docs.docker.com/engine/api/v1.40/#operation/ContainerAttach
-                // stdout
-                String params = "?stdout=true&tail=500";
-                response = client.get(uri + params, null);
-                if (response != null) {
-                    String stdout = response.content().toString(StandardCharsets.UTF_8);
-                    return Arrays.asList(stdout.split(System.lineSeparator()));
-                }
-                break;
-            case 1:
-                // stderr
-                params = "?stdout=true&tail=500";
-                response = client.get(uri + params, null);
-                if (response != null) {
-                    String stderr = response.content().toString(StandardCharsets.UTF_8);
-                    return Arrays.asList(stderr.split(System.lineSeparator()));
-                }
-                break;
-            case 2:
-                // info 日志
-                // TODO 通过 AppConfig 获取应用的日志路径
-                String logDir = "/app/Logs/Info";
-                String logFile = "/2020-01-19.log";
-                String relativePath = logDir + logFile;
-                return appLog(containerId, relativePath);
-            case 3:
-                // error 日志
-                logDir = "/app/Logs/Info";
-                logFile = "/2020-01-19.log";
-                relativePath = logDir + logFile;
-                return appLog(containerId, relativePath);
-        }
-
-        return null;
-    }
-
-    List<String> appLog(String containerId, String filePath) throws IOException {
-        String rootfs = rootfs(containerId);
-        ///rootfs = "/home/reghao/Downloads";
-        return new TextFile().tailRead(rootfs + filePath, 500);
-    }
-
-    @Override
-    public String 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);
-        }
-        return null;
-    }
-
-    @Override
-    public String rootfs(String containerId) {
-        String result = inspectContainer(containerId);
-        ContainerInfo containerInfo = (ContainerInfo) JsonUtil.jsonToObject(result, ContainerInfo.class);
-        // TODO 可能抛出 null 异常
-        return containerInfo.getGraphDriver().getData().getMergedDir();
-    }
-
-    public static void main(String[] args) {
-        try (DockerClient docker = new DockerClient()) {
-            //String containerId = docker.run("user", "192.168.0.222:5000/iquizoo3x/user:12051_2020-01-15");
-            //log.info("container id -> {}", containerId);
-
-            /*List<String> logs = docker.logs(
-                    "f7e036d48a16e415c97a15a0b9693b8062d3d55abd67e75fb1fa44cde73a0d62", 2);
-            log.info("-----log-----");
-            logs.forEach(str -> {
-                log.info("{}", str);
-            });
-            log.info("----------");*/
-
-            //List<Container> containers = docker.ps(false);
-            String containerId = docker.getIdByName("user");
-            List<String> logs = docker.logs(containerId, 0);
-            log.info("{}", containerId);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-}

+ 0 - 11
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/DockerException.java

@@ -1,11 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker;
-
-/**
- * @author reghao
- * @date 2020-01-19 14:53:34
- */
-public class DockerException extends Exception {
-    DockerException(String msg) {
-        super(msg);
-    }
-}

+ 0 - 15
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/DockerHeader.java

@@ -1,15 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2020-01-14 09:10:35
- */
-@Data
-@AllArgsConstructor
-public class DockerHeader {
-    private String name;
-    private String value;
-}

+ 0 - 37
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/HostConfig.java

@@ -1,37 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker;
-
-/**
- * @author reghao
- * @date 2020-01-14 23:16:52
- */
-public class HostConfig {
-    private String networkMode;
-
-    public HostConfig(Builder builder) {
-        this.networkMode = builder.networkMode;
-    }
-
-    public static Builder builder() {
-        return new Builder();
-    }
-
-    public static class Builder {
-        private String networkMode;
-
-        public Builder() {
-        }
-
-        private Builder(final HostConfig hostConfig) {
-            this.networkMode = hostConfig.networkMode;
-        }
-
-        public Builder networkMode(final String networkMode) {
-            this.networkMode = networkMode;
-            return this;
-        }
-
-        public HostConfig build() {
-            return new HostConfig(this);
-        }
-    }
-}

+ 0 - 28
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/ImageOps.java

@@ -1,28 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker;
-
-/**
- * @author reghao
- * @date 2019-12-10 17:48:08
- */
-public interface ImageOps {
-    /**
-     * 构建 Docker 镜像
-     *
-     * @param image repository:tag 格式的字符串
-     * @param dockerfile Dockerfile 所在目录的绝对路径
-     * @return true 构建成功
-     * @date 2019-12-10 下午6:08
-     */
-    void build(String image, String dockerfile) throws Exception;
-    void push(String image) throws DockerException;
-    void pull(String image) throws DockerException;
-    void rmImage(String image) throws DockerException;
-    /**
-     * 获取 image 的详细信息
-     *
-     * @param image repository:tag 格式的字符串或 image id
-     * @return 镜像详细信息
-     * @date 2020-01-15 下午9:24
-     */
-    String inspectImage(String image);
-}

+ 0 - 67
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/httpclient/HttpClientHandler.java

@@ -1,67 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker.httpclient;
-
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import io.netty.channel.ChannelPromise;
-import io.netty.handler.codec.http.FullHttpRequest;
-import io.netty.handler.codec.http.FullHttpResponse;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * @author reghao
- * @date 2020-01-14 22:32:58
- */
-public class HttpClientHandler extends ChannelInboundHandlerAdapter {
-    private static final Logger log = LoggerFactory.getLogger(HttpClientHandler.class);
-
-    private ChannelHandlerContext context;
-    private ChannelPromise promise;
-    private FullHttpResponse response;
-
-    public ChannelPromise sendRequest(FullHttpRequest request) {
-        while (context == null) {
-            try {
-                // 等待 channel 建立
-                Thread.sleep(1_000);
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-        }
-
-        promise = context.newPromise();
-        context.writeAndFlush(request);
-        return promise;
-    }
-
-    public FullHttpResponse response() {
-        return response;
-    }
-
-    @Override
-    public void channelActive(ChannelHandlerContext ctx) throws Exception {
-        context = ctx;
-    }
-
-    @Override
-    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
-        if (msg instanceof FullHttpResponse) {
-            response = (FullHttpResponse) msg;
-            int statusCode = response.status().code();
-            // TODO 不返回 1xx 响应
-            if (statusCode >= 200) {
-                promise.setSuccess();
-            }
-            /*if (statusCode >= 200 && statusCode < 400) {
-                promise.setSuccess();
-            } else if (statusCode >= 400) {
-                String message = "failed";
-                Throwable t = new Throwable(message);
-                promise.setFailure(t);
-            }*/
-        } else {
-            log.info("Not FullHttpResponse -> {}", msg.getClass());
-            System.out.println(msg.getClass());
-        }
-    }
-}

+ 0 - 99
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/httpclient/UnixSocketClient.java

@@ -1,99 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker.httpclient;
-
-import io.netty.bootstrap.Bootstrap;
-import io.netty.channel.*;
-import io.netty.channel.epoll.EpollDomainSocketChannel;
-import io.netty.channel.epoll.EpollEventLoopGroup;
-import io.netty.channel.unix.DomainSocketAddress;
-import io.netty.channel.unix.UnixChannel;
-import io.netty.handler.codec.http.FullHttpRequest;
-import io.netty.handler.codec.http.FullHttpResponse;
-import io.netty.handler.codec.http.HttpClientCodec;
-import io.netty.handler.codec.http.HttpObjectAggregator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * @author reghao
- * @date 2020-01-14 17:14:08
- */
-public class UnixSocketClient {
-    private static final Logger log = LoggerFactory.getLogger(UnixSocketClient.class);
-    private final String DEFAULT_UNIX_ENDPOINT = "/var/run/docker.sock";
-    private EventLoopGroup group;
-    private Bootstrap bootstrap;
-    private DomainSocketAddress unixSock;
-    private Channel channel;
-    private HttpClientHandler clientHandler;
-
-    public UnixSocketClient() {
-        // Unix Domain Socket 只能使用 EpollEventLoopGroup?
-        group = new EpollEventLoopGroup(2);
-        bootstrap = new Bootstrap();
-        unixSock = new DomainSocketAddress(DEFAULT_UNIX_ENDPOINT);
-        clientHandler = new HttpClientHandler();
-        init();
-    }
-
-    private void init() {
-        bootstrap.group(group)
-                .channel(EpollDomainSocketChannel.class)
-                .handler(new ChannelInitializer<UnixChannel>() {
-                    @Override
-                    public void initChannel(UnixChannel ch) throws Exception {
-                        ChannelPipeline pipeline = ch.pipeline();
-                        //pipeline.addLast(new LoggingHandler(LogLevel.ERROR));
-                        pipeline.addLast(new HttpClientCodec());
-                        pipeline.addLast(new HttpObjectAggregator(65536*8192));
-                        pipeline.addLast(clientHandler);
-                    }
-                });
-
-        ChannelFuture channelFuture = bootstrap.connect(unixSock);
-        channelFuture.addListener(future -> {
-           if (future.isSuccess()) {
-               log.info("已连接到 Unix Socket");
-               channel = channelFuture.channel();
-           } else {
-               log.info("Unix Socket 连接失败...");
-           }
-        });
-
-        // 注册 channel 关闭事件
-        channelFuture.channel().closeFuture().addListener(listener -> close());
-    }
-
-    public void close() {
-        if (channel != null) {
-            channel.close();
-        }
-
-        if (group != null) {
-            group.shutdownGracefully();
-        }
-    }
-
-    public FullHttpResponse syncSend(FullHttpRequest request) {
-        ChannelPromise promise = clientHandler.sendRequest(request);
-        /*promise.addListener(new ChannelFutureListener() {
-            @Override
-            public void operationComplete(ChannelFuture future) throws Exception {
-                if (future.isSuccess()) {
-                    future.get();
-                } else {
-                    log.info("request failed...");
-                }
-            }
-        });*/
-
-        int second = 30;
-        try {
-            promise.await(second, TimeUnit.SECONDS);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-        return clientHandler.response();
-    }
-}

+ 0 - 120
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/docker/httpclient/WebClient.java

@@ -1,120 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker.httpclient;
-
-import cn.reghao.autodop.dmaster.app.service.build.tools.packer.docker.DockerHeader;
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
-import io.netty.handler.codec.http.*;
-
-import java.io.*;
-import java.nio.charset.StandardCharsets;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2020-01-15 10:13:21
- */
-public class WebClient {
-    private UnixSocketClient client;
-
-    public WebClient(UnixSocketClient client) {
-        this.client = client;
-    }
-
-    public FullHttpResponse get(String uri, List<DockerHeader> headers) {
-        FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, uri);
-        request.headers().set(HttpHeaderNames.HOST, "netty");
-        request.headers().set(HttpHeaderNames.ACCEPT, "Accept: */*");
-        if (headers != null) {
-            headers.forEach(header -> {
-                request.headers().set(header.getName(), header.getValue());
-            });
-        }
-
-        return client.syncSend(request);
-    }
-
-    public FullHttpResponse post(String uri, List<DockerHeader> headers) {
-        FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, uri);
-        request.headers().set(HttpHeaderNames.HOST, "netty");
-        request.headers().set(HttpHeaderNames.ACCEPT, "Accept: */*");
-        if (headers != null) {
-            headers.forEach(header -> {
-                request.headers().set(header.getName(), header.getValue());
-            });
-        }
-
-        return client.syncSend(request);
-    }
-
-    public FullHttpResponse postJson(String uri, List<DockerHeader> headers, String json) {
-        ByteBuf byteBuf = Unpooled.copiedBuffer(json, StandardCharsets.UTF_8);
-
-        FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, uri);
-        request.headers().set(HttpHeaderNames.HOST, "netty");
-        request.headers().set(HttpHeaderNames.ACCEPT, "Accept: */*");
-        request.headers().set(HttpHeaderNames.CONTENT_TYPE, "application/json");
-        request.headers().set(HttpHeaderNames.CONTENT_LENGTH, byteBuf.readableBytes());
-        if (headers != null) {
-            headers.forEach(header -> {
-                request.headers().set(header.getName(), header.getValue());
-            });
-        }
-        request.content().clear().writeBytes(byteBuf);
-
-        return client.syncSend(request);
-    }
-
-    public FullHttpResponse postFile(String uri, List<DockerHeader> headers, File file) {
-        try {
-            byte[] bytes = transfer(file);
-            long len = bytes.length;
-            ByteBuf content = Unpooled.wrappedBuffer(bytes);
-
-            FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, uri, content);
-            request.headers().set(HttpHeaderNames.HOST, "netty");
-            request.headers().set(HttpHeaderNames.ACCEPT, "Accept: */*");
-            request.headers().set(HttpHeaderNames.CONTENT_LENGTH, String.valueOf(len));
-            if (headers != null) {
-                headers.forEach(header -> {
-                    request.headers().set(header.getName(), header.getValue());
-                });
-            }
-
-            return client.syncSend(request);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return null;
-    }
-
-    private byte[] transfer(File file) throws IOException {
-        BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        byte[] buf = new byte[1024];
-        int len;
-        while ((len = in.read(buf)) != -1) {
-            bos.write(buf, 0, len);
-        }
-
-        bos.close();
-        return bos.toByteArray();
-    }
-
-    public FullHttpResponse delete(String uri, List<DockerHeader> headers) {
-        FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.DELETE, uri);
-        request.headers().set(HttpHeaderNames.HOST, "netty");
-        request.headers().set(HttpHeaderNames.ACCEPT, "Accept: */*");
-        if (headers != null) {
-            headers.forEach(header -> {
-                request.headers().set(header.getName(), header.getValue());
-            });
-        }
-
-        return client.syncSend(request);
-    }
-
-    public void close() {
-        client.close();
-    }
-}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/controller/TestController.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.dmaster.controller;
 
-import cn.reghao.autodop.common.utils.spring.SpringBootUtil;
+import cn.reghao.autodop.dmaster.utils.SpringBootUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;

+ 4 - 4
common/src/main/java/cn/reghao/autodop/common/exception/GlobalExceptionHandler.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/exception/GlobalExceptionHandler.java

@@ -1,8 +1,8 @@
-package cn.reghao.autodop.common.exception;
+package cn.reghao.autodop.dmaster.exception;
 
-import cn.reghao.autodop.common.result.ErrorResult;
-import cn.reghao.autodop.common.result.ResultCode;
-import cn.reghao.autodop.common.result.WebResult;
+import cn.reghao.autodop.dmaster.result.ErrorResult;
+import cn.reghao.autodop.dmaster.result.ResultCode;
+import cn.reghao.autodop.dmaster.result.WebResult;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/exception/WebErrorController.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/exception/WebErrorController.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.exception;
+package cn.reghao.autodop.dmaster.exception;
 
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.web.servlet.error.ErrorController;

+ 0 - 18
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/NodeController.java

@@ -1,6 +1,5 @@
 package cn.reghao.autodop.dmaster.machine;
 
-import cn.reghao.autodop.common.module.sys.NodeInfo;
 import com.google.gson.Gson;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -13,21 +12,4 @@ import org.springframework.web.bind.annotation.RequestMapping;
 //@RestController
 //@RequestMapping("/api/node")
 public class NodeController {
-    private NodeManager nodeManager;
-
-    public NodeController(NodeManager nodeManager) {
-        this.nodeManager = nodeManager;
-    }
-
-    @RequestMapping("/register")
-    public String registerNode(NodeInfo nodeInfo) {
-        log.info("register node -> {}", nodeInfo);
-        return new Gson().toJson(nodeInfo);
-    }
-
-    @RequestMapping("/deregister")
-    public String deregisterNode(NodeInfo nodeInfo) {
-        log.info("deregister node -> {}", nodeInfo);
-        return new Gson().toJson(nodeInfo);
-    }
 }

+ 2 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/HealthCheckScheduler.java

@@ -1,7 +1,5 @@
 package cn.reghao.autodop.dmaster.monitor;
 
-import cn.reghao.autodop.common.utils.notification.msg.DingMarkdown;
-import cn.reghao.autodop.common.module.sys.GlobalConfig;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.DependsOn;
@@ -22,7 +20,6 @@ import java.util.*;
 //@Component
 //@DependsOn(value = "sysInitializer")
 public class HealthCheckScheduler implements HealthCheck {
-    private GlobalConfig config = GlobalConfig.getInstance();
     private Map<String, Long> unavailableServices = new HashMap<>();
 
     private Set<String> first = new HashSet<>();
@@ -123,7 +120,7 @@ public class HealthCheckScheduler implements HealthCheck {
     }
 
     private void notify(String msg, Set<String> apps) {
-        Set<UnavailableService> services = new HashSet<>();
+        /*Set<UnavailableService> services = new HashSet<>();
         apps.forEach(app -> {
             long from = unavailableServices.get(app);
 
@@ -145,7 +142,7 @@ public class HealthCheckScheduler implements HealthCheck {
             dingMarkdown.putMsg(markdown);
         } catch (Exception e) {
             e.printStackTrace();
-        }
+        }*/
     }
 
     /**

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/controller/OrchestrateController.java

@@ -1,7 +1,7 @@
 package cn.reghao.autodop.dmaster.orchestrate.controller;
 
-import cn.reghao.autodop.common.result.ResultCode;
-import cn.reghao.autodop.common.result.WebResult;
+import cn.reghao.autodop.dmaster.result.ResultCode;
+import cn.reghao.autodop.dmaster.result.WebResult;
 import cn.reghao.autodop.dmaster.orchestrate.service.OrchestrateService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;

+ 2 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/service/OrchestrateService.java

@@ -1,7 +1,7 @@
 package cn.reghao.autodop.dmaster.orchestrate.service;
 
-import cn.reghao.autodop.common.result.ResultCode;
-import cn.reghao.autodop.common.result.WebResult;
+import cn.reghao.autodop.dmaster.result.ResultCode;
+import cn.reghao.autodop.dmaster.result.WebResult;
 import cn.reghao.autodop.common.utils.JsonUtil;
 import cn.reghao.autodop.dmaster.orchestrate.caching.OrchestrationCaching;
 import cn.reghao.autodop.dmaster.orchestrate.dao.AppDAO;
@@ -17,7 +17,6 @@ import cn.reghao.autodop.dmaster.orchestrate.repository.orchestration.ProjectOrc
 import cn.reghao.autodop.dmaster.orchestrate.vo.AppVO;
 import cn.reghao.autodop.dmaster.orchestrate.vo.PageList;
 import cn.reghao.autodop.dmaster.orchestrate.vo.ProjVO;
-import org.springframework.cache.annotation.Cacheable;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/result/ErrorResult.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/result/ErrorResult.java

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

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/result/ResultCode.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/result/ResultCode.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.result;
+package cn.reghao.autodop.dmaster.result;
 
 /**
  * 请求状态

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/result/WebResult.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/result/WebResult.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.result;
+package cn.reghao.autodop.dmaster.result;
 
 import com.google.gson.Gson;
 import lombok.Data;

+ 51 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/BeforeShutdown.java

@@ -0,0 +1,51 @@
+package cn.reghao.autodop.dmaster.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.catalina.connector.Connector;
+import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
+import org.springframework.context.ApplicationListener;
+import org.springframework.context.event.ContextClosedEvent;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 优雅关闭 Spring Boot 应用
+ * TODO 考虑应用停止的多种情况
+ *
+ * @author reghao
+ * @date 2019-09-06 13:31:16
+ */
+@Slf4j
+public class BeforeShutdown implements TomcatConnectorCustomizer, ApplicationListener<ContextClosedEvent> {
+    private volatile Connector connector;
+    private long timeout;
+
+    public BeforeShutdown(long timeout) {
+        this.timeout = timeout;
+    }
+
+    @Override
+    public void customize(Connector connector) {
+        this.connector = connector;
+    }
+
+    @Override
+    public void onApplicationEvent(ContextClosedEvent event) {
+        connector.pause();
+        Executor executor = connector.getProtocolHandler().getExecutor();
+        if (executor instanceof ThreadPoolExecutor) {
+            ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;
+            threadPoolExecutor.shutdown();
+            try {
+                if (!threadPoolExecutor.awaitTermination(timeout, TimeUnit.SECONDS)) {
+                    log.warn("应用未在 30s 内优雅关闭,强制关闭应用...");
+                }
+                log.warn("优雅关闭应用...");
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/utils/spring/SpringBootUtil.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/SpringBootUtil.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.common.utils.spring;
+package cn.reghao.autodop.dmaster.utils;
 
 import cn.reghao.autodop.common.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 6
dmaster/src/main/resources/application.yml

@@ -2,7 +2,7 @@ server:
   port: 4000
 spring:
   application:
-    name: autodop-dmaster
+    name: autodop-master
   profiles:
     active: @profile.active@
   mvc:
@@ -12,11 +12,6 @@ spring:
     multipart:
       max-file-size: 1GB
       max-request-size: 1GB
-  redis:
-    database: 0
-    host: localhost
-    port: 6379
-    #password: 12345678
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
     type: com.zaxxer.hikari.HikariDataSource

+ 5 - 85
pom.xml

@@ -31,21 +31,11 @@
     </properties>
 
     <dependencies>
-        <dependency>
+        <!--<dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-websocket</artifactId>
-        </dependency>
+        </dependency>-->
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -53,29 +43,11 @@
             <optional>true</optional>
         </dependency>
 
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-            <version>2.8.5</version>
-        </dependency>
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-aop</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpclient</artifactId>
-            <version>4.5.8</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpmime</artifactId>
-            <version>4.5.8</version>
-        </dependency>
-
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
@@ -84,61 +56,9 @@
         </dependency>
 
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>2.9.2</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>2.9.2</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-actuator</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>2.6</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.maven.shared</groupId>
-            <artifactId>maven-invoker</artifactId>
-            <version>3.0.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-devtools</artifactId>
-            <optional>true</optional>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jpa</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>com.zaxxer</groupId>
-            <artifactId>HikariCP</artifactId>
-            <version>3.3.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.jcraft</groupId>
-            <artifactId>jsch</artifactId>
-            <version>0.1.55</version>
+            <groupId>javax.validation</groupId>
+            <artifactId>validation-api</artifactId>
+            <version>2.0.1.Final</version>
         </dependency>
     </dependencies>
 </project>