Kaynağa Gözat

完善配置使用的 CRUD 接口

reghao 5 yıl önce
ebeveyn
işleme
b4cd393722
44 değiştirilmiş dosya ile 482 ekleme ve 399 silme
  1. 16 18
      common/src/main/java/cn/reghao/autodop/common/shell/ShellExecutor.java
  2. 22 7
      common/src/main/java/cn/reghao/autodop/common/shell/ShellResult.java
  3. 0 11
      common/src/main/java/cn/reghao/autodop/common/utils/NetworkUtil.java
  4. 19 0
      dagent/src/main/java/cn/reghao/autodop/dagent/app/pojo/AppStatus.java
  5. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/cache/OrchestrationCache.java
  6. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/ConfigController.java
  7. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/OrchestrateController.java
  8. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/LocalDir.java
  9. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppCompile.java
  10. 0 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/BuildLog.java
  11. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/build/AppCompileRepository.java
  12. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/build/AppPackRepository.java
  13. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/build/AppUpdateRepository.java
  14. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/deploy/DeployedAppRepository.java
  15. 5 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/BuildLogRepository.java
  16. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/CommitLogRepository.java
  17. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/DeployLogRepository.java
  18. 4 22
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/LogRepository.java
  19. 3 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/AppOrchestrationRepository.java
  20. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/LocalDirRepository.java
  21. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/NotificationRepository.java
  22. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/ProjOrchestrationRepository.java
  23. 12 12
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildService.java
  24. 114 116
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/ConfigService.java
  25. 71 34
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/OrchestrateService.java
  26. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/StatusManager.java
  27. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppIntegrate.java
  28. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuildDispatcher.java
  29. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/compiler/ShellCompiler.java
  30. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/updater/CommitLog.java
  31. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/updater/GitImpl.java
  32. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/updater/SvnImpl.java
  33. 10 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/AppBuildVO.java
  34. 0 66
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/AppOrchestrationVO.java
  35. 0 37
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/ProjOrchestrationVO.java
  36. 0 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildDeployResult.java
  37. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildLogVO.java
  38. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/CommitLogVO.java
  39. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/DeployLogVO.java
  40. 66 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java
  41. 37 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/ProjVO.java
  42. 36 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/controller/IndexController.java
  43. 6 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/jwt/UsernamePasswordAuthFilter.java
  44. 25 17
      dmaster/src/main/java/cn/reghao/autodop/dmaster/common/utils/AfterAppStart.java

+ 16 - 18
common/src/main/java/cn/reghao/autodop/common/shell/ShellExecutor.java

@@ -19,12 +19,21 @@ public class ShellExecutor {
     private InputStreamReader outstream;
     private InputStreamReader errstream;
 
-    // TODO: 输出流有大量数据时程序会阻塞
+    public ShellResult execute(String script) {
+        String dir = System.getProperty("user.home");
+        return execute0(dir, script);
+    }
+
     public ShellResult execute(String dir, String script) {
         if (dir == null) {
-            dir = System.getProperty("user.home");
+            return null;
         }
 
+        return execute0(dir, script);
+    }
+
+    // TODO: 输出流有大量数据时程序会阻塞
+    private ShellResult execute0(String dir, String script) {
         String cmd = "cd " + dir + " && ";
         cmd += script;
         ShellResult result = new ShellResult();
@@ -36,12 +45,11 @@ public class ShellExecutor {
 
             ShellOutput stderr = new ShellOutput(new BufferedReader(errstream));
             ShellOutput stdout = new ShellOutput(new BufferedReader(outstream));
-
             stderr.start();
             stdout.start();
 
             while (!stderr.isFinished() && !stdout.isFinished()) {
-                Thread.sleep(3_000);
+                Thread.sleep(1_000);
             }
 
             result.setStdout(stdout.output());
@@ -69,15 +77,15 @@ public class ShellExecutor {
 
     static class ShellOutput extends Thread {
         private BufferedReader in;
-        private List<String> output = new ArrayList<>();
+        private StringBuilder output = new StringBuilder();
         private boolean isFinished = false;
 
         private ShellOutput(BufferedReader in) {
             this.in = in;
         }
 
-        private List<String> output() {
-            return this.output;
+        private String output() {
+            return output.toString();
         }
 
         private boolean isFinished() {
@@ -93,7 +101,7 @@ public class ShellExecutor {
             String line;
             try {
                 while ((line = reader.readLine()) != null) {
-                    output.add(line);
+                    output.append(line).append(System.lineSeparator());
                 }
                 reader.close();
                 isFinished = true;
@@ -102,14 +110,4 @@ public class ShellExecutor {
             }
         }
     }
-
-    public static void main(String[] args) {
-        String appDir = "/home/reghao/code/aha/spiderlab/crawler";
-        String script = "/home/reghao/dev/env/dotnet/dotnet-sdk-2.2.101/dotnet --info";
-        script = "/home/reghao/dev/tools/maven-3.6.0/bin/mvn clean package";
-        ShellExecutor shell = new ShellExecutor();
-        ShellResult result = shell.execute(appDir, script);
-        System.out.println("----------------------------------------------");
-        result.getStdout().forEach(System.out::println);
-    }
 }

+ 22 - 7
common/src/main/java/cn/reghao/autodop/common/shell/ShellResult.java

@@ -1,18 +1,33 @@
 package cn.reghao.autodop.common.shell;
 
-import lombok.Data;
-
-import java.util.List;
-
 /**
  * @author reghao
  * @date 2019-08-24 14:47:57
  */
-@Data
 public class ShellResult {
+    private String stdout;
+    private String stderr;
     private int exitCode;
-    private List<String> stdout;
-    private List<String> stderr;
+
+    public String getStdout() {
+        return stdout;
+    }
+
+    public void setStdout(String stdout) {
+        this.stdout = stdout;
+    }
+
+    public String getStderr() {
+        return stderr;
+    }
+
+    public void setStderr(String stderr) {
+        this.stderr = stderr;
+    }
+
+    public void setExitCode(int exitCode) {
+        this.exitCode = exitCode;
+    }
 
     public boolean hasError() {
         return exitCode != 0;

+ 0 - 11
common/src/main/java/cn/reghao/autodop/common/utils/NetworkUtil.java

@@ -5,7 +5,6 @@ import lombok.Data;
 
 import java.net.*;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Enumeration;
 import java.util.List;
 
@@ -47,14 +46,4 @@ public class NetworkUtil {
         private String iface;
         private String address;
     }
-
-    public static void main(String[] args) throws SocketException, UnknownHostException {
-        /*List<IPAddress> list = NetworkUtil.ipv4();
-        System.out.println(list.get(0).getAddress());*/
-
-        String domain = "mq.reghao.cn";
-        domain = "taobao.com";
-        InetAddress[] addr = InetAddress.getAllByName(domain);
-        System.out.println(Arrays.toString(addr));
-    }
 }

+ 19 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/app/pojo/AppStatus.java

@@ -0,0 +1,19 @@
+package cn.reghao.autodop.dagent.app.pojo;
+
+import java.io.Serializable;
+
+/**
+ * 应用状态
+ *
+ * @author reghao
+ * @date 2020-09-29 18:04:06
+ */
+public class AppStatus implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String appId;
+    private String commitId;
+    private String host;
+    private boolean isRunning;
+    private String startTime;
+}

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/cache/OrchestrationCache.java

@@ -20,12 +20,12 @@ public class OrchestrationCache {
 
     // TODO @Cacheable(cacheNames = "app", key = "#appId")
     public AppOrchestration findByAppId(String appId) {
-        AppOrchestration app = appRepository.findByAppId(appId);
+        AppOrchestration app = appRepository.findByIsDeleteFalseAndAppId(appId);
         return app;
     }
 
     public AppOrchestration findByRepoAndBranch(String repo, String branch) {
-        AppOrchestration app = appRepository.findByAppRepoAndBranch(repo, branch);
+        AppOrchestration app = appRepository.findByIsDeleteFalseAndAppRepoAndBranch(repo, branch);
         return app;
     }
 }

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/ConfigController.java

@@ -36,7 +36,7 @@ public class ConfigController {
     @PostMapping(value = "/{configType}", consumes = "application/json")
     public ResponseEntity<String> addConfig(@PathVariable("configType") String configType,
                                             @RequestBody String json) throws Exception {
-        configService.add(configType, json);
+        configService.addOrModify(configType, json);
         return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 
@@ -53,9 +53,9 @@ public class ConfigController {
 
     @ApiOperation(value = "修改配置")
     @PutMapping("/{configType}")
-    public ResponseEntity<String> updateConfig(@PathVariable("configType") String configType,
+    public ResponseEntity<String> modifyConfig(@PathVariable("configType") String configType,
                                                @RequestBody String json) throws Exception {
-        configService.update(configType, json);
+        configService.addOrModify(configType, json);
         return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/OrchestrateController.java

@@ -30,7 +30,7 @@ public class OrchestrateController {
     @PostMapping(value = "/{type}", consumes = "application/json")
     public ResponseEntity<String> addOrchestration(@PathVariable("type") int type, @RequestBody String json)
             throws Exception {
-        orchestrateService.addOrModify(type, json, "add");
+        orchestrateService.addOrModify(type, json);
         return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 
@@ -72,14 +72,14 @@ public class OrchestrateController {
     public ResponseEntity<String> modifyOrchestration(@PathVariable("type") int type, @RequestBody String json)
             throws Exception {
         // TODO 修改仓库相关的字段时应该删除本地仓库
-        orchestrateService.addOrModify(type, json, "modify");
+        orchestrateService.addOrModify(type, json);
         return ResponseEntity.ok().body(WebResult.success("ok"));
     }
 
     @ApiOperation(value = "删除项目/应用编排")
     @DeleteMapping("/{type}/{appId}")
     public ResponseEntity<String> deleteOrchestration(@PathVariable("type") int type,
-                                      @PathVariable("appId") String appId) {
+                                                      @PathVariable("appId") String appId) throws Exception {
         orchestrateService.delete(type, appId);
         return ResponseEntity.ok().body(WebResult.success("ok"));
     }

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/LocalDir.java

@@ -15,6 +15,7 @@ import javax.persistence.Entity;
 @EqualsAndHashCode(callSuper = false)
 @Entity
 public class LocalDir extends BaseEntity {
+    private String hostId;
     // 本地仓库
     private String localRepo;
     // 编译目录

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppCompile.java

@@ -15,6 +15,7 @@ import javax.persistence.Entity;
 @EqualsAndHashCode(callSuper = false)
 @Entity
 public class AppCompile extends BaseEntity {
+    private String hostId;
     private String compilerType;
     @Column(nullable = false, unique = true)
     private String compilerName;

+ 0 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/BuildLog.java

@@ -25,7 +25,6 @@ public class BuildLog extends BaseEntity {
     // 0 - 成功 1 - 失败 2 - 未更改
     private int statusCode;
     private String msg;
-    // TODO Data too long for column 'err_detail' at row 1
     @Column(length = 1024)
     private String errDetail;
 

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/build/AppCompileRepository.java

@@ -11,7 +11,7 @@ import javax.transaction.Transactional;
  * @date 2020-01-21 14:53:03
  */
 public interface AppCompileRepository extends JpaRepository<AppCompile, Long> {
-    AppCompile findByCompilerName(String compilerName);
+    AppCompile findByIsDeleteFalseAndCompilerName(String compilerName);
 
     @Modifying
     @Transactional

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/build/AppPackRepository.java

@@ -11,7 +11,7 @@ import javax.transaction.Transactional;
  * @date 2020-01-21 14:53:03
  */
 public interface AppPackRepository extends JpaRepository<AppPack, Long> {
-    AppPack findByPackerName(String packerName);
+    AppPack findByIsDeleteFalseAndPackerName(String packerName);
 
     @Modifying
     @Transactional

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/build/AppUpdateRepository.java

@@ -11,7 +11,7 @@ import javax.transaction.Transactional;
  * @date 2020-01-21 14:53:03
  */
 public interface AppUpdateRepository extends JpaRepository<AppUpdate, Long> {
-    AppUpdate findByRepoName(String repoName);
+    AppUpdate findByIsDeleteFalseAndRepoName(String repoName);
 
     @Modifying
     @Transactional

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/deploy/DeployedAppRepository.java

@@ -11,6 +11,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
  * @date 2020-01-21 14:53:03
  */
 public interface DeployedAppRepository extends JpaRepository<DeployedApp, Long> {
-    DeployedApp findByApp(AppOrchestration app);
-    Page<DeployedApp> findByAppEnv(String env, Pageable pageable);
+    DeployedApp findByIsDeleteFalseAndApp(AppOrchestration app);
+    Page<DeployedApp> findByIsDeleteFalseAndApp_Env(String env, Pageable pageable);
 }

+ 5 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/BuildLogRepository.java

@@ -14,12 +14,12 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
  * @date 2020-01-21 14:53:03
  */
 public interface BuildLogRepository extends JpaRepository<BuildLog, Long>, JpaSpecificationExecutor<BuildLog> {
-    BuildLog findFirstByAppIdOrderByCreateTimeDesc(String appId);
+    BuildLog findFirstByIsDeleteFalseAndAppIdOrderByCreateTimeDesc(String appId);
     // 应用成功构建的列表
-    Page<BuildLog> findByAppIdAndStatusCode(String appId, int statusCode, Pageable pageable);
+    Page<BuildLog> findByIsDeleteFalseAndAppIdAndStatusCode(String appId, int statusCode, Pageable pageable);
     // 应用每个版本正确构建的日志只有唯一一条记录
-    BuildLog findByCommitLogAndAppCompileAndAppPackAndAppIdAndStatusCode(
+    BuildLog findByIsDeleteFalseAndCommitLogAndAppCompileAndAppPackAndAppIdAndStatusCode(
             CommitLog commitLog, AppCompile appCompile, AppPack appPack, String appId, int statusCode);
-    Page<BuildLog> findByEnv(String env, Pageable pageable);
-    Page<BuildLog> findByEnvAndAppId(String env, String appId, Pageable pageable);
+    Page<BuildLog> findByIsDeleteFalseAndEnv(String env, Pageable pageable);
+    Page<BuildLog> findByIsDeleteFalseAndEnvAndAppId(String env, String appId, Pageable pageable);
 }

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/CommitLogRepository.java

@@ -10,7 +10,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
  * @date 2020-01-21 14:53:03
  */
 public interface CommitLogRepository extends JpaRepository<CommitLog, Long> {
-    CommitLog findByCommitId(String commitId);
-    Page<CommitLog> findByEnv(String env, Pageable pageable);
-    Page<CommitLog> findByEnvAndAppId(String env, String appId, Pageable pageable);
+    CommitLog findByIsDeleteFalseAndCommitId(String commitId);
+    Page<CommitLog> findByIsDeleteFalseAndEnv(String env, Pageable pageable);
+    Page<CommitLog> findByIsDeleteFalseAndEnvAndAppId(String env, String appId, Pageable pageable);
 }

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/DeployLogRepository.java

@@ -14,7 +14,7 @@ import java.util.List;
  * @date 2020-01-21 14:53:03
  */
 public interface DeployLogRepository extends JpaRepository<DeployLog, Long> {
-    List<DeployLog> findByBuildLog(BuildLog buildLog);
-    Page<DeployLog> findByBuildLog_Env(String env, Pageable pageable);
-    Page<DeployLog> findByBuildLog_EnvAndBuildLog_AppId(String env, String appId, Pageable pageable);
+    List<DeployLog> findByIsDeleteFalseAndBuildLog(BuildLog buildLog);
+    Page<DeployLog> findByIsDeleteFalseAndBuildLog_Env(String env, Pageable pageable);
+    Page<DeployLog> findByIsDeleteFalseAndBuildLog_EnvAndBuildLog_AppId(String env, String appId, Pageable pageable);
 }

+ 4 - 22
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/LogRepository.java

@@ -3,19 +3,11 @@ package cn.reghao.autodop.dmaster.app.repository.log;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
 import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;
 import cn.reghao.autodop.dmaster.app.service.tools.updater.CommitLog;
-import cn.reghao.autodop.dmaster.app.vo.log.BuildDeployResult;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * 持久化构建、部署日志
@@ -41,7 +33,7 @@ public class LogRepository {
     @Transactional(rollbackFor = {Exception.class})
     public void saveBuildLog(BuildLog buildLog) {
         CommitLog commitLog = buildLog.getCommitLog();
-        CommitLog entity = commitLogRepository.findByCommitId(commitLog.getCommitId());
+        CommitLog entity = commitLogRepository.findByIsDeleteFalseAndCommitId(commitLog.getCommitId());
         if (entity == null) {
             commitLog.setIsDelete(false);
             LocalDateTime now = LocalDateTime.now();
@@ -52,7 +44,7 @@ public class LogRepository {
             buildLog.setCommitLog(entity);
         }
 
-        BuildLog entity1 = buildLogRepository.findByCommitLogAndAppCompileAndAppPackAndAppIdAndStatusCode(
+        BuildLog entity1 = buildLogRepository.findByIsDeleteFalseAndCommitLogAndAppCompileAndAppPackAndAppIdAndStatusCode(
                 entity, buildLog.getAppCompile(), buildLog.getAppPack(), buildLog.getAppId(), 0);
         // 当前 commit 构建成功的 BuildLog 已存在时不再更新
         if (entity1 == null) {
@@ -68,13 +60,13 @@ public class LogRepository {
     public void saveDeployLog(DeployLog deployLog) {
         BuildLog buildLog = deployLog.getBuildLog();
         String commitId = buildLog.getCommitLog().getCommitId();
-        CommitLog entity = commitLogRepository.findByCommitId(commitId);
+        CommitLog entity = commitLogRepository.findByIsDeleteFalseAndCommitId(commitId);
         if (entity == null) {
             log.error("{} 的 {} 版本更新日志未持久化...", buildLog.getAppId(), commitId);
             return;
         }
 
-        BuildLog entity1 = buildLogRepository.findByCommitLogAndAppCompileAndAppPackAndAppIdAndStatusCode(
+        BuildLog entity1 = buildLogRepository.findByIsDeleteFalseAndCommitLogAndAppCompileAndAppPackAndAppIdAndStatusCode(
                 entity, buildLog.getAppCompile(), buildLog.getAppPack(), buildLog.getAppId(), 0);
         if (entity1 != null) {
             deployLog.setBuildLog(entity1);
@@ -87,14 +79,4 @@ public class LogRepository {
             log.error("{} 的 {} 版本构建日志未持久化...", buildLog.getAppId(), commitId);
         }
     }
-
-    public void list() {
-        Specification<BuildDeployResult> spec = new Specification<BuildDeployResult>() {
-            @Override
-            public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
-                List<Predicate> list = new ArrayList<>();
-                return null;
-            }
-        };
-    }
 }

+ 3 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/AppOrchestrationRepository.java

@@ -14,11 +14,10 @@ import javax.transaction.Transactional;
  * @date 2020-01-21 14:53:03
  */
 public interface AppOrchestrationRepository extends JpaRepository<AppOrchestration, Long> {
-    Page<AppOrchestration> findByEnv(String env, Pageable pageable);
-    Page<AppOrchestration> findByIsDeleteFalseAndEnvAndAppType(String env, String appType, Pageable pageable);
+    Page<AppOrchestration> findByIsDeleteFalseAndEnv(String env, Pageable pageable);
     Page<AppOrchestration> findAllByIsDeleteIsFalseAndEnableIsTrueAndEnv(String env, Pageable pageable);
-    AppOrchestration findByAppId(String appId);
-    AppOrchestration findByAppRepoAndBranch(String appRepo, String branch);
+    AppOrchestration findByIsDeleteFalseAndAppId(String appId);
+    AppOrchestration findByIsDeleteFalseAndAppRepoAndBranch(String appRepo, String branch);
 
     @Modifying
     @Transactional

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/LocalDirRepository.java

@@ -9,4 +9,5 @@ import org.springframework.data.jpa.repository.JpaRepository;
  * @date 2020-01-21 14:53:03
  */
 public interface LocalDirRepository extends JpaRepository<LocalDir, Long> {
+    LocalDir findByHostId(String hostId);
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/NotificationRepository.java

@@ -11,7 +11,7 @@ import javax.transaction.Transactional;
  * @date 2020-01-21 14:53:03
  */
 public interface NotificationRepository extends JpaRepository<Notification, Long> {
-    Notification findByNotifierName(String notifierName);
+    Notification findByIsDeleteFalseAndNotifierName(String notifierName);
 
     @Modifying
     @Transactional

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/ProjOrchestrationRepository.java

@@ -12,7 +12,7 @@ import javax.transaction.Transactional;
  * @date 2020-01-21 14:53:03
  */
 public interface ProjOrchestrationRepository extends JpaRepository<ProjOrchestration, Long> {
-    ProjOrchestration findByProjId(String projId);
+    ProjOrchestration findByIsDeleteFalseAndProjId(String projId);
 
     @Modifying
     @Transactional

+ 12 - 12
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildService.java

@@ -56,10 +56,10 @@ public class BuildService {
         // 找出每个 app 最新的构建日志
         List<BuildDeployResult> list = new ArrayList<>();
         for (AppOrchestration app : apps.getContent()) {
-            BuildLog buildLog = buildLogRepository.findFirstByAppIdOrderByCreateTimeDesc(app.getAppId());
+            BuildLog buildLog = buildLogRepository.findFirstByIsDeleteFalseAndAppIdOrderByCreateTimeDesc(app.getAppId());
             if (buildLog != null) {
                 // 若 app 构建成功,则找出其部署日志
-                List<DeployLog> deployLogs = deployLogRepository.findByBuildLog(buildLog);
+                List<DeployLog> deployLogs = deployLogRepository.findByIsDeleteFalseAndBuildLog(buildLog);
                 if (!deployLogs.isEmpty()) {
                     list.add(BuildDeployResult.fromDeployLogs(deployLogs));
                 } else {
@@ -75,7 +75,7 @@ public class BuildService {
 
     public PageList<SuccessfullyBuildVO> successfullyBuilds(String appId, PageRequest pageRequest) {
         PageList<SuccessfullyBuildVO> pageList = new PageList<>();
-        Page<BuildLog> buildLogs = buildLogRepository.findByAppIdAndStatusCode(appId, 0, pageRequest);
+        Page<BuildLog> buildLogs = buildLogRepository.findByIsDeleteFalseAndAppIdAndStatusCode(appId, 0, pageRequest);
         pageList.setTotalPages(buildLogs.getTotalPages());
         pageList.setTotalSize(buildLogs.getTotalElements());
         pageList.setHasNext(buildLogs.hasNext());
@@ -94,48 +94,48 @@ public class BuildService {
     public PageList<CommitLogVO> commitLogs(String env, String appId, PageRequest pageRequest) {
         Page<CommitLog> commitLogs;
         if (appId != null) {
-            commitLogs = commitLogRepository.findByEnvAndAppId(env, appId, pageRequest);
+            commitLogs = commitLogRepository.findByIsDeleteFalseAndEnvAndAppId(env, appId, pageRequest);
         } else {
-            commitLogs = commitLogRepository.findByEnv(env, pageRequest);
+            commitLogs = commitLogRepository.findByIsDeleteFalseAndEnv(env, pageRequest);
         }
 
         PageList<CommitLogVO> pageList = new PageList<>();
         pageList.setTotalPages(commitLogs.getTotalPages());
         pageList.setTotalSize(commitLogs.getTotalElements());
         pageList.setHasNext(commitLogs.hasNext());
-        pageList.setList(commitLogs.stream().map(CommitLogVO::of).collect(Collectors.toList()));
+        pageList.setList(commitLogs.stream().map(CommitLogVO::from).collect(Collectors.toList()));
         return pageList;
     }
 
     public PageList<BuildLogVO> buildLogs(String env, String appId, PageRequest pageRequest) {
         Page<BuildLog> buildLogs;
         if (appId != null) {
-            buildLogs = buildLogRepository.findByEnvAndAppId(env, appId, pageRequest);
+            buildLogs = buildLogRepository.findByIsDeleteFalseAndEnvAndAppId(env, appId, pageRequest);
         } else {
-            buildLogs = buildLogRepository.findByEnv(env, pageRequest);
+            buildLogs = buildLogRepository.findByIsDeleteFalseAndEnv(env, pageRequest);
         }
 
         PageList<BuildLogVO> pageList = new PageList<>();
         pageList.setTotalPages(buildLogs.getTotalPages());
         pageList.setTotalSize(buildLogs.getTotalElements());
         pageList.setHasNext(buildLogs.hasNext());
-        pageList.setList(buildLogs.stream().map(BuildLogVO::of).collect(Collectors.toList()));
+        pageList.setList(buildLogs.stream().map(BuildLogVO::from).collect(Collectors.toList()));
         return pageList;
     }
 
     public PageList<DeployLogVO> deployLogs(String env, String appId, PageRequest pageRequest) {
         Page<DeployLog> deployLogs;
         if (appId != null) {
-            deployLogs = deployLogRepository.findByBuildLog_EnvAndBuildLog_AppId(env, appId, pageRequest);
+            deployLogs = deployLogRepository.findByIsDeleteFalseAndBuildLog_EnvAndBuildLog_AppId(env, appId, pageRequest);
         } else {
-            deployLogs = deployLogRepository.findByBuildLog_Env(env, pageRequest);
+            deployLogs = deployLogRepository.findByIsDeleteFalseAndBuildLog_Env(env, pageRequest);
         }
 
         PageList<DeployLogVO> pageList = new PageList<>();
         pageList.setTotalPages(deployLogs.getTotalPages());
         pageList.setTotalSize(deployLogs.getTotalElements());
         pageList.setHasNext(deployLogs.hasNext());
-        pageList.setList(deployLogs.stream().map(DeployLogVO::of).collect(Collectors.toList()));
+        pageList.setList(deployLogs.stream().map(DeployLogVO::from).collect(Collectors.toList()));
         return pageList;
     }
 }

+ 114 - 116
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/ConfigService.java

@@ -1,5 +1,6 @@
 package cn.reghao.autodop.dmaster.app.service;
 
+import cn.reghao.autodop.common.deploy.PackerType;
 import cn.reghao.autodop.common.shell.ShellExecutor;
 import cn.reghao.autodop.common.shell.ShellResult;
 import cn.reghao.autodop.common.utils.JsonUtil;
@@ -21,6 +22,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
 import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.Map;
@@ -32,81 +34,135 @@ import java.util.stream.Collectors;
  */
 @Service
 public class ConfigService {
-    private LocalDirRepository configRepository;
-    private ProjOrchestrationRepository projRepository;
+    private LocalDirRepository localDirRepository;
+    private NotificationRepository notifyRepository;
     private AppUpdateRepository updateRepository;
     private AppCompileRepository compileRepository;
     private AppPackRepository packRepository;
-    private NotificationRepository notifyRepository;
+    private ProjOrchestrationRepository projRepository;
+    private ShellExecutor shellExecutor;
 
-    public ConfigService(LocalDirRepository configRepository,
-                         ProjOrchestrationRepository projRepository,
+    public ConfigService(LocalDirRepository localDirRepository,
+                         NotificationRepository notifyRepository,
                          AppUpdateRepository updateRepository,
                          AppCompileRepository compileRepository,
                          AppPackRepository packRepository,
-                         NotificationRepository notifyRepository) {
-        this.configRepository = configRepository;
-        this.projRepository = projRepository;
+                         ProjOrchestrationRepository projRepository) {
+        this.localDirRepository = localDirRepository;
+        this.notifyRepository = notifyRepository;
         this.updateRepository = updateRepository;
         this.compileRepository = compileRepository;
         this.packRepository = packRepository;
-        this.notifyRepository = notifyRepository;
+        this.projRepository = projRepository;
+        this.shellExecutor = new ShellExecutor();
     }
 
-    public void add(String configType, String json) throws Exception {
+    public void addOrModify(String configType, String json) throws Exception {
         switch (ConfigType.valueOf(configType)) {
             // 本地文件系统目录
             case localDir:
                 LocalDir localDir = (LocalDir) JsonUtil.jsonToObject(json, LocalDir.class);
-                configRepository.save(localDir);
+                // 检查并创建目录
+                File localRepo = new File(localDir.getLocalRepo());
+                if (!localRepo.exists() && !localRepo.mkdirs()) {
+                    throw new Exception(localDir.getLocalRepo() + "不存在且创建失败...");
+                }
+
+                File compileDir = new File(localDir.getCompileDir());
+                if (!compileDir.exists() && !compileDir.mkdirs()) {
+                    throw new Exception(localDir.getCompileDir() + "不存在且创建失败...");
+                }
 
-                /*AppEnv configEntity = configRepository.findByEnv(appEnv.getEnv());
-                if (configEntity == null) {
-                    configRepository.save(appEnv);
-                }*/
+                File packDir = new File(localDir.getPackDir());
+                if (!packDir.exists() && !packDir.mkdirs()) {
+                    throw new Exception(localDir.getPackDir() + "不存在且创建失败...");
+                }
+
+                LocalDir localDirEntity = localDirRepository.findByHostId(localDir.getHostId());
+                if (localDirEntity != null) {
+                    localDir.setId(localDirEntity.getId());
+                    localDir.setCreateTime(localDirEntity.getCreateTime());
+                    localDir.setUpdateTime(LocalDateTime.now());
+                    localDir.setIsDelete(localDirEntity.getIsDelete());
+
+                    localDirRepository.save(localDir);
+                }
                 break;
             // 通知配置
             case notifier:
                 Notification notification = (Notification) JsonUtil.jsonToObject(json, Notification.class);
-                // TODO 考虑 isDelete 为 true 的情况
-                Notification notifyEntity = notifyRepository.findByNotifierName(notification.getNotifierName());
-                if (notifyEntity == null) {
-                    notifyRepository.save(notification);
+                Notification notifyEntity =
+                        notifyRepository.findByIsDeleteFalseAndNotifierName(notification.getNotifierName());
+                if (notifyEntity != null) {
+                    notification.setId(notifyEntity.getId());
+                    notification.setCreateTime(notifyEntity.getCreateTime());
+                    notification.setUpdateTime(LocalDateTime.now());
                 }
+                notification.setIsDelete(false);
+                notifyRepository.save(notification);
                 break;
             // 仓库配置
             case repo:
                 AppUpdate appUpdate = (AppUpdate) JsonUtil.jsonToObject(json, AppUpdate.class);
-                AppUpdate updateEntity = updateRepository.findByRepoName(appUpdate.getRepoName());
-                if (updateEntity == null) {
-                    updateRepository.save(appUpdate);
+                AppUpdate updateEntity = updateRepository.findByIsDeleteFalseAndRepoName(appUpdate.getRepoName());
+                if (updateEntity != null) {
+                    appUpdate.setId(updateEntity.getId());
+                    appUpdate.setCreateTime(updateEntity.getCreateTime());
+                    appUpdate.setUpdateTime(LocalDateTime.now());
                 }
+                appUpdate.setIsDelete(false);
+                updateRepository.save(appUpdate);
                 break;
             // 编译器配置
             case compiler:
                 AppCompile appCompile = (AppCompile) JsonUtil.jsonToObject(json, AppCompile.class);
-                AppCompile compileEntity = compileRepository.findByCompilerName(appCompile.getCompilerName());
-                if (compileEntity == null) {
-                    compileRepository.save(appCompile);
+                // 检测本机上是否存在编译器
+                String script = appCompile.getCompilerHome() + appCompile.getVersionCmd();
+                checkScript(script);
+
+                AppCompile compileEntity =
+                        compileRepository.findByIsDeleteFalseAndCompilerName(appCompile.getCompilerName());
+                if (compileEntity != null) {
+                    appCompile.setId(compileEntity.getId());
+                    appCompile.setCreateTime(compileEntity.getCreateTime());
+                    appCompile.setUpdateTime(LocalDateTime.now());
                 }
+                appCompile.setIsDelete(false);
+                compileRepository.save(appCompile);
                 break;
             // 打包工具配置
             case packer:
                 AppPack appPack = (AppPack) JsonUtil.jsonToObject(json, AppPack.class);
-                AppPack packEntity = packRepository.findByPackerName(appPack.getPackerName());
-                if (packEntity == null) {
-                    packRepository.save(appPack);
+                // 检测本机上是否存在 docker
+                if (PackerType.valueOf(appPack.getPackerType()) == PackerType.docker) {
+                    checkScript("docker -v");
+                }
+
+                AppPack packEntity = packRepository.findByIsDeleteFalseAndPackerName(appPack.getPackerName());
+                if (packEntity != null) {
+                    appPack.setId(packEntity.getId());
+                    appPack.setCreateTime(packEntity.getCreateTime());
+                    appPack.setUpdateTime(LocalDateTime.now());
                 }
+                appPack.setIsDelete(false);
+                packRepository.save(appPack);
                 break;
             default:
                 throw new Exception(configType + " 类型不存在");
         }
     }
 
+    private void checkScript(String script) throws Exception {
+        ShellResult shellResult = shellExecutor.execute(script);
+        if (shellResult.hasError()) {
+            throw new Exception(shellResult.getStdout());
+        }
+    }
+
     public PageList getByPage(String configType, PageRequest pageRequest) throws Exception {
         switch (ConfigType.valueOf(configType)) {
             case localDir:
-                Page<LocalDir> configs = configRepository.findAll(pageRequest);
+                Page<LocalDir> configs = localDirRepository.findAll(pageRequest);
                 PageList<LocalDir> pageList = new PageList<>();
                 pageList.setTotalSize(configs.getTotalElements());
                 pageList.setTotalPages(configs.getTotalPages());
@@ -145,107 +201,49 @@ public class ConfigService {
         }
     }
 
-    public void update(String configType, String json) throws Exception {
+    /**
+     * 只做逻辑删除
+     *
+     * @param
+     * @return
+     * @date 2020-09-30 下午2:53
+     */
+    public void delete(String configType, String name) throws Exception {
         switch (ConfigType.valueOf(configType)) {
-            // 本地文件系统目录
             case localDir:
-                LocalDir localDir = (LocalDir) JsonUtil.jsonToObject(json, LocalDir.class);
-                configRepository.save(localDir);
-                /*AppEnv configEntity = configRepository.findByEnv(appEnv.getEnv());
-                if (configEntity != null && !configEntity.equals(appEnv)) {
-                    appEnv.setId(configEntity.getId());
-                    appEnv.setIsDelete(configEntity.getIsDelete());
-                    appEnv.setCreateTime(configEntity.getCreateTime());
-                    appEnv.setUpdateTime(LocalDateTime.now());
-                    configRepository.save(appEnv);
-                } else if (configEntity == null) {
-                    configRepository.save(appEnv);
-                }*/
                 break;
-            // 通知配置
             case notifier:
-                Notification notification = (Notification) JsonUtil.jsonToObject(json, Notification.class);
-                // TODO 考虑 isDelete 为 true 的情况
-                Notification notifyEntity = notifyRepository.findByNotifierName(notification.getNotifierName());
-                if (notifyEntity != null && !notifyEntity.equals(notification)) {
-                    notification.setId(notifyEntity.getId());
-                    notification.setIsDelete(notifyEntity.getIsDelete());
-                    notification.setCreateTime(notifyEntity.getCreateTime());
-                    notification.setUpdateTime(LocalDateTime.now());
-                    notifyRepository.save(notification);
-                } else if (notifyEntity == null) {
-                    notifyRepository.save(notification);
+                Notification notifierEntity = notifyRepository.findByIsDeleteFalseAndNotifierName(name);
+                if (notifierEntity == null) {
+                    throw new Exception(name + "不存在...");
                 }
+                // TODO 处理其他实体对共享实体的引用
+                notifierEntity.setIsDelete(true);
+                notifyRepository.save(notifierEntity);
                 break;
-            // 仓库配置
             case repo:
-                AppUpdate appUpdate = (AppUpdate) JsonUtil.jsonToObject(json, AppUpdate.class);
-                AppUpdate updateEntity = updateRepository.findByRepoName(appUpdate.getRepoName());
-                if (updateEntity != null && !updateEntity.equals(appUpdate)) {
-                    appUpdate.setId(updateEntity.getId());
-                    appUpdate.setIsDelete(false);
-                    appUpdate.setCreateTime(updateEntity.getCreateTime());
-                    appUpdate.setUpdateTime(LocalDateTime.now());
-                    updateRepository.save(appUpdate);
-                } else if (updateEntity == null) {
-                    updateRepository.save(appUpdate);
+                AppUpdate updateEntity = updateRepository.findByIsDeleteFalseAndRepoName(name);
+                if (updateEntity == null) {
+                    throw new Exception(name + "不存在...");
                 }
+                updateEntity.setIsDelete(true);
+                updateRepository.save(updateEntity);
                 break;
-            // 编译器配置
             case compiler:
-                AppCompile appCompile = (AppCompile) JsonUtil.jsonToObject(json, AppCompile.class);
-                String cmd = appCompile.getCompilerHome() + "/" + appCompile.getVersionCmd();
-                ShellExecutor executor = new ShellExecutor();
-                ShellResult result = executor.execute(null, cmd);
-                if (result.getExitCode() != 0) {
-                    return;
-                }
-
-                AppCompile compileEntity = compileRepository.findByCompilerName(appCompile.getCompilerName());
-                if (compileEntity != null && !compileEntity.equals(appCompile)) {
-                    appCompile.setId(compileEntity.getId());
-                    appCompile.setIsDelete(false);
-                    appCompile.setCreateTime(compileEntity.getCreateTime());
-                    appCompile.setUpdateTime(LocalDateTime.now());
-                    compileRepository.save(appCompile);
-                } else if (compileEntity == null) {
-                    compileRepository.save(appCompile);
+                AppCompile compileEntity = compileRepository.findByIsDeleteFalseAndCompilerName(name);
+                if (compileEntity == null) {
+                    throw new Exception(name + "不存在...");
                 }
+                compileEntity.setIsDelete(true);
+                compileRepository.save(compileEntity);
                 break;
-            // 打包工具配置
             case packer:
-                AppPack appPack = (AppPack) JsonUtil.jsonToObject(json, AppPack.class);
-                AppPack packEntity = packRepository.findByPackerName(appPack.getPackerName());
-                if (packEntity != null && !packEntity.equals(appPack)) {
-                    appPack.setId(packEntity.getId());
-                    appPack.setIsDelete(false);
-                    appPack.setCreateTime(packEntity.getCreateTime());
-                    appPack.setUpdateTime(LocalDateTime.now());
-                    packRepository.save(appPack);
-                } else if (packEntity == null) {
-                    packRepository.save(appPack);
+                AppPack packEntity = packRepository.findByIsDeleteFalseAndPackerName(name);
+                if (packEntity == null) {
+                    throw new Exception(name + "不存在...");
                 }
-                break;
-            default:
-                throw new Exception(configType + " 类型不存在");
-        }
-    }
-
-    public void delete(String configType, String name) throws Exception {
-        switch (ConfigType.valueOf(configType)) {
-            case localDir:
-                break;
-            case notifier:
-                notifyRepository.deleteByNotifierName(name);
-                break;
-            case repo:
-                updateRepository.deleteByRepoName(name);
-                break;
-            case compiler:
-                compileRepository.deleteByCompilerName(name);
-                break;
-            case packer:
-                packRepository.deleteByPackerName(name);
+                packEntity.setIsDelete(true);
+                packRepository.save(packEntity);
                 break;
             default:
                 throw new Exception(configType + " 类型不存在");

+ 71 - 34
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/OrchestrateService.java

@@ -13,6 +13,8 @@ import cn.reghao.autodop.dmaster.app.repository.build.AppPackRepository;
 import cn.reghao.autodop.dmaster.app.repository.build.AppUpdateRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.*;
 import cn.reghao.autodop.dmaster.app.vo.*;
+import cn.reghao.autodop.dmaster.app.vo.orchestration.AppVO;
+import cn.reghao.autodop.dmaster.app.vo.orchestration.ProjVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
@@ -47,20 +49,28 @@ public class OrchestrateService {
         this.notificationRepository = notificationRepository;
     }
 
-    public void addOrModify(int type, String json, String type1) throws Exception {
+    public void addOrModify(int type, String json) throws Exception {
         switch (type) {
             case 1:
                 // 项目编排
-                ProjOrchestrationVO projVO = (ProjOrchestrationVO) JsonUtil.jsonToObject(json, ProjOrchestrationVO.class);
+                ProjVO projVO = (ProjVO) JsonUtil.jsonToObject(json, ProjVO.class);
                 AppBuild appBuild = checkSharedBuildConfig(projVO.getAppBuild());
-                ProjOrchestration proj = projVO.to();
+                ProjOrchestration proj = ProjVO.to(projVO);
                 proj.setAppBuild(appBuild);
+
+                ProjOrchestration projEntity = projRepository.findByIsDeleteFalseAndProjId(proj.getProjId());
+                if (projEntity != null) {
+                    proj.setId(projEntity.getId());
+                    proj.setCreateTime(projEntity.getCreateTime());
+                    proj.setUpdateTime(LocalDateTime.now());
+                }
+                proj.setIsDelete(false);
                 projRepository.save(proj);
                 break;
             case 2:
                 // 应用编排
-                AppOrchestrationVO appVO = (AppOrchestrationVO) JsonUtil.jsonToObject(json, AppOrchestrationVO.class);
-                AppOrchestration app = appVO.to();
+                AppVO appVO = (AppVO) JsonUtil.jsonToObject(json, AppVO.class);
+                AppOrchestration app = AppVO.to(appVO);
                 if (appVO.getProjId() == null) {
                     AppBuild appBuild1 = checkSharedBuildConfig(appVO.getAppBuild());
                     app.setAppBuild(appBuild1);
@@ -69,47 +79,52 @@ public class OrchestrateService {
                     checkSharedNotification(app, notifier);
                 } else {
                     // TODO
-                    ProjOrchestration entity = projRepository.findByProjId(appVO.getProjId());
-                    app.setProj(entity);
-                }
-                // 新增
-                if ("add".equals(type1)) {
-                    app.setIsDelete(false);
-                    appRepository.save(app);
-                } else {
-                    // 修改
-                    AppOrchestration entity = appRepository.findByAppId(app.getAppId());
+                    ProjOrchestration entity = projRepository.findByIsDeleteFalseAndProjId(appVO.getProjId());
                     if (entity == null) {
-                        throw new Exception(app.getAppId() + " 不存在...");
+                        throw new Exception("项目 " + appVO.getProjId() + " 不存在...");
                     }
-                    app.setId(entity.getId());
-                    app.setIsDelete(false);
-                    app.setCreateTime(entity.getCreateTime());
+                    app.setProj(entity);
+                }
+
+                AppOrchestration appEntity = appRepository.findByIsDeleteFalseAndAppId(app.getAppId());
+                if (appEntity != null) {
+                    app.setId(appEntity.getId());
+                    app.setCreateTime(appEntity.getCreateTime());
                     app.setUpdateTime(LocalDateTime.now());
-                    appRepository.save(app);
                 }
+                app.setIsDelete(false);
+                appRepository.save(app);
+                break;
             default:
+                throw new Exception("项目或应用不存在...");
         }
     }
 
+    /**
+     * 检查构建共享配置
+     *
+     * @param
+     * @return
+     * @date 2020-09-30 下午3:17
+     */
     private AppBuild checkSharedBuildConfig(AppBuildVO buildVO) throws Exception {
         AppBuild appBuild = new AppBuild();
         String updater = buildVO.getUpdater();
-        AppUpdate appUpdate = appUpdateRepository.findByRepoName(updater);
+        AppUpdate appUpdate = appUpdateRepository.findByIsDeleteFalseAndRepoName(updater);
         if (appUpdate == null) {
             throw new Exception(updater + " 不存在...");
         }
         appBuild.setAppUpdate(appUpdate);
 
         String compiler = buildVO.getCompiler();
-        AppCompile appCompile = appCompileRepository.findByCompilerName(compiler);
+        AppCompile appCompile = appCompileRepository.findByIsDeleteFalseAndCompilerName(compiler);
         if (appCompile == null) {
             throw new Exception(compiler + " 不存在...");
         }
         appBuild.setAppCompile(appCompile);
 
         String packer = buildVO.getPacker();
-        AppPack appPack = appPackRepository.findByPackerName(packer);
+        AppPack appPack = appPackRepository.findByIsDeleteFalseAndPackerName(packer);
         if (appPack == null) {
             throw new Exception(packer + " 不存在...");
         }
@@ -117,9 +132,16 @@ public class OrchestrateService {
         return appBuild;
     }
 
+    /**
+     * 检查通知共享配置
+     *
+     * @param
+     * @return
+     * @date 2020-09-30 下午3:18
+     */
     private void checkSharedNotification(AppOrchestration app, String notifier) throws Exception {
         if (notifier != null) {
-            Notification notification = notificationRepository.findByNotifierName(notifier);
+            Notification notification = notificationRepository.findByIsDeleteFalseAndNotifierName(notifier);
             if (notification == null) {
                 throw new Exception(notification + " 不存在...");
             }
@@ -130,10 +152,14 @@ public class OrchestrateService {
     public boolean copy(int type, String from, String to) throws CloneNotSupportedException {
         switch (type) {
             case 1:
+                ProjOrchestration projEntity = projRepository.findByIsDeleteFalseAndProjId(from);
+                ProjOrchestration newProj = projRepository.findByIsDeleteFalseAndProjId(to);
+
+
                 break;
             case 2:
-                AppOrchestration appEntity = appRepository.findByAppId(from);
-                AppOrchestration newApp = appRepository.findByAppId(to);
+                AppOrchestration appEntity = appRepository.findByIsDeleteFalseAndAppId(from);
+                AppOrchestration newApp = appRepository.findByIsDeleteFalseAndAppId(to);
                 if (appEntity == null || newApp != null) {
                     return false;
                 }
@@ -162,20 +188,20 @@ public class OrchestrateService {
         switch (type) {
             case 1:
                 Page<ProjOrchestration> projPages = projRepository.findAll(pageRequest);
-                PageList<ProjOrchestrationVO> projVOs = new PageList<>();
+                PageList<ProjVO> projVOs = new PageList<>();
                 projVOs.setTotalSize(projPages.getTotalElements());
                 projVOs.setTotalPages(projPages.getTotalPages());
                 projVOs.setList(projPages.getContent().stream()
-                        .map(proj -> new ProjOrchestrationVO().from(proj))
+                        .map(proj -> new ProjVO().from(proj))
                         .collect(Collectors.toList()));
                 return projVOs;
             case 2:
-                Page<AppOrchestration> appPages = appRepository.findByEnv(env, pageRequest);
-                PageList<AppOrchestrationVO> appVOs = new PageList<>();
+                Page<AppOrchestration> appPages = appRepository.findByIsDeleteFalseAndEnv(env, pageRequest);
+                PageList<AppVO> appVOs = new PageList<>();
                 appVOs.setTotalSize(appPages.getTotalElements());
                 appVOs.setTotalPages(appPages.getTotalPages());
                 appVOs.setList(appPages.getContent().stream()
-                        .map(app -> new AppOrchestrationVO().from(app))
+                        .map(app -> new AppVO().from(app))
                         .collect(Collectors.toList()));
                 return appVOs;
             default:
@@ -190,15 +216,26 @@ public class OrchestrateService {
      * @return
      * @date 2020-05-22 下午4:52
      */
-    public void delete(int type, String appId) {
+    public void delete(int type, String appId) throws Exception {
         switch (type) {
             case 1:
-                projRepository.deleteByProjId(appId);
+                ProjOrchestration projEntity = projRepository.findByIsDeleteFalseAndProjId(appId);
+                if (projEntity == null) {
+                    throw new Exception(appId + " 不存在");
+                }
+                projEntity.setIsDelete(true);
+                projRepository.save(projEntity);
                 break;
             case 2:
-                appRepository.deleteByAppId(appId);
+                AppOrchestration appEntity = appRepository.findByIsDeleteFalseAndAppId(appId);
+                if (appEntity == null) {
+                    throw new Exception(appId + " 不存在");
+                }
+                appEntity.setIsDelete(true);
+                appRepository.save(appEntity);
                 break;
             default:
+                throw new Exception(appId + " 不存在");
         }
     }
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/StatusManager.java

@@ -55,7 +55,7 @@ public class StatusManager {
     }
 
     public List<AppStatus> status(String env, PageRequest pageRequest) {
-        Page<DeployedApp> page = deployedRepository.findByAppEnv(env, pageRequest);
+        Page<DeployedApp> page = deployedRepository.findByIsDeleteFalseAndApp_Env(env, pageRequest);
         List<AppStatus> appStatusList = new ArrayList<>();
         // TODO 异步处理
         try {

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

@@ -191,7 +191,7 @@ public class AppIntegrate {
     private void buildException(BuildLog buildLog, Exception e) {
         buildLog.setStatusCode(1);
         buildLog.setMsg("构建失败");
-        buildLog.setErrDetail(ExceptionUtil.errorMsg(e));
+        buildLog.setErrDetail(ExceptionUtil.errorMsg(e).substring(0, 1000));
         buildLog.setBuildTime(LocalDateTime.now());
     }
 

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuildDispatcher.java

@@ -111,14 +111,14 @@ public class BuildDispatcher {
 
     public BuildDeployResult deploy(String appId, String commitId) {
         AppOrchestration app = caching.findByAppId(appId);
-        CommitLog commitLog = commitLogRepository.findByCommitId(commitId);
+        CommitLog commitLog = commitLogRepository.findByIsDeleteFalseAndCommitId(commitId);
         AppBuild appBuild = app.getAppBuild();
-        BuildLog buildLog = buildLogRepository.findByCommitLogAndAppCompileAndAppPackAndAppIdAndStatusCode(
+        BuildLog buildLog = buildLogRepository.findByIsDeleteFalseAndCommitLogAndAppCompileAndAppPackAndAppIdAndStatusCode(
                 commitLog, appBuild.getAppCompile(), appBuild.getAppPack(), appId, 0);
         if (buildLog != null) {
             Set<String> hosts = app.getAppDeploy().getHosts();
             // 当前 commit 最近一次部署时已部署的主机
-            Set<String> deployedHosts = deployLogRepository.findByBuildLog(buildLog).stream()
+            Set<String> deployedHosts = deployLogRepository.findByIsDeleteFalseAndBuildLog(buildLog).stream()
                     .filter(deployLog -> deployLog.getStatusCode() != 0)
                     .map(DeployLog::getHost)
                     .collect(Collectors.toSet());

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/compiler/ShellCompiler.java

@@ -28,7 +28,7 @@ public class ShellCompiler implements CodeCompiler {
     public void compile(String appName, String appDir, String env) throws Exception {
         ShellResult result = shell.execute(appDir, script);
         if (result.hasError()) {
-            Map<String, List<String>> map = new HashMap<>();
+            Map<String, String> map = new HashMap<>();
             map.put("stdout", result.getStdout());
             map.put("stderr", result.getStderr());
             throw new Exception(JsonUtil.objectToJson(map));

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/updater/CommitLog.java

@@ -23,7 +23,7 @@ public class CommitLog extends BaseEntity {
     private String branch;
     private String commitId;
     private String commitAuthor;
-    // TODO Data too long for column 'commit_msg' at row 1
+    @Column(length = 1024)
     private String commitMsg;
     // 毫秒级时间戳
     private long commitTime;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/updater/GitImpl.java

@@ -136,7 +136,7 @@ public class GitImpl implements CodeUpdater {
             commitLog.setCommitId(objectId.name().substring(0, 8));
             commitLog.setCommitTime(commitTime*1000);
             commitLog.setCommitAuthor(commitAuthor);
-            commitLog.setCommitMsg(commitMsg);
+            commitLog.setCommitMsg(commitMsg.substring(0, 1000));
             return commitLog;
         }
     }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/updater/SvnImpl.java

@@ -110,7 +110,7 @@ public class SvnImpl implements CodeUpdater {
             Map<String, SVNLogEntryPath> changedPaths = logEntry.getChangedPaths();
 
             commitLog.setCommitId(commitId);
-            commitLog.setCommitMsg(commitMsg);
+            commitLog.setCommitMsg(commitMsg.substring(0, 1000));
             commitLog.setCommitAuthor(commitAuthor);
             commitLog.setCommitTime(commitTime);
             commitLog.setChangedFiles(changedFileList(changedPaths));

+ 10 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/AppBuildVO.java

@@ -13,10 +13,15 @@ public class AppBuildVO {
     private String compiler;
     private String packer;
 
-    public AppBuildVO appBuildVO(AppBuild appBuild) {
-        this.updater = appBuild.getAppUpdate().getRepoName();
-        this.compiler = appBuild.getAppCompile().getCompilerName();
-        this.packer = appBuild.getAppPack().getPackerName();
-        return this;
+    public static AppBuildVO from(AppBuild appBuild) {
+        AppBuildVO vo = new AppBuildVO();
+        vo.updater = appBuild.getAppUpdate().getRepoName();
+        vo.compiler = appBuild.getAppCompile().getCompilerName();
+        vo.packer = appBuild.getAppPack().getPackerName();
+        return vo;
+    }
+
+    public static AppBuild to(AppBuildVO vo) {
+        return null;
     }
 }

+ 0 - 66
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/AppOrchestrationVO.java

@@ -1,66 +0,0 @@
-package cn.reghao.autodop.dmaster.app.vo;
-
-import cn.reghao.autodop.dmaster.app.entity.deploy.AppDeploy;
-import cn.reghao.autodop.dmaster.app.entity.deploy.AppRunning;
-import cn.reghao.autodop.dmaster.app.entity.orchestration.AppOrchestration;
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2020-02-29 17:22:19
- */
-@Data
-public class AppOrchestrationVO {
-    private String appId;
-    private String projId;
-    private String description;
-    private String env;
-    private String appType;
-    private String appRepo;
-    private String branch;
-    private String dirname;
-    private String compileDir;
-    private boolean enable;
-    private boolean alwaysBuild;
-    private AppBuildVO appBuild;
-    private AppDeploy appDeploy;
-    private AppRunning appRunning;
-    private String notifier;
-
-    public AppOrchestration to() {
-        AppOrchestration app = new AppOrchestration();
-        app.setAppId(this.appId);
-        app.setDescription(this.description);
-        app.setEnv(this.env);
-        app.setAppType(this.appType);
-        app.setAppRepo(this.appRepo);
-        app.setBranch(this.branch);
-        app.setDirname(this.dirname);
-        app.setCompileDir(this.compileDir);
-        app.setEnable(this.enable);
-        app.setAlwaysBuild(this.alwaysBuild);
-        app.setAppDeploy(this.appDeploy);
-        app.setAppRunning(this.appRunning);
-
-        return app;
-    }
-
-    public AppOrchestrationVO from(AppOrchestration app) {
-        this.appId = app.getAppId();
-        this.description = app.getDescription();
-        this.env = app.getEnv();
-        this.appType = app.getAppType();
-        this.appRepo = app.getAppRepo();
-        this.branch = app.getBranch();
-        this.dirname = app.getDirname();
-        this.compileDir = app.getCompileDir();
-        this.enable = app.isEnable();
-        this.alwaysBuild = app.isAlwaysBuild();
-        this.appDeploy = app.getAppDeploy();
-        this.appRunning = app.getAppRunning();
-
-        this.notifier = app.getNotification().getNotifierName();
-        this.appBuild = new AppBuildVO().appBuildVO(app.getAppBuild());
-        return this;
-    }
-}

+ 0 - 37
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/ProjOrchestrationVO.java

@@ -1,37 +0,0 @@
-package cn.reghao.autodop.dmaster.app.vo;
-
-import cn.reghao.autodop.dmaster.app.entity.orchestration.ProjOrchestration;
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2020-02-29 17:22:19
- */
-@Data
-public class ProjOrchestrationVO {
-    private String projId;
-    private String description;
-    private String projRepo;
-    private String branch;
-    private AppBuildVO appBuild;
-
-    public ProjOrchestration to() {
-        ProjOrchestration proj = new ProjOrchestration();
-        proj.setProjId(this.projId);
-        proj.setDescription(this.description);
-        proj.setProjRepo(this.projRepo);
-        proj.setBranch(this.branch);
-        return proj;
-    }
-
-    public ProjOrchestrationVO from(ProjOrchestration proj) {
-        this.projId = proj.getProjId();
-        this.description = proj.getDescription();
-        this.projRepo = proj.getProjRepo();
-        this.branch = proj.getBranch();
-
-        this.appBuild = new AppBuildVO().appBuildVO(proj.getAppBuild());;
-
-        return this;
-    }
-}

+ 0 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildDeployResult.java

@@ -6,7 +6,6 @@ import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import java.time.LocalDateTime;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -27,7 +26,6 @@ public class BuildDeployResult {
     // 0 - 成功 1 - 失败
     private int statusCode;
     private String msg;
-    //private String errDetail;
     private List<String> deploySuccessed;
     private List<String> deployFailure;
 
@@ -48,7 +46,6 @@ public class BuildDeployResult {
             buildDeployResult.setCommitMsg(buildLog.getCommitLog().getCommitMsg());
             return buildDeployResult;
         } else {
-            //buildDeployResult.setErrDetail(buildLog.getErrDetail());
             if (buildLog.getCommitLog() != null) {
                 buildDeployResult.setCommitId(buildLog.getCommitLog().getCommitId());
                 buildDeployResult.setCommitMsg(buildLog.getCommitLog().getCommitMsg());

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildLogVO.java

@@ -25,7 +25,7 @@ public class BuildLogVO {
     private long totalTime;
 
 
-    public static BuildLogVO of(BuildLog buildLog) {
+    public static BuildLogVO from(BuildLog buildLog) {
         BuildLogVO buildLogVO = new BuildLogVO();
         buildLogVO.appId = buildLog.getAppId();
         buildLogVO.env = buildLog.getEnv();

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/CommitLogVO.java

@@ -23,7 +23,7 @@ public class CommitLogVO {
     private String commitTime;
     private List<ChangedFile> changedFiles;
 
-    public static CommitLogVO of(CommitLog commitLog) {
+    public static CommitLogVO from(CommitLog commitLog) {
         CommitLogVO commitLogVO = new CommitLogVO();
         commitLogVO.appId = commitLog.getAppId();
         commitLogVO.remote = commitLog.getRemote();

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/DeployLogVO.java

@@ -16,7 +16,7 @@ public class DeployLogVO {
     private long deployTotalTime;
     private String msg;
 
-    public static DeployLogVO of(DeployLog deployLog) {
+    public static DeployLogVO from(DeployLog deployLog) {
         BuildLog buildLog = deployLog.getBuildLog();
         DeployLogVO deployLogVO = new DeployLogVO();
         deployLogVO.appId = buildLog.getAppId();

+ 66 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java

@@ -0,0 +1,66 @@
+package cn.reghao.autodop.dmaster.app.vo.orchestration;
+
+import cn.reghao.autodop.dmaster.app.entity.deploy.AppDeploy;
+import cn.reghao.autodop.dmaster.app.entity.deploy.AppRunning;
+import cn.reghao.autodop.dmaster.app.entity.orchestration.AppOrchestration;
+import cn.reghao.autodop.dmaster.app.vo.AppBuildVO;
+import lombok.Data;
+
+/**
+ * @author reghao
+ * @date 2020-02-29 17:22:19
+ */
+@Data
+public class AppVO {
+    private String appId;
+    private String projId;
+    private String description;
+    private String env;
+    private String appType;
+    private String appRepo;
+    private String branch;
+    private String dirname;
+    private String compileDir;
+    private boolean enable;
+    private boolean alwaysBuild;
+    private AppBuildVO appBuild;
+    private AppDeploy appDeploy;
+    private AppRunning appRunning;
+    private String notifier;
+
+    public static AppVO from(AppOrchestration app) {
+        AppVO vo = new AppVO();
+        vo.appId = app.getAppId();
+        vo.description = app.getDescription();
+        vo.env = app.getEnv();
+        vo.appType = app.getAppType();
+        vo.appRepo = app.getAppRepo();
+        vo.branch = app.getBranch();
+        vo.dirname = app.getDirname();
+        vo.compileDir = app.getCompileDir();
+        vo.enable = app.isEnable();
+        vo.alwaysBuild = app.isAlwaysBuild();
+        vo.appDeploy = app.getAppDeploy();
+        vo.appRunning = app.getAppRunning();
+        vo.notifier = app.getNotification().getNotifierName();
+        vo.appBuild = AppBuildVO.from(app.getAppBuild());
+        return vo;
+    }
+
+    public static AppOrchestration to(AppVO vo) {
+        AppOrchestration app = new AppOrchestration();
+        app.setAppId(vo.appId);
+        app.setDescription(vo.description);
+        app.setEnv(vo.env);
+        app.setAppType(vo.appType);
+        app.setAppRepo(vo.appRepo);
+        app.setBranch(vo.branch);
+        app.setDirname(vo.dirname);
+        app.setCompileDir(vo.compileDir);
+        app.setEnable(vo.enable);
+        app.setAlwaysBuild(vo.alwaysBuild);
+        app.setAppDeploy(vo.appDeploy);
+        app.setAppRunning(vo.appRunning);
+        return app;
+    }
+}

+ 37 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/ProjVO.java

@@ -0,0 +1,37 @@
+package cn.reghao.autodop.dmaster.app.vo.orchestration;
+
+import cn.reghao.autodop.dmaster.app.entity.orchestration.ProjOrchestration;
+import cn.reghao.autodop.dmaster.app.vo.AppBuildVO;
+import lombok.Data;
+
+/**
+ * @author reghao
+ * @date 2020-02-29 17:22:19
+ */
+@Data
+public class ProjVO {
+    private String projId;
+    private String description;
+    private String projRepo;
+    private String branch;
+    private AppBuildVO appBuild;
+
+    public static ProjVO from(ProjOrchestration proj) {
+        ProjVO vo = new ProjVO();
+        vo.projId = proj.getProjId();
+        vo.description = proj.getDescription();
+        vo.projRepo = proj.getProjRepo();
+        vo.branch = proj.getBranch();
+        vo.appBuild = AppBuildVO.from(proj.getAppBuild());;
+        return vo;
+    }
+    
+    public static ProjOrchestration to(ProjVO vo) {
+        ProjOrchestration proj = new ProjOrchestration();
+        proj.setProjId(vo.projId);
+        proj.setDescription(vo.description);
+        proj.setProjRepo(vo.projRepo);
+        proj.setBranch(vo.branch);
+        return proj;
+    }
+}

+ 36 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/controller/IndexController.java

@@ -36,6 +36,37 @@ public class IndexController {
         this.permissionRepository = permissionRepository;
     }
 
+    @GetMapping("/user/info")
+    public ResponseEntity<String> userInfo() {
+        UserResultData userResultData = new UserResultData();
+        userResultData.setAvatar("https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif");
+        userResultData.setIntroduction("I am a super administrator");
+        userResultData.setName("Super Mario");
+        List<String> list = new ArrayList<>();
+        list.add("admin");
+        userResultData.setRoles(list);
+
+        UserResult userResult = new UserResult();
+        userResult.setCode(20000);
+        userResult.setData(userResultData);
+
+        return ResponseEntity.ok().body(JsonUtil.objectToJson(userResult));
+    }
+
+    @Data
+    static class UserResultData {
+        private String avatar;
+        private String introduction;
+        private String name;
+        private List<String> roles;
+    }
+
+    @Data
+    static class UserResult {
+        private int code;
+        private UserResultData data;
+    }
+
     @ApiOperation(value = "获取用户信息")
     @ApiImplicitParams(
             @ApiImplicitParam(name="appId", value="应用 ID", paramType="path", dataType = "String")
@@ -88,9 +119,12 @@ public class IndexController {
         return ResponseEntity.ok().body(JsonUtil.objectToJson(resultData));
     }
 
-    @PostMapping("/login")
+    @PostMapping("/logout")
     public ResponseEntity<String> login() {
-        return ResponseEntity.ok().body("");
+        Map<String, String> map = new HashMap<>();
+        map.put("code", "20000");
+        map.put("data", "success");
+        return ResponseEntity.ok().body(JsonUtil.objectToJson(map));
     }
 
     @GetMapping("/api/getCardsData")

+ 6 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/jwt/UsernamePasswordAuthFilter.java

@@ -70,12 +70,12 @@ public class UsernamePasswordAuthFilter extends AbstractAuthenticationProcessing
         String accessToken = JwtToken.accessToken(auth.getName(), authorities.toString());
         String refreshToken = JwtToken.refreshToken(auth.getName());
         ResultData resultData = new ResultData();
-        resultData.setMsg("登录成功");
-        resultData.setSuccess(true);
         resultData.setToken(accessToken);
-        resultData.setUser(auth.getName());
+        /*resultData.setMsg("登录成功");
+        resultData.setSuccess(true);
+        resultData.setUser(auth.getName());*/
         Result result = new Result();
-        result.setCode(0);
+        result.setCode(20000);
         result.setData(resultData);
 
         response.setHeader("Authorization", "Bearer " + accessToken);
@@ -121,9 +121,9 @@ public class UsernamePasswordAuthFilter extends AbstractAuthenticationProcessing
 
     @Data
     class ResultData {
-        private String msg;
-        private boolean success;
         private String token;
+        private String msg;
+        //private boolean success;
         private String user;
     }
 }

+ 25 - 17
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/utils/AfterAppStart.java

@@ -3,6 +3,7 @@ package cn.reghao.autodop.dmaster.common.utils;
 import cn.reghao.autodop.common.shell.ShellExecutor;
 import cn.reghao.autodop.common.shell.ShellResult;
 import cn.reghao.autodop.common.utils.FileUtil;
+import cn.reghao.autodop.common.utils.NetworkUtil;
 import cn.reghao.autodop.dmaster.app.entity.LocalDir;
 import cn.reghao.autodop.dmaster.app.entity.build.AppCompile;
 import cn.reghao.autodop.dmaster.app.repository.build.AppCompileRepository;
@@ -14,6 +15,7 @@ import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
 
 import java.io.File;
+import java.net.SocketException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -40,20 +42,26 @@ public class AfterAppStart implements ApplicationRunner {
 
     @Override
     public void run(ApplicationArguments args) {
-        List<LocalDir> list = localDirRepository.findAll();
-        LocalDir localDir;
-        if (list.size() != 0) {
-            localDir = list.get(0);
-        } else {
-            String home = System.getProperty("user.home");
-            localDir = new LocalDir();
-            localDir.setLocalRepo(home + "/opt/data/autodop/local-repo");
-            localDir.setCompileDir(home + "/opt/data/autodop/compile-dir");
-            localDir.setPackDir(home + "/opt/data/autodop/pack-dir");
-            localDirRepository.save(localDir);
+        try {
+            String hostId = NetworkUtil.ipv4().get(0).getAddress();
+            LocalDir localDir = localDirRepository.findByHostId(hostId);
+            if (localDir == null) {
+                String home = System.getProperty("user.home");
+                localDir = new LocalDir();
+                localDir.setHostId(hostId);
+                localDir.setLocalRepo(home + "/opt/data/autodop/local-repo");
+                localDir.setCompileDir(home + "/opt/data/autodop/compile-dir");
+                localDir.setPackDir(home + "/opt/data/autodop/pack-dir");
+                localDir.setIsDelete(false);
+                localDirRepository.save(localDir);
+            }
+            initialize(localDir);
+            log.info("autodop-master 初始化完成...");
+        } catch (SocketException e) {
+            e.printStackTrace();
+            // TODO 结束 autodop-master 进程
+            log.error("autodop-master 启动失败...");
         }
-        initialize(localDir);
-        log.info("autodop-master 初始化完成...");
     }
 
     public void initialize(LocalDir localDir) {
@@ -98,16 +106,16 @@ public class AfterAppStart implements ApplicationRunner {
      * @date 2020-06-25 下午10:49
      */
     private void checkCompilerVersion() {
-        ShellExecutor shell = new ShellExecutor();
+        /*ShellExecutor shell = new ShellExecutor();
         List<String> list = compileRepository.findAll().stream()
                 .filter(appCompile -> !"none".equalsIgnoreCase(appCompile.getCompilerType()))
                 .map(appCompile -> version(appCompile, shell))
                 .collect(Collectors.toList());
 
-        System.out.println();
+        System.out.println();*/
     }
 
-    private String version(AppCompile appCompile, ShellExecutor shell) {
+    /*private String version(AppCompile appCompile, ShellExecutor shell) {
         String compilerHome = appCompile.getCompilerHome();
         String versionCmd = appCompile.getVersionCmd();
         ShellResult result = shell.execute(compilerHome + "/" + versionCmd, "");
@@ -121,5 +129,5 @@ public class AfterAppStart implements ApplicationRunner {
             result.getStdout().forEach(res -> sb.append(res).append(System.lineSeparator()));
             return sb.toString();
         }
-    }
+    }*/
 }