Explorar el Código

添加了一个通知类,并在相应编排中添加通知配置

reghao hace 6 años
padre
commit
f5abd56c4c

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/interceptor/MethodTimeInterceptor.java

@@ -21,8 +21,8 @@ import org.springframework.util.StopWatch;
 public class MethodTimeInterceptor {
     // 拦截 cn.reghao.autodop.dmaster.orchestrate.controller 包中的所有方法
     private final static String POINT = "execution (* cn.reghao.autodop.dmaster.orchestrate.controller..*.*(..))";
-    // 拦截 cn.reghao.autodop.dmaster.app.controller 包中的所有方法
-    private final static String POINT1 = "execution (* cn.reghao.autodop.dmaster.app.controller..*.*(..))";
+    // 拦截 cn.reghao.autodop.dmaster.app.service.build 包中的所有方法
+    private final static String POINT1 = "execution (* cn.reghao.autodop.dmaster.app.service.build..*.*(..))";
 
     @Pointcut(POINT)
     public void timeConsumed(){

+ 11 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/caching/OrchestrationCaching.java

@@ -2,12 +2,14 @@ package cn.reghao.autodop.dmaster.orchestrate.caching;
 
 import cn.reghao.autodop.dmaster.orchestrate.dao.AppDAO;
 import cn.reghao.autodop.dmaster.orchestrate.pojo.orchestration.AppOrchestration;
+import cn.reghao.autodop.dmaster.orchestrate.repository.NotifierRepository;
 import cn.reghao.autodop.dmaster.orchestrate.repository.build.AppPackerRepository;
 import cn.reghao.autodop.dmaster.orchestrate.repository.build.CodeCompilerRepository;
 import cn.reghao.autodop.dmaster.orchestrate.repository.build.ReposAuthRepository;
 import cn.reghao.autodop.dmaster.orchestrate.repository.orchestration.AppOrchestrationRepository;
 import cn.reghao.autodop.dmaster.orchestrate.repository.orchestration.ProjectOrchestrationRepository;
 import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.CachePut;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
@@ -21,6 +23,7 @@ public class OrchestrationCaching {
     private AppOrchestrationRepository appRepository;
     private AppDAO appDAO;
 
+    private NotifierRepository notifierRepository;
     private ReposAuthRepository reposAuthRepository;
     private CodeCompilerRepository codeCompilerRepository;
     private AppPackerRepository appPackerRepository;
@@ -29,18 +32,21 @@ public class OrchestrationCaching {
         this.appRepository = appRepository;
     }
 
-    //@Cacheable(value = "app_orchestration", key = "#app")
+    @Cacheable(cacheNames = "orchestration", key = "#app.identifier")
     public void add(AppOrchestration app) {
-
     }
 
-    @Cacheable(cacheNames = "app_orchestration", key = "#identifier")
+    @Cacheable(cacheNames = "orchestration", key = "#identifier")
     public AppOrchestration findByIdentifier(String identifier) {
+        // TODO 数据库中没有数据时不缓存
         return appRepository.findByIdentifier(identifier);
     }
 
-    //@CacheEvict
-    public void delete(String identifier) {
+    @CachePut(cacheNames = "orchestration", key = "#app.identifier")
+    public void modify(AppOrchestration app) {
+    }
 
+    @CacheEvict(cacheNames = "orchestration", key = "#identifier")
+    public void delete(String identifier) {
     }
 }

+ 21 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/pojo/Notifier.java

@@ -0,0 +1,21 @@
+package cn.reghao.autodop.dmaster.orchestrate.pojo;
+
+import cn.reghao.autodop.dmaster.orchestrate.pojo.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.persistence.Entity;
+
+/**
+ * @author reghao
+ * @date 2020-03-06 21:20:06
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Entity
+public class Notifier extends BaseEntity {
+    // ding, email, sms
+    private String notifierType;
+    private String notifierName;
+    private String notifierAddress;
+}

+ 5 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/pojo/orchestration/AppOrchestration.java

@@ -19,11 +19,13 @@ import java.util.Map;
 @EqualsAndHashCode(callSuper = false)
 @Entity
 public class AppOrchestration extends Orchestration {
-    private String entryDir;
-    @ElementCollection
-    private Map<String, String> configFiles;
     private AppBuild build;
     private ProjBuild projBuild;
     private AppDeploy deploy;
     private AppRunning running;
+    // 编译 app 时所处的目录
+    private String entryDir;
+    // TODO 假设在集群部署时应用只有访问地址不一样,其它的配置文件都是一样
+    @ElementCollection
+    private Map<String, String> configFiles;
 }

+ 7 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/pojo/orchestration/Orchestration.java

@@ -1,6 +1,7 @@
 package cn.reghao.autodop.dmaster.orchestrate.pojo.orchestration;
 
 import cn.reghao.autodop.dmaster.orchestrate.pojo.BaseEntity;
+import cn.reghao.autodop.dmaster.orchestrate.pojo.Notifier;
 import cn.reghao.autodop.dmaster.orchestrate.pojo.build.constant.OrchestrationType;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -21,7 +22,11 @@ public class Orchestration extends BaseEntity {
     @Column(nullable = false, unique = true)
     protected String identifier;
     protected String description;
+    // dev, test, prod
+    protected String env;
+    @ManyToOne(cascade = CascadeType.PERSIST)
+    protected Notifier notifier;
 
-    @Enumerated(EnumType.STRING)
-    protected OrchestrationType orchestrationType;
+    //@Enumerated(EnumType.STRING)
+    protected String orchestrationType;
 }

+ 13 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/repository/NotifierRepository.java

@@ -0,0 +1,13 @@
+package cn.reghao.autodop.dmaster.orchestrate.repository;
+
+import cn.reghao.autodop.dmaster.orchestrate.pojo.Notifier;
+import cn.reghao.autodop.dmaster.orchestrate.pojo.build.ReposAuth;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author reghao
+ * @date 2020-01-21 14:53:03
+ */
+public interface NotifierRepository extends JpaRepository<Notifier, Long> {
+    Notifier findByNotifierName(String notifierName);
+}

+ 13 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/service/OrchestrateService.java

@@ -5,8 +5,10 @@ import cn.reghao.autodop.common.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;
+import cn.reghao.autodop.dmaster.orchestrate.pojo.Notifier;
 import cn.reghao.autodop.dmaster.orchestrate.pojo.build.*;
 import cn.reghao.autodop.dmaster.orchestrate.pojo.orchestration.*;
+import cn.reghao.autodop.dmaster.orchestrate.repository.NotifierRepository;
 import cn.reghao.autodop.dmaster.orchestrate.repository.build.CodeCompilerRepository;
 import cn.reghao.autodop.dmaster.orchestrate.repository.build.AppPackerRepository;
 import cn.reghao.autodop.dmaster.orchestrate.repository.build.ReposAuthRepository;
@@ -35,6 +37,7 @@ public class OrchestrateService {
     private AppOrchestrationRepository appOrchestrationRepository;
     private AppDAO appDAO;
 
+    private NotifierRepository notifierRepository;
     private ReposAuthRepository reposAuthRepository;
     private CodeCompilerRepository codeCompilerRepository;
     private AppPackerRepository appPackerRepository;
@@ -43,6 +46,7 @@ public class OrchestrateService {
     public OrchestrateService(ProjectOrchestrationRepository projOrchestrationRepository,
                               AppOrchestrationRepository appOrchestrationRepository,
                               AppDAO appDAO,
+                              NotifierRepository notifierRepository,
                               ReposAuthRepository reposAuthRepository,
                               CodeCompilerRepository codeCompilerRepository,
                               AppPackerRepository appPackerRepository,
@@ -52,6 +56,7 @@ public class OrchestrateService {
         this.appOrchestrationRepository = appOrchestrationRepository;
         this.appDAO = appDAO;
 
+        this.notifierRepository = notifierRepository;
         this.reposAuthRepository = reposAuthRepository;
         this.codeCompilerRepository = codeCompilerRepository;
         this.appPackerRepository = appPackerRepository;
@@ -125,6 +130,14 @@ public class OrchestrateService {
      * @date 2020-03-01 下午6:34
      */
     private void checkSharedEntity(Orchestration orchestration) throws Exception {
+        Notifier notifier = orchestration.getNotifier();
+        Notifier notifierEntity = notifierRepository.findByNotifierName(notifier.getNotifierName());
+        if (notifierEntity == null) {
+            notifierRepository.save(notifier);
+        } else {
+            orchestration.setNotifier(notifierEntity);
+        }
+
         if (orchestration instanceof ProjOrchestration) {
             AppBuild build = ((ProjOrchestration) orchestration).getBuild();
             if (build != null) {

+ 11 - 12
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/vo/AppVO.java

@@ -14,28 +14,22 @@ import java.util.Map;
  * @author reghao
  * @date 2020-02-29 17:22:19
  */
-@Data
-public class AppVO {
-    private String identifier;
-    private String description;
-    private OrchestrationType orchestrationType;
+public class AppVO extends OrchestrationVO {
     private ProjBuild projBuild;
     private AppBuild build;
-
-    private String entryDir;
-    private Map<String, String> configFiles;
     private AppDeploy deploy;
     private AppRunning running;
+    private String entryDir;
+    private Map<String, String> configFiles;
 
     public static AppVO of(AppOrchestration app) {
         AppVO vo = new AppVO();
+
         vo.identifier = app.getIdentifier();
         vo.description = app.getDescription();
+        vo.env = app.getEnv();
         vo.orchestrationType = app.getOrchestrationType();
-        vo.entryDir = app.getEntryDir();
-        vo.configFiles = app.getConfigFiles();
-        vo.deploy = app.getDeploy();
-        vo.running = app.getRunning();
+        vo.notifier = app.getNotifier();
 
         if (app.getProjBuild() != null) {
             vo.projBuild = app.getProjBuild();
@@ -51,6 +45,11 @@ public class AppVO {
             vo.build.getAppPacker().setCreateTime(null);
         }
 
+        vo.deploy = app.getDeploy();
+        vo.running = app.getRunning();
+        vo.entryDir = app.getEntryDir();
+        vo.configFiles = app.getConfigFiles();
+
         return vo;
     }
 }

+ 0 - 19
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/vo/Constants.java

@@ -1,19 +0,0 @@
-package cn.reghao.autodop.dmaster.orchestrate.vo;
-
-import cn.reghao.autodop.dmaster.orchestrate.pojo.build.AppPacker;
-import cn.reghao.autodop.dmaster.orchestrate.pojo.build.CodeCompiler;
-import cn.reghao.autodop.dmaster.orchestrate.pojo.build.ReposAuth;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2020-03-02 13:17:58
- */
-@Data
-public class Constants {
-    private List<ReposAuth> auths;
-    private List<CodeCompiler> compilers;
-    private List<AppPacker> packers;
-}

+ 15 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/vo/OrchestrationVO.java

@@ -0,0 +1,15 @@
+package cn.reghao.autodop.dmaster.orchestrate.vo;
+
+import cn.reghao.autodop.dmaster.orchestrate.pojo.Notifier;
+
+/**
+ * @author reghao
+ * @date 2020-03-02 13:17:58
+ */
+public class OrchestrationVO {
+    protected String identifier;
+    protected String description;
+    protected String env;
+    protected String orchestrationType;
+    protected Notifier notifier;
+}

+ 5 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/orchestrate/vo/ProjVO.java

@@ -8,10 +8,7 @@ import cn.reghao.autodop.dmaster.orchestrate.pojo.orchestration.ProjOrchestratio
  * @author reghao
  * @date 2020-02-29 17:22:19
  */
-public class ProjVO {
-    private String identifier;
-    private String description;
-    private OrchestrationType orchestrationType;
+public class ProjVO extends OrchestrationVO {
     private AppBuild build;
     private String appIds;
 
@@ -20,19 +17,20 @@ public class ProjVO {
 
         vo.identifier = proj.getIdentifier();
         vo.description = proj.getDescription();
+        vo.env = proj.getEnv();
         vo.orchestrationType = proj.getOrchestrationType();
-        vo.appIds = appIds;
+        vo.notifier = proj.getNotifier();
 
         vo.build = proj.getBuild();
         vo.build.getCodeRepos().getReposAuth().setId(null);
         vo.build.getCodeRepos().getReposAuth().setCreateTime(null);
-
         vo.build.getCodeCompiler().setId(null);
         vo.build.getCodeCompiler().setCreateTime(null);
-
         vo.build.getAppPacker().setId(null);
         vo.build.getAppPacker().setCreateTime(null);
 
+        vo.appIds = appIds;
+
         return vo;
     }
 }

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

@@ -32,7 +32,6 @@ spring:
   jpa:
     hibernate:
       ddl-auto: update
-      naming-strategy: org.hibernate.cfg.DefaultNamingStrategy
     properties:
       hibernate:
         hbm2ddl:

+ 4 - 6
resources/sysconfig/dev/sys-dev.json

@@ -1,12 +1,10 @@
 {
-  "localRepo": "/home/reghao/tmp/autodop/opt/repos/local-repo",
-  "compileDir": "/home/reghao/tmp/autodop/opt/repos/compile-dir",
-  "packDir": "/home/reghao/tmp/autodop/opt/repos/pack-dir",
+  "localRepos": "/home/reghao/tmp/autodop/opt/data/local-repos",
+  "compileDir": "/home/reghao/tmp/autodop/opt/data/compile-dir",
+  "packDir": "/home/reghao/tmp/autodop/opt/data/pack-dir",
   "notifier": {
     "notifierId": "ding-dev",
     "notifierType": 3,
     "webhook": "https://oapi.dingtalk.com/robot/send?access_token=ba9cf0d846cff8c471168e0d2f91ec0c44645a086cf5e4e421697c9b0c606bd2"
-  },
-  "projectConfigFile": "/home/reghao/code/aha/autodop/resources/sysconfig/dev/project-dev.json",
-  "appConfigFile": "/home/reghao/code/aha/autodop/resources/sysconfig/dev/app-dev.json"
+  }
 }