Forráskód Böngészése

重构通知服务

reghao 5 éve
szülő
commit
35cfa81bb2
27 módosított fájl, 358 hozzáadás és 182 törlés
  1. 5 0
      common/src/main/java/cn/reghao/autodop/common/utils/serializer/JsonConverter.java
  2. 1 0
      dagent/src/main/java/cn/reghao/autodop/dagent/machine/timer/HeartbeatJob.java
  3. 0 2
      dagent/src/main/java/cn/reghao/autodop/dagent/machine/timer/MachineScheduler.java
  4. 0 5
      dagent/src/main/resources/application-dev.yml
  5. 4 4
      dagent/src/main/resources/application-test.yml
  6. 12 7
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/NotifierConfig.java
  7. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/orchestration/AppOrchestration.java
  8. 2 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/AppOrchestrationRepository.java
  9. 5 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildDeployDispatcher.java
  10. 18 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/DeployNotifyMsg.java
  11. 0 26
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/NotifyTask.java
  12. 3 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java
  13. 32 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/HealthCheckJob.java
  14. 56 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/MonitorScheduler.java
  15. 7 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/DingNotify.java
  16. 15 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/EmailMessage.java
  17. 30 62
      dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/EmailNotify.java
  18. 66 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/EmailSender.java
  19. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/Notify.java
  20. 18 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/SmsConfig.java
  21. 33 17
      dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/SmsNotify.java
  22. 10 4
      dmaster/src/main/resources/application-dev.yml
  23. 12 12
      scripts/build.sh
  24. 9 10
      scripts/build_and_deploy.sh
  25. 8 8
      scripts/deploy.sh
  26. 4 5
      scripts/runner.sh
  27. 6 10
      scripts/test1.json

+ 5 - 0
common/src/main/java/cn/reghao/autodop/common/utils/serializer/JsonConverter.java

@@ -1,6 +1,7 @@
 package cn.reghao.autodop.common.utils.serializer;
 
 import com.google.gson.Gson;
+import com.google.gson.JsonObject;
 
 import java.io.File;
 import java.util.List;
@@ -37,6 +38,10 @@ public class JsonConverter {
         return gson.fromJson(json, clazz);
     }
 
+    public static JsonObject jsonToJsonObject(String json) {
+        return gson.fromJson(json, JsonObject.class);
+    }
+
     /**
      * JSON 文件转换为对象
      *

+ 1 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/machine/timer/HeartbeatJob.java

@@ -28,5 +28,6 @@ public class HeartbeatJob implements Job {
         MqMessage mqMessage = MqMessage.mqMessage(MessageType.machineType.name(),
                 MachineOps.machineHeartbeatOps.name(), false, payload);
         rabbitProducer.send("amq.direct", "dmaster", mqMessage);
+        log.info("发送机器心跳...");
     }
 }

+ 0 - 2
dagent/src/main/java/cn/reghao/autodop/dagent/machine/timer/MachineScheduler.java

@@ -8,8 +8,6 @@ import org.quartz.impl.StdSchedulerFactory;
 import org.springframework.stereotype.Component;
 
 /**
- * TODO 定时任务消耗过高 CPU 资源
- *
  * @author reghao
  * @date 2020-03-20 17:04:48
  */

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

@@ -1,10 +1,5 @@
 spring:
   rabbitmq:
-#    host: mq.srv.iquizoo.com
-#    port: 5672
-#    username: iquizoo-mq1
-#    password: z2pT1PXR
-#    virtual-host: /
     host: localhost
     port: 5672
     virtual-host: /

+ 4 - 4
dagent/src/main/resources/application-test.yml

@@ -1,7 +1,7 @@
 spring:
   rabbitmq:
-    host: 192.168.0.111
+    host: mq.srv.iquizoo.com
     port: 5672
-    virtual-host: /
-    username: dev
-    password: Dev@12345678
+    username: iquizoo-mq1
+    password: z2pT1PXR
+    virtual-host: /

+ 12 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/NotifierConfig.java

@@ -3,9 +3,12 @@ package cn.reghao.autodop.dmaster.app.entity.config;
 import cn.reghao.autodop.dmaster.common.db.orm.BaseEntity;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.hibernate.annotations.LazyCollection;
+import org.hibernate.annotations.LazyCollectionOption;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
+import javax.persistence.*;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author reghao
@@ -19,9 +22,13 @@ public class NotifierConfig extends BaseEntity {
     private String name;
     @Column(nullable = false)
     private String type;
-    @Column(nullable = false)
-    private String destination;
-    private String payload;
+    // 可选
+    @ElementCollection
+    @JoinTable(name = "notifier_config_payload",joinColumns = @JoinColumn(name = "notifier_config_id"))
+    private Map<String, String> payload;
+    @ElementCollection(targetClass = String.class)
+    @LazyCollection(LazyCollectionOption.FALSE)
+    private List<String> receivers;
 
     public NotifierConfig(String name) {
         this.name = name;
@@ -37,7 +44,6 @@ public class NotifierConfig extends BaseEntity {
             NotifierConfig n = (NotifierConfig) obj;
             return n.name.equals(this.name) &&
                     n.type.equals(this.type) &&
-                    n.destination.equals(this.destination) &&
                     n.payload.equals(this.payload);
         }
 
@@ -49,7 +55,6 @@ public class NotifierConfig extends BaseEntity {
         int result = 17;
         result = result * 31 + name.hashCode();
         result = result * 31 + type.hashCode();
-        result = result * 31 + destination.hashCode();
         result = result * 31 + payload.hashCode();
         return result;
     }

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/orchestration/AppOrchestration.java

@@ -72,6 +72,7 @@ public class AppOrchestration extends BaseEntity implements Cloneable {
     /* 运行配置 */
     private RunningConfig runningConfig;
 
+    // TODO 映射实体集合?一个应用应该有多个通知配置
     @ManyToOne(cascade = CascadeType.PERSIST)
     @JoinColumn(name = "notification_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
     private NotifierConfig notifierConfig;

+ 2 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/AppOrchestrationRepository.java

@@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 /**
  *
@@ -14,6 +15,7 @@ import javax.transaction.Transactional;
  * @date 2020-01-21 14:53:03
  */
 public interface AppOrchestrationRepository extends JpaRepository<AppOrchestration, Long> {
+    List<AppOrchestration> findAllByIsDeleteFalseAndEnableTrueAndAppType(String appType);
     Page<AppOrchestration> findByIsDeleteFalse(Pageable pageable);
     Page<AppOrchestration> findByIsDeleteFalseAndEnv(String env, Pageable pageable);
     Page<AppOrchestration> findByIsDeleteFalseAndEnableIsTrueAndEnv(String env, Pageable pageable);

+ 5 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildDeployDispatcher.java

@@ -1,6 +1,5 @@
 package cn.reghao.autodop.dmaster.app.service;
 
-import cn.reghao.autodop.common.amqp.RabbitProducer;
 import cn.reghao.autodop.dmaster.app.cache.BuildDeployCache;
 import cn.reghao.autodop.dmaster.app.constant.BuildStage;
 import cn.reghao.autodop.dmaster.app.constant.NotifierType;
@@ -10,7 +9,6 @@ import cn.reghao.autodop.dmaster.app.entity.log.*;
 import cn.reghao.autodop.dmaster.app.service.build.AppIntegrate;
 import cn.reghao.autodop.dmaster.app.service.deploy.AppDeployer;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
-import cn.reghao.autodop.dmaster.app.service.log.BuildDeployLogService;
 import cn.reghao.autodop.dmaster.app.service.log.BuildDeployLogConsumer;
 import cn.reghao.autodop.common.utils.ExceptionUtil;
 import cn.reghao.autodop.dmaster.utils.notifier.NotifyService;
@@ -168,9 +166,13 @@ public class BuildDeployDispatcher {
 
         List<DeployConfig> deployConfigs = cache.findByAppId(buildLog.getAppId()).getDeployConfigs();
         DeployResult deployResult = appDeployer.deploy(buildLog, deployConfigs);
-        // TODO 部署完成后发出通知
         onDeploying.remove(buildLog.getAppId());
         logConsumer.addDeployLog(deployResult);
+
+        // TODO 部署完成后发出通知
+        NotifierConfig notifierConfig = cache.findByAppId(buildLog.getAppId()).getNotifierConfig();
+
+
         return deployResult;
     }
 

+ 18 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/DeployNotifyMsg.java

@@ -0,0 +1,18 @@
+package cn.reghao.autodop.dmaster.app.service.deploy;
+
+import lombok.Data;
+
+/**
+ * 部署通知消息
+ *
+ * @author reghao
+ * @date 2020-06-24 10:32:34
+ */
+@Data
+public class DeployNotifyMsg {
+    private String appId;
+    private String commitId;
+    private String env;
+    private String machineAddress;
+    private String result;
+}

+ 0 - 26
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/NotifyTask.java

@@ -1,26 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.deploy;
-
-import cn.reghao.autodop.dmaster.utils.notifier.Notify;
-import java.util.concurrent.Callable;
-
-/**
- * @author reghao
- * @date 2020-06-24 10:32:34
- */
-public class NotifyTask implements Callable<Void> {
-    private Notify notify;
-    private String dest;
-    private Object msg;
-
-    public NotifyTask(Notify notify, String dest, Object msg) {
-        this.notify = notify;
-        this.dest = dest;
-        this.msg = msg;
-    }
-
-    @Override
-    public Void call() throws Exception {
-        notify.send(dest, msg);
-        return null;
-    }
-}

+ 3 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java

@@ -193,7 +193,9 @@ public class AppVO {
         NotifierConfig notifierConfig = new NotifierConfig();
         notifierConfig.setName("ding-dev");
         notifierConfig.setType(NotifierType.webhook.name());
-        notifierConfig.setDestination("https://oapi.dingtalk.com/robot/send?access_token=ba9cf0d846cff8c471168e0d2f91ec0c44645a086cf5e4e421697c9b0c606bd2");
+        List<String> receivers = new ArrayList<>();
+        receivers.add("https://oapi.dingtalk.com/robot/send?access_token=ba9cf0d846cff8c471168e0d2f91ec0c44645a086cf5e4e421697c9b0c606bd2");
+        notifierConfig.setReceivers(receivers);
         app.setNotifierConfig(notifierConfig);
 
         String json = JsonConverter.objectToJson(AppVO.from(app));

+ 32 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/HealthCheckJob.java

@@ -0,0 +1,32 @@
+package cn.reghao.autodop.dmaster.monitor;
+
+import cn.reghao.autodop.common.httpc.DefaultWebRequest;
+import cn.reghao.autodop.common.httpc.WebRequest;
+import cn.reghao.autodop.common.httpc.WebResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.*;
+
+/**
+ * 健康检查任务
+ *
+ * @author reghao
+ * @date 2021-02-22 21:30:17
+ */
+@Slf4j
+public class HealthCheckJob implements Job {
+    @Override
+    public void execute(JobExecutionContext context) throws JobExecutionException {
+
+    }
+
+    public static void main(String[] args) {
+        String url = "http://192.168.0.172:8002/health";
+        WebRequest webRequest = new DefaultWebRequest();
+        WebResponse webResponse = webRequest.get(url);
+        if (webResponse == null || webResponse.getStatusCode() != 200) {
+            log.error("服务不可用,发出通知且尝试重新启动...");
+        } else {
+            log.info("服务可用...");
+        }
+    }
+}

+ 56 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/MonitorScheduler.java

@@ -0,0 +1,56 @@
+package cn.reghao.autodop.dmaster.monitor;
+
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.*;
+import org.quartz.impl.StdSchedulerFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * 监控报警定时任务
+ *
+ * @author reghao
+ * @date 2020-03-20 17:04:48
+ */
+@Slf4j
+@Component
+public class MonitorScheduler {
+    private Scheduler scheduler;
+
+    public MonitorScheduler() throws SchedulerException {
+        this.scheduler = StdSchedulerFactory.getDefaultScheduler();
+    }
+
+    public void add(Class<? extends Job> clazz, String jobId, String cronExp) throws SchedulerException {
+        JobDataMap jobDataMap = new JobDataMap();
+
+        JobDetail jobDetail = JobBuilder.newJob(clazz)
+                .withIdentity(jobId)
+                // job 需要使用的数据
+                .usingJobData(jobDataMap)
+                .build();
+
+        TriggerBuilder<CronTrigger> triggerBuilder = TriggerBuilder
+                .newTrigger()
+                .withIdentity(jobId + "@trigger")
+                .withSchedule(CronScheduleBuilder.cronSchedule(cronExp));
+        CronTrigger cronTrigger = triggerBuilder.build();
+
+        scheduler.scheduleJob(jobDetail, cronTrigger);
+        log.info("添加新定时任务 {}...", jobId);
+    }
+
+    public void remove() {
+    }
+
+    public void start() throws SchedulerException {
+        if (!scheduler.isShutdown()) {
+            scheduler.start();
+        }
+    }
+
+    public void pause() throws SchedulerException {
+        if (!scheduler.isShutdown()) {
+            scheduler.pauseAll();
+        }
+    }
+}

+ 7 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/DingNotify.java

@@ -7,6 +7,8 @@ import cn.reghao.autodop.dmaster.utils.notifier.ding.DingText;
 import cn.reghao.autodop.common.utils.serializer.JsonConverter;
 
 /**
+ * 钉钉通知
+ *
  * @author reghao
  * @date 2020-05-07 01:31:03
  */
@@ -14,11 +16,11 @@ public class DingNotify implements Notify {
     private WebRequest webRequest = new DefaultWebRequest();
 
     @Override
-    public void send(String destination, Object content) throws Exception {
-        DingText dingText = new DingText(content);
-        WebResponse webResponse = webRequest.postJson(destination, JsonConverter.objectToJson(dingText));
-        if (webResponse.getStatusCode() == 200) {
-            throw new Exception("通知发送失败...");
+    public void send(String receiver, Object msg) throws Exception {
+        DingText dingText = new DingText(msg);
+        WebResponse webResponse = webRequest.postJson(receiver, JsonConverter.objectToJson(dingText));
+        if (webResponse.getStatusCode() != 200) {
+            throw new Exception("通知发送失败, " + webResponse.getBody());
         }
     }
 }

+ 15 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/EmailMessage.java

@@ -0,0 +1,15 @@
+package cn.reghao.autodop.dmaster.utils.notifier;
+
+import lombok.Data;
+
+/**
+ * email 消息格式
+ *
+ * @author reghao
+ * @date 2021-02-25 19:37:00
+ */
+@Data
+public class EmailMessage {
+    private String subject;
+    private String content;
+}

+ 30 - 62
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/EmailNotify.java

@@ -1,84 +1,52 @@
 package cn.reghao.autodop.dmaster.utils.notifier;
 
-import javax.mail.Session;
-import javax.mail.Transport;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
-import java.io.UnsupportedEncodingException;
-import java.util.Date;
-import java.util.Properties;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author reghao
  * @date 2020-05-05 12:46:30
  */
 public class EmailNotify implements Notify {
-    private InternetAddress from;
-    private Session session;
-    private String emailAccount;
-    private String emailPassword;
+    private EmailSender sender;
 
-    public EmailNotify(String emailAccount, String emailPassword, String emailSmtp) throws Exception {
-        this.emailAccount = emailAccount;
-        this.emailPassword = emailPassword;
-        this.from = new InternetAddress(emailAccount, "admin@emall", "UTF-8");
-        initSessioin(emailSmtp);
-    }
-
-    private void initSessioin(String emailSmtp) {
-        Properties props = new Properties();
-        props.setProperty("mail.transport.protocol", "smtp");
-        props.setProperty("mail.smtp.host", emailSmtp);
-        props.setProperty("mail.smtp.auth", "true");
-
-        session = Session.getInstance(props);
-        session.setDebug(true);
+    public EmailNotify(String account, String password, String smtp, String sender) throws Exception {
+        this.sender = new EmailSender(account, password, smtp, sender);
     }
 
     @Override
-    public void send(String dest, Object content) {
-        try {
-            MimeMessage message = message(emailDestinations(dest), "来自远方的问候", (String) content);
-            Transport transport = session.getTransport();
-            transport.connect(emailAccount, emailPassword);
-            transport.sendMessage(message, message.getAllRecipients());
-            transport.close();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private InternetAddress[] emailDestinations(String dest) throws UnsupportedEncodingException {
-        String[] strs = dest.split(",");
-        int len = strs.length;
-        InternetAddress[] addresses = new InternetAddress[len];
-        for (int i = 0; i < len; i++) {
-            addresses[i] = new InternetAddress(strs[i], "", "UTF-8");
-        }
-
-        return addresses;
-    }
-
-    private MimeMessage message(InternetAddress[] addresses, String subject, String content) throws Exception {
-        MimeMessage message = new MimeMessage(session);
-        message.setFrom(from);
-        message.setRecipients(MimeMessage.RecipientType.TO, addresses);
-        message.setSubject(subject, "UTF-8");
-        message.setContent(content, "text/html;charset=UTF-8");
-        message.setSentDate(new Date());
-
-        return message;
+    public void send(String receiver, Object msg) throws Exception {
+        EmailMessage emailMessage = (EmailMessage) msg;
+        sender.send(receiver, emailMessage.getSubject(), emailMessage.getContent());
     }
 
     public static void main(String[] args) throws Exception {
+        Map<String, String> map = new HashMap<>();
+        map.put("account", "gisgit@163.com");
+        map.put("password", "gjs@gsh1990");
+        map.put("smtp", "smtp.163.com");
+        map.put("sender", "devops@iquizoo");
+
         String account = "gisgit@163.com";
         String password = "gjs@gsh1990";
         String smtp = "smtp.163.com";
-        EmailNotify emailNotify = new EmailNotify(account, password, smtp);
+        String sender = "devops@iquizoo";
+        EmailNotify emailNotify = new EmailNotify(account, password, smtp, sender);
 
-        String dest = "506193266@qq.com";
+        List<String> receivers = new ArrayList<>();
+        receivers.add("506193266@qq.com");
+        receivers.add("0xffxyz@gmail.com");
+
+        //String receiver = "506193266@qq.com";
+        EmailMessage message = new EmailMessage();
+        message.setSubject("可靠消息");
         String content = "据可靠消息,火箭军将于本月 15 日在西北试射一枚 DF-41 导弹,目的地位于美国西部外海。";
-        content = "据可靠消息,火箭军将于本月 15 日在黄海外海试射一枚巨浪 3 型导弹,目的地位于美国西部外海。";
-        emailNotify.send(dest, content);
+        message.setContent(content);
+
+        for (String receiver : receivers) {
+            emailNotify.send(receiver, message);
+        }
     }
 }

+ 66 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/EmailSender.java

@@ -0,0 +1,66 @@
+package cn.reghao.autodop.dmaster.utils.notifier;
+
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.util.Properties;
+
+/**
+ * @author reghao
+ * @date 2021-02-25 19:23:16
+ */
+public class EmailSender {
+    private String emailAccount;
+    private String emailPassword;
+    private InternetAddress from;
+    private Session session;
+
+    public EmailSender(String account, String password, String smtp, String personal)
+            throws UnsupportedEncodingException {
+        this.emailAccount = account;
+        this.emailPassword = password;
+        this.from = new InternetAddress(emailAccount, personal, "UTF-8");
+        initSessioin(smtp);
+    }
+
+    private void initSessioin(String emailSmtp) {
+        Properties props = new Properties();
+        props.setProperty("mail.transport.protocol", "smtp");
+        props.setProperty("mail.smtp.host", emailSmtp);
+        props.setProperty("mail.smtp.auth", "true");
+        session = Session.getInstance(props);
+        session.setDebug(true);
+    }
+
+    public void send(String receiver, String subject, String msg) throws Exception {
+        MimeMessage message = message(emailDestinations(receiver), subject, msg);
+        Transport transport = session.getTransport();
+        transport.connect(emailAccount, emailPassword);
+        transport.sendMessage(message, message.getAllRecipients());
+        transport.close();
+    }
+
+    private InternetAddress[] emailDestinations(String receiver) throws UnsupportedEncodingException {
+        String[] strs = receiver.split(",");
+        int len = strs.length;
+        InternetAddress[] addresses = new InternetAddress[len];
+        for (int i = 0; i < len; i++) {
+            addresses[i] = new InternetAddress(strs[i], "", "UTF-8");
+        }
+        return addresses;
+    }
+
+    private MimeMessage message(InternetAddress[] addresses, String subject, String content) throws MessagingException {
+        MimeMessage message = new MimeMessage(session);
+        message.setFrom(from);
+        message.setRecipients(MimeMessage.RecipientType.TO, addresses);
+        message.setSubject(subject, "UTF-8");
+        message.setContent(content, "text/html;charset=UTF-8");
+        message.setSentDate(new Date());
+        return message;
+    }
+}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/Notify.java

@@ -5,5 +5,5 @@ package cn.reghao.autodop.dmaster.utils.notifier;
  * @date 2020-05-07 01:41:27
  */
 public interface Notify {
-    void send(String dest, Object content) throws Exception;
+    void send(String receiver, Object msg) throws Exception;
 }

+ 18 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/SmsConfig.java

@@ -0,0 +1,18 @@
+package cn.reghao.autodop.dmaster.utils.notifier;
+
+import lombok.Data;
+
+/**
+ * 短信配置
+ *
+ * @author reghao
+ * @date 2021-02-25 17:54:08
+ */
+@Data
+public class SmsConfig {
+    private String name;
+    private String spwd;
+    private String sprdid;
+    private String sdst;
+    private String smsg;
+}

+ 33 - 17
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/notifier/SmsNotify.java

@@ -3,44 +3,60 @@ package cn.reghao.autodop.dmaster.utils.notifier;
 import cn.reghao.autodop.common.httpc.DefaultWebRequest;
 import cn.reghao.autodop.common.httpc.WebRequest;
 import cn.reghao.autodop.common.httpc.WebResponse;
+import cn.reghao.autodop.dmaster.app.entity.config.NotifierConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
 
 import java.util.HashMap;
 import java.util.Map;
 
 /**
+ * 短信通知
+ *
  * @author reghao
  * @date 2020-05-07 01:30:43
  */
+@Slf4j
 public class SmsNotify implements Notify {
     private WebRequest webRequest = new DefaultWebRequest();
     private Map<String, String> params;
 
-    public SmsNotify() {
-        this.params = new HashMap<>();
-        params.put("sname", "dlazykj0");
-        params.put("spwd", "azy2018Iquizoo");
-        params.put("scorpid", "");
-        params.put("sprdid", "1012818");
+    public SmsNotify(Map<String, String> params) {
+        this.params = params;
     }
 
     @Override
-    public void send(String dst, Object content) {
-        try {
-            params.put("sdst", dst);
-            params.put("smsg", (String) content);
-            String url = "http://cf.51welink.com/submitdata/service.asmx/g_Submit";
-            WebResponse webResponse = webRequest.postFormData(url, params);
-            if (webResponse.getStatusCode() == 200) {
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
+    public void send(String receiver, Object msg) throws Exception {
+        params.put("sdst", receiver);
+        params.put("smsg", (String) msg);
+        String url = params.remove("url");
+        WebResponse webResponse = webRequest.postFormData(url, params);
+        if (webResponse.getStatusCode() != 200) {
+            throw new Exception("消息发送失败, " + webResponse.getBody());
+        }
+        checkResponse(webResponse.getBody());
+    }
+
+    private void checkResponse(String body) throws Exception {
+        Element root = DocumentHelper.parseText(body).getRootElement();
+        Map<String, Object> map = new HashMap<>();
+        for (Element element : root.elements()) {
+            map.putIfAbsent(element.getName(), element.getData());
+        }
+
+        Integer state = (Integer) map.get("State");
+        if (state != 0) {
+            throw new Exception((String) map.get("State"));
         }
     }
 
     public static void main(String[] args) throws Exception {
         String mobilePhone = "15682110907";
-        SmsNotify smsNotify = new SmsNotify();
+        NotifierConfig notifierConfig = new NotifierConfig();
+        SmsNotify smsNotify = new SmsNotify(notifierConfig.getPayload());
         String content = "【大脑课堂】验证码:191599,您正在通过兑换码开通帐号,验证码15分钟内有效。大脑课堂,让大脑更自由!";
+        content = "【监控报警】192.168.0.11 机器上的 content 服务宕机,正在尝试重启...";
         smsNotify.send(mobilePhone, content);
     }
 }

+ 10 - 4
dmaster/src/main/resources/application-dev.yml

@@ -6,9 +6,15 @@ spring:
   data:
     mongodb:
       uri: mongodb://localhost/reghao_devops_rdb
+#  rabbitmq:
+#    host: localhost
+#    port: 5672
+#    virtual-host: /
+#    username: dev
+#    password: Dev@12345678
   rabbitmq:
-    host: localhost
+    host: mq.srv.iquizoo.com
     port: 5672
-    virtual-host: /
-    username: dev
-    password: Dev@12345678
+    username: iquizoo-mq1
+    password: z2pT1PXR
+    virtual-host: /

+ 12 - 12
scripts/build.sh

@@ -1,31 +1,31 @@
-###
+##############################################################
 # 构建脚本
-###
-#!/bin/sh
+##############################################################
+#!/bin/bash
 
 env=$1
-buildDeployApp=$2
-if [ -z ${env} ] || [ -z ${buildDeployApp} ]; then
-  echo 'error: sh build.sh env buildDeployApp'
+app=$2
+if [[ -z ${env} ]] || [ -z ${app} ]; then
+  echo 'error: sh build.sh env app'
   exit -1
 fi
 
 # 项目根目录
 proj_home="/home/reghao/code/aha/autodop"
 proj=`basename ${proj_home}`
-app_name=${proj}-${buildDeployApp}
+app_name=${proj}-${app}
 cd ${proj_home}
-mvn clean package -am -pl ${buildDeployApp} -Dmaven.test.skip=true -P${env}
-#mvn clean package -am -pl ${buildDeployApp} -DskipTest=true -P${env}
+mvn clean package -am -pl ${app} -Dmaven.test.skip=true -P${env}
+#mvn clean package -am -pl ${app} -DskipTest=true -P${env}
 
 # 存放应用的根目录
-jar_home="/home/reghao/tmp/autodop/buildDeployApp"
-if [ -d ${jar_home}/${app_name} ]; then
+jar_home="/home/reghao/dev/tmp/autodop/app"
+if [[ -d ${jar_home}/${app_name} ]]; then
   rm -rf ${jar_home}/${app_name}/*
 else
   mkdir -p ${jar_home}/${app_name}
 fi
-cp ${buildDeployApp}/target/${app_name}.jar ${jar_home}/${app_name}
+cp ${app}/target/${app_name}.jar ${jar_home}/${app_name}
 cp scripts/runner.sh ${jar_home}/${app_name}
 
 cd ${jar_home}

+ 9 - 10
scripts/build_and_deploy.sh

@@ -1,16 +1,15 @@
-###
+##############################################################
 # 构建部署脚本
-###
+##############################################################
 #!/bin/bash
 
-sh build.sh test dmaster
-sh deploy.sh autodop-dmaster 192.168.0.211 azy &
-
-#sh build.sh test dagent
-#sh deploy.sh autodop-dagent 192.168.0.171 azy &
-#sh deploy.sh autodop-dagent 192.168.0.172 azy &
-#sh deploy.sh autodop-dagent 192.168.0.173 azy &
-#sh deploy.sh autodop-dagent 192.168.0.174 azy &
+#sh build.sh test dmaster
+#sh deploy.sh autodop-dmaster 192.168.0.211 azy &
+sh build.sh test dagent
+sh deploy.sh autodop-dagent 192.168.0.171 azy &
+sh deploy.sh autodop-dagent 192.168.0.172 azy &
+sh deploy.sh autodop-dagent 192.168.0.173 azy &
+sh deploy.sh autodop-dagent 192.168.0.174 azy &
 
 #sh deploy.sh autodop-dagent 192.168.0.214 azy &
 #sh deploy.sh autodop-dagent 192.168.0.220 azy &

+ 8 - 8
scripts/deploy.sh

@@ -1,7 +1,7 @@
-############
+##############################################################
 # 部署脚本
-############
-#!/bin/sh
+##############################################################
+#!/bin/bash
 
 set -e
 
@@ -9,15 +9,15 @@ app_name=$1
 remote_host=$2
 password=$3
 
-if [ -z ${app_name} ] || [ -z ${remote_host} ] || [ -z ${password} ]; then
-  echo 'error: sh deploy.sh buildDeployApp remote_host password'
+if [[ -z ${app_name} ]] || [ -z ${remote_host} ] || [ -z ${password} ]; then
+  echo 'error: sh deploy.sh build remote_host password'
   exit -1
 fi
 
 # 存放应用的根目录
-remote_jar_home="/opt/services/dmaster"
-#remote_jar_home="/opt/services/dagent"
-local_jar_home="/home/reghao/tmp/autodop/buildDeployApp"
+#remote_jar_home="/opt/services/dmaster"
+remote_jar_home="/opt/services/dagent"
+local_jar_home="/home/reghao/dev/tmp/autodop/app"
 cd ${local_jar_home}/${app_name}
 
 # 拷贝 runner.sh 到远程主机

+ 4 - 5
scripts/runner.sh

@@ -1,7 +1,7 @@
-###
-# 运行脚本
-###
-#!/bin/sh
+##############################################################
+# 应用运行脚本
+##############################################################
+#!/bin/bash
 
 app_name="autodop-dagent"
 console_log="${app_name}.log"
@@ -18,7 +18,6 @@ stop() {
 }
 
 start() {
-  #nohup java -jar ${jar_file} ./spiderlab-crawler-test.json > ${console_log} 2>&1 &
   nohup java -jar ${jar_file} > ${console_log} 2>&1 &
   pid=`jps | grep ${app_name} | awk '{print $1}'`
   echo ${pid} > ${app_name}.pid

+ 6 - 10
scripts/test1.json

@@ -1,12 +1,8 @@
 {
-  "projId":"spiderlab",
-  "description":"分布式爬虫系统",
-  "projRepo":"http://git.reghao.cn/reghao/spiderlab.git",
-  "branch":"master",
-  "dirname":"spiderlab",
-  "buildConfigVO":{
-    "repo":"git-codeup",
-    "compiler":"dotnet5-dev",
-    "packer":"docker-dev"
-  }
+  "sname":"dlazykj0",
+  "spwd":"azy2018Iquizoo",
+  "scorpid":"",
+  "sprdid":"1012818",
+  "sdst":"15680425297",
+  "smsg":""
 }