Explorar el Código

简化项目, 更新 notification 模块

reghao hace 2 años
padre
commit
29a2ed7782

+ 3 - 26
manager/src/main/java/cn/reghao/devops/manager/app/service/bd/impl/BuildDeployNotifyImpl.java

@@ -5,9 +5,6 @@ import cn.reghao.devops.manager.app.model.po.AppBuilding;
 import cn.reghao.devops.manager.app.model.po.log.BuildLog;
 import cn.reghao.devops.manager.app.model.po.log.DeployLog;
 import cn.reghao.devops.manager.app.service.bd.BuildDeployNotify;
-import cn.reghao.devops.manager.monitor.db.query.AppMonitorQuery;
-import cn.reghao.devops.manager.monitor.model.po.AppMonitor;
-import cn.reghao.devops.manager.notification.model.po.NotifyGroup;
 import cn.reghao.devops.manager.notification.model.vo.BuildNotifyMsg;
 import cn.reghao.devops.manager.notification.model.vo.DeployNotifyMsg;
 import cn.reghao.devops.manager.notification.service.NotifyService;
@@ -22,44 +19,24 @@ import org.springframework.stereotype.Service;
 @Service
 public class BuildDeployNotifyImpl implements BuildDeployNotify {
     private final BuildLogRepository buildLogRepository;
-    private final AppMonitorQuery appMonitorQuery;
     private final NotifyService notifyService;
 
-    public BuildDeployNotifyImpl(BuildLogRepository buildLogRepository, AppMonitorQuery appMonitorQuery,
-                                 NotifyService notifyService) {
+    public BuildDeployNotifyImpl(BuildLogRepository buildLogRepository, NotifyService notifyService) {
         this.buildLogRepository = buildLogRepository;
-        this.appMonitorQuery = appMonitorQuery;
         this.notifyService = notifyService;
     }
 
     @Override
     public void buildNotify(AppBuilding appBuilding) {
-        String appId = appBuilding.getAppConfig().getAppId();
-        AppMonitor appMonitor = appMonitorQuery.findByAppId(appId);
-        if (appMonitor == null || appMonitor.getAppBuild() == null) {
-            log.error("{} 没有构建通知配置", appId);
-            return;
-        }
-
-        NotifyGroup notifyGroup = appMonitor.getAppDeploy();
         BuildNotifyMsg buildNotifyMsg = new BuildNotifyMsg(appBuilding);
-        notifyService.notify(notifyGroup, buildNotifyMsg.dingMsg());
+        notifyService.notify(buildNotifyMsg.dingMsg());
     }
 
     @Override
     public void deployNotify(DeployLog deployLog) {
         String buildLogId = deployLog.getBuildLog().getBuildLogId();
         BuildLog buildLog = buildLogRepository.findByBuildLogId(buildLogId);
-
-        String appId = buildLog.getAppConfig().getAppId();
-        AppMonitor appMonitor = appMonitorQuery.findByAppId(appId);
-        if (appMonitor == null || appMonitor.getAppDeploy() == null) {
-            log.error("{} 没有部署通知配置", appId);
-            return;
-        }
-
-        NotifyGroup notifyGroup = appMonitor.getAppDeploy();
         DeployNotifyMsg deployNotifyMsg = new DeployNotifyMsg(buildLog, deployLog);
-        notifyService.notify(notifyGroup, deployNotifyMsg.dingMsg());
+        notifyService.notify(deployNotifyMsg.dingMsg());
     }
 }

+ 4 - 14
manager/src/main/java/cn/reghao/devops/manager/app/service/bd/webhook/WebhookService.java

@@ -4,9 +4,6 @@ import cn.reghao.devops.manager.app.db.query.AppConfigQuery;
 import cn.reghao.devops.manager.app.model.po.config.AppConfig;
 import cn.reghao.devops.manager.app.service.bd.BuildApp;
 import cn.reghao.devops.manager.app.service.bd.webhook.event.*;
-import cn.reghao.devops.manager.monitor.db.query.AppMonitorQuery;
-import cn.reghao.devops.manager.monitor.model.po.AppMonitor;
-import cn.reghao.devops.manager.notification.model.po.NotifyGroup;
 import cn.reghao.devops.manager.notification.service.NotifyService;
 import cn.reghao.devops.manager.notification.service.notifier.ding.DingMsg;
 import cn.reghao.jutil.web.ServletUtil;
@@ -28,15 +25,13 @@ import java.util.Map;
 public class WebhookService {
     private final AppConfigQuery appConfigQuery;
     private final BuildApp buildApp;
-    private final AppMonitorQuery appMonitorQuery;
     private final NotifyService notifyService;
     private final Map<String, PushEvent> map = new HashMap<>();
 
-    public WebhookService(AppConfigQuery appConfigQuery, BuildApp buildApp, AppMonitorQuery appMonitorQuery,
+    public WebhookService(AppConfigQuery appConfigQuery, BuildApp buildApp,
                           NotifyService notifyService, List<PushEvent> list) {
         this.appConfigQuery = appConfigQuery;
         this.buildApp = buildApp;
-        this.appMonitorQuery = appMonitorQuery;
         this.notifyService = notifyService;
         initPushEvent(list);
     }
@@ -73,13 +68,8 @@ public class WebhookService {
     }
 
     private void notifyEvt(String appId, String buildBy) {
-        AppMonitor appMonitor = appMonitorQuery.findByAppId(appId);
-        if (appMonitor != null && appMonitor.getAppBuild() != null) {
-            NotifyGroup notifyGroup = appMonitor.getAppBuild();
-
-            String msg = String.format("%s 触发 %s 自动 CI/CD...", buildBy, appId);
-            DingMsg dingMsg = new DingMsg(msg);
-            notifyService.notify(notifyGroup, dingMsg);
-        }
+        String msg = String.format("%s 触发 %s 自动 CI/CD...", buildBy, appId);
+        DingMsg dingMsg = new DingMsg(msg);
+        notifyService.notify(dingMsg);
     }
 }

+ 1 - 9
manager/src/main/java/cn/reghao/devops/manager/app/service/config/impl/AppConfigServiceImpl.java

@@ -1,22 +1,18 @@
 package cn.reghao.devops.manager.app.service.config.impl;
 
 import cn.reghao.devops.manager.app.db.repository.config.AppConfigRepository;
-import cn.reghao.devops.manager.app.db.repository.config.AppDeployConfigRepository;
 import cn.reghao.devops.common.build.model.constant.RepoType;
 import cn.reghao.devops.manager.app.model.dto.AppConfigDto;
 import cn.reghao.devops.manager.app.model.dto.AppConfigUpdateDto;
 import cn.reghao.devops.manager.app.model.po.config.AppConfig;
 import cn.reghao.devops.manager.app.model.dto.CopyAppDto;
 import cn.reghao.devops.common.build.model.LocalBuildDir;
-import cn.reghao.devops.manager.app.model.po.config.AppDeployConfig;
 import cn.reghao.devops.manager.app.model.vo.BuildConfig;
 import cn.reghao.devops.manager.app.service.bd.BuildLogService;
 import cn.reghao.devops.manager.app.service.bd.BuildStat;
 import cn.reghao.devops.manager.app.service.config.AppConfigService;
-import cn.reghao.devops.manager.app.service.bd.DeployStat;
 import cn.reghao.devops.common.build.chain.BuildTools;
 import cn.reghao.devops.manager.app.service.config.AppDeployConfigService;
-import cn.reghao.devops.manager.monitor.service.AppMonitorService;
 import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.jutil.jdk.result.ResultStatus;
 import org.apache.commons.io.FileUtils;
@@ -37,17 +33,15 @@ public class AppConfigServiceImpl implements AppConfigService {
     private final AppConfigRepository appConfigRepository;
     private final BuildConfigChecker buildConfigChecker;
     private final BuildStat buildStat;
-    private final AppMonitorService appMonitorService;
     private final AppDeployConfigService deployConfigService;
     private final BuildLogService buildLogService;
 
     public AppConfigServiceImpl(AppConfigRepository appConfigRepository, BuildConfigChecker buildConfigChecker,
-                                BuildStat buildStat, AppMonitorService appMonitorService,
+                                BuildStat buildStat,
                                 AppDeployConfigService deployConfigService, BuildLogService buildLogService) {
         this.appConfigRepository = appConfigRepository;
         this.buildConfigChecker = buildConfigChecker;
         this.buildStat = buildStat;
-        this.appMonitorService = appMonitorService;
         this.deployConfigService = deployConfigService;
         this.buildLogService = buildLogService;
     }
@@ -93,7 +87,6 @@ public class AppConfigServiceImpl implements AppConfigService {
     public void create(AppConfig appConfig) {
         appConfig = appConfigRepository.save(appConfig);
         buildStat.add(appConfig);
-        appMonitorService.add(appConfig);
     }
 
     @Override
@@ -167,7 +160,6 @@ public class AppConfigServiceImpl implements AppConfigService {
         }
 
         BuildTools.removeApp(app.getAppId());
-        appMonitorService.delete(app);
         deployConfigService.delete(app);
         buildLogService.delete(app);
         appConfigRepository.delete(app);

+ 20 - 0
manager/src/main/java/cn/reghao/devops/manager/config/WebhookProperties.java

@@ -0,0 +1,20 @@
+package cn.reghao.devops.manager.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 2021-03-18 21:01:46
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "webhook")
+public class WebhookProperties {
+    @Value("${webhook.name}")
+    private String name;
+    @Value("${webhook.url}")
+    private String url;
+}

+ 1 - 1
manager/src/main/java/cn/reghao/devops/manager/config/spring/ManagerLifecycle.java

@@ -38,7 +38,7 @@ public class ManagerLifecycle implements ApplicationRunner, DisposableBean {
     public void run(ApplicationArguments args) {
         initBuildDir();
         initAppEnv();
-        log.info("devops-master 初始化完成");
+        log.info("devops-manager 初始化完成");
     }
 
     @Override

+ 26 - 74
manager/src/main/java/cn/reghao/devops/manager/notification/service/NotifyService.java

@@ -1,23 +1,16 @@
 package cn.reghao.devops.manager.notification.service;
 
-import cn.reghao.devops.manager.notification.db.query.DingAccountQuery;
-import cn.reghao.devops.manager.notification.db.query.NotifyGroupQuery;
-import cn.reghao.devops.manager.notification.model.po.DingAccount;
-import cn.reghao.devops.manager.notification.model.po.NotifyGroup;
-import cn.reghao.devops.manager.notification.model.po.NotifyType;
+import cn.reghao.devops.manager.config.WebhookProperties;
 import cn.reghao.devops.manager.notification.service.notifier.Notify;
 import cn.reghao.devops.manager.notification.service.notifier.ding.DingMsg;
-import cn.reghao.devops.manager.notification.service.notifier.ding.DingNotify;
-import cn.reghao.jutil.jdk.http.WebRequest;
 import cn.reghao.jutil.jdk.thread.ThreadPoolWrapper;
-import cn.reghao.jutil.tool.http.DefaultWebRequest;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.BeanFactoryAware;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.PostConstruct;
-import java.io.UnsupportedEncodingException;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.concurrent.ExecutorService;
 
 /**
@@ -28,77 +21,36 @@ import java.util.concurrent.ExecutorService;
  */
 @Slf4j
 @Service
-public class NotifyService {
+public class NotifyService implements BeanFactoryAware {
+    private BeanFactory beanFactory;
     private final ExecutorService threadPool = ThreadPoolWrapper.threadPool("notify-service");
-    private final Map<NotifyGroup, Notify> notifierMap = new HashMap<>();
-    private final WebRequest webRequest;
-    private final NotifyGroupQuery notifyGroupQuery;
-    private final DingAccountQuery dingAccountQuery;
+    private final WebhookProperties webhookProperties;
+    private final Notify notify;
 
-    public NotifyService(NotifyGroupQuery notifyGroupQuery, DingAccountQuery dingAccountQuery) {
-        this.webRequest = new DefaultWebRequest();
-        this.notifyGroupQuery = notifyGroupQuery;
-        this.dingAccountQuery = dingAccountQuery;
+    public NotifyService(WebhookProperties webhookProperties, Notify notify) {
+        this.webhookProperties = webhookProperties;
+        this.notify = notify;
     }
 
-    /**
-     * TODO 系统启动时初始化所有的通知组,这应该推迟到通知组第一次使用时才初始化
-     *
-     * @param
-     * @return
-     * @date 2021-06-23 下午9:47
-     */
-    @PostConstruct
-    private void initNotifier() throws UnsupportedEncodingException {
-        for (NotifyGroup group : notifyGroupQuery.findAll()) {
-            addNotifier(group);
-        }
+    @Override
+    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
+        this.beanFactory = beanFactory;
     }
 
-    public void addNotifier(NotifyGroup notifyGroup) throws UnsupportedEncodingException {
-        Notify notify = notifierMap.get(notifyGroup);
-        if (notify != null) {
-            return;
-        }
+    public <T> void notify(T msg) {
+         /*Object object = beanFactory.getBean("webhookProperties");
+         if (object instanceof WebhookProperties) {
+             WebhookProperties webhookProperties = (WebhookProperties) object;
+             DingMsg dingMsg = (DingMsg) msg;
+             String receiver = webhookProperties.getUrl();
+             threadPool.execute(new NotifyTask<DingMsg>(notify, receiver, dingMsg));
+         }*/
 
-        String notifyType = notifyGroup.getNotifyType();
-        String notifyAccountId = notifyGroup.getNotifyAccountId();
-        switch (NotifyType.valueOf(notifyType)) {
-            case ding:
-                DingAccount dingAccount = dingAccountQuery.findByNotifyAccountId(notifyAccountId);
-                notifierMap.put(notifyGroup, new DingNotify(webRequest, dingAccount));
-                break;
-            default:
-                log.error("{} 通知类型暂未实现", notifyType);
-        }
+        DingMsg dingMsg = (DingMsg) msg;
+        String receiver = webhookProperties.getUrl();
+        threadPool.execute(new NotifyTask<DingMsg>(notify, receiver, dingMsg));
     }
-
-    public <T> void notify(NotifyGroup notifyGroup, T msg) {
-        Notify notify = notifierMap.get(notifyGroup);
-        if (notify == null) {
-            log.error("类型为 {}, 账户为 {} 的通知发送器不存在",
-                    notifyGroup.getNotifyType(), notifyGroup.getNotifyAccountId());
-            return;
-        }
-
-        String notifyType = notifyGroup.getNotifyType();
-        switch (NotifyType.valueOf(notifyType)) {
-            case ding:
-                if (!(msg instanceof DingMsg)) {
-                    log.error("{} 消息格式不正确, 不是 DingMsg", msg);
-                }
-                DingMsg dingMsg = (DingMsg) msg;
-                String receiver = notifyGroup.getReceiver();
-                threadPool.execute(new NotifyTask<DingMsg>(notify, receiver, dingMsg));
-                break;
-            default:
-                log.error("{} 通知类型暂未实现", notifyType);
-        }
-    }
-
     /**
-     * TODO 添加通知日志
-     *
      * @param
      * @return
      * @date 2021-06-23 上午9:29

+ 6 - 11
manager/src/main/java/cn/reghao/devops/manager/notification/service/notifier/ding/DingNotify.java

@@ -4,7 +4,7 @@ import cn.reghao.devops.manager.notification.service.notifier.Notify;
 import cn.reghao.jutil.jdk.http.WebRequest;
 import cn.reghao.jutil.jdk.http.WebResponse;
 import cn.reghao.jutil.jdk.serializer.JsonConverter;
-import cn.reghao.devops.manager.notification.model.po.DingAccount;
+import org.springframework.stereotype.Component;
 
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
@@ -20,32 +20,27 @@ import java.util.Base64;
  * @author reghao
  * @date 2020-05-07 01:31:03
  */
+@Component
 public class DingNotify implements Notify<DingMsg> {
-    private WebRequest webRequest;
-    private DingAccount dingAccount;
+    private final WebRequest webRequest;
 
-    public DingNotify(WebRequest webRequest, DingAccount dingAccount) {
+    public DingNotify(WebRequest webRequest) {
         this.webRequest = webRequest;
-        this.dingAccount = dingAccount;
     }
 
     @Override
     public void send(String receiver, DingMsg msg) throws Exception {
-        if (!"none".equals(dingAccount.getPassword())) {
-            receiver = getReceiver(receiver, dingAccount.getPassword());
-        }
-
         WebResponse webResponse = webRequest.postJson(receiver, JsonConverter.objectToJson(msg));
         if (webResponse.getStatusCode() != 200) {
             throw new Exception("通知发送失败, " + webResponse.getBody());
         }
     }
 
-    private String getReceiver(String receiver, String secret) throws InvalidKeyException, NoSuchAlgorithmException {
+    private String getReceiver(String url, String secret) throws InvalidKeyException, NoSuchAlgorithmException {
         long timestamp = System.currentTimeMillis();
         //String secret = "SEC4d7e0c126147b3679c4d15e47dc26311ca053bd47b21f4025832a6e246a93ec4";
         String sign = calcSign(timestamp, secret);
-        return receiver + String.format("&timestamp=%s&sign=%s", timestamp, sign);
+        return url + String.format("&timestamp=%s&sign=%s", timestamp, sign);
     }
 
     /**