Просмотр исходного кода

feat: 集成飞书机器人推送信息功能 #I4U9BT

chenghua 4 лет назад
Родитель
Сommit
d27919dcb5

+ 60 - 1
manager/src/main/java/com/usthe/manager/component/alerter/DispatchAlarm.java

@@ -1,10 +1,13 @@
 package com.usthe.manager.component.alerter;
 
+import com.alibaba.fastjson.JSON;
 import com.usthe.alert.AlerterDataQueue;
 import com.usthe.alert.AlerterWorkerPool;
+import com.usthe.collector.collect.common.http.HttpUtils;
 import com.usthe.common.util.CommonUtil;
 import com.usthe.common.entity.alerter.Alert;
 import com.usthe.alert.service.AlertService;
+import com.usthe.manager.pojo.dto.FlyBookWebHookDto;
 import com.usthe.manager.pojo.dto.WeWorkWebHookDTO;
 import com.usthe.common.util.CommonConstants;
 import com.usthe.common.entity.manager.Monitor;
@@ -23,6 +26,7 @@ import org.springframework.web.client.ResourceAccessException;
 import org.springframework.web.client.RestTemplate;
 
 import javax.mail.internet.MimeMessage;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -120,16 +124,71 @@ public class DispatchAlarm {
             switch (receiver.getType()) {
                 // todo 短信通知
                 case 0: break;
-                case 1: sendEmailAlert(receiver, alert); break;
+//                case 1: sendEmailAlert(receiver, alert); break;
                 case 2: sendWebHookAlert(receiver, alert); break;
                 case 3: sendWeChatAlert(receiver, alert); break;
                 case 4: sendWeWorkRobotAlert(receiver, alert);break;
+                case 1: sendFlyBookAlert(receiver,alert); break;
                 default: break;
             }
         }
     }
 
     /**
+     * 通过飞书发送告警信息
+     * @param receiver
+     * @param alert
+     */
+    private void sendFlyBookAlert(NoticeReceiver receiver, Alert alert) {
+        FlyBookWebHookDto flyBookWebHookDto = new FlyBookWebHookDto();
+        FlyBookWebHookDto.Content content = new FlyBookWebHookDto.Content();
+        FlyBookWebHookDto.Post post = new FlyBookWebHookDto.Post();
+        FlyBookWebHookDto.zh_cn zh_cn = new FlyBookWebHookDto.zh_cn();
+        content.setPost(post);
+        post.setZh_cn(zh_cn);
+        flyBookWebHookDto.setMsg_type("post");
+        List<List<FlyBookWebHookDto.FlyBookContent>> contents = new ArrayList<>();
+        List<FlyBookWebHookDto.FlyBookContent> contents1 = new ArrayList<>();
+        FlyBookWebHookDto.FlyBookContent flyBookContent = new FlyBookWebHookDto.FlyBookContent();
+        flyBookContent.setTag("text");
+        StringBuilder text = new StringBuilder();
+        text.append("告警目标对象 :" + alert.getTarget())
+             .append("\n所属监控ID :" + alert.getMonitorId())
+             .append("\n所属监控名称 :" + alert.getMonitorName())
+             .append("\n告警级别 :" + CommonUtil.transferAlertPriority(alert.getPriority()))
+             .append("\n内容详情 : " + alert.getContent());
+        flyBookContent.setText(text.toString());
+        contents1.add(flyBookContent);
+        FlyBookWebHookDto.FlyBookContent bookContent = new FlyBookWebHookDto.FlyBookContent();
+        bookContent.setTag("a");
+        bookContent.setText("点击查看");
+        bookContent.setHref("https://www.baidu.com");
+        contents1.add(bookContent);
+        contents.add(contents1);
+        zh_cn.setTitle("[TanCloud探云告警]");
+        zh_cn.setContent(contents);
+        flyBookWebHookDto.setContent(content);
+        String webHookUrl = FlyBookWebHookDto.WEBHOOK_URL;
+        String s = JSON.toJSONString(flyBookWebHookDto);
+        HttpUtils.sendPostJsonBody(webHookUrl,s);
+        try {
+            ResponseEntity<String> entity = restTemplate.postForEntity(webHookUrl, flyBookWebHookDto, String.class);
+            if (entity.getStatusCode() == HttpStatus.OK) {
+                log.debug("Send weWork webHook: {} Success", webHookUrl);
+            } else {
+                log.warn("Send weWork webHook: {} Failed: {}", webHookUrl, entity.getBody());
+            }
+        } catch (ResourceAccessException e) {
+            log.warn("Send WebHook: {} Failed: {}.", webHookUrl, e.getMessage());
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+
+
+
+    }
+
+    /**
      * 通过企业微信发送告警信息
      * @param receiver  通知配置信息
      * @param alert     告警信息

+ 66 - 0
manager/src/main/java/com/usthe/manager/pojo/dto/FlyBookWebHookDto.java

@@ -0,0 +1,66 @@
+package com.usthe.manager.pojo.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 飞书机器人消息实体
+ *
+ * @author 花城
+ * @version 1.0
+ * @date 2022/2/22 6:41 下午
+ * @Description
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FlyBookWebHookDto {
+    public static final String WEBHOOK_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/873f1a93-0517-4590-a335-da64e48d6d48";
+
+    private static final String MARKDOWN = "post";
+
+    /**
+     * 消息类型
+     */
+    private String msg_type = MARKDOWN;
+
+    private Content content;
+
+    /**
+     * 消息内容
+     */
+    @Data
+    public static class Content {
+        public Post post;
+    }
+
+    @Data
+    public static class FlyBookContent{
+        //格式  目前支持文本、超链接、@人的功能  text  a  at
+        public String tag;
+        //文本
+        public String text;
+        //超链接地址
+        public String href;
+
+        public String user_id;
+        public String user_name;
+    }
+    @Data
+    public static class Post {
+        public zh_cn zh_cn;
+    }
+    @Data
+    public static class zh_cn{
+        //标题
+        public String title;
+        //内容
+        public List<List<FlyBookContent>> content;
+    }
+
+}