From d27919dcb5f733a5d16fc8757a057c197fa86087 Mon Sep 17 00:00:00 2001 From: chenghua Date: Tue, 22 Feb 2022 20:58:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=9B=86=E6=88=90=E9=A3=9E=E4=B9=A6?= =?UTF-8?q?=E6=9C=BA=E5=99=A8=E4=BA=BA=E6=8E=A8=E9=80=81=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20#I4U9BT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/alerter/DispatchAlarm.java | 61 ++++++++++++++++- .../manager/pojo/dto/FlyBookWebHookDto.java | 66 +++++++++++++++++++ 2 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 manager/src/main/java/com/usthe/manager/pojo/dto/FlyBookWebHookDto.java diff --git a/manager/src/main/java/com/usthe/manager/component/alerter/DispatchAlarm.java b/manager/src/main/java/com/usthe/manager/component/alerter/DispatchAlarm.java index e0713be..7db82f7 100644 --- a/manager/src/main/java/com/usthe/manager/component/alerter/DispatchAlarm.java +++ b/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,15 +124,70 @@ 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> contents = new ArrayList<>(); + List 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 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 通知配置信息 diff --git a/manager/src/main/java/com/usthe/manager/pojo/dto/FlyBookWebHookDto.java b/manager/src/main/java/com/usthe/manager/pojo/dto/FlyBookWebHookDto.java new file mode 100644 index 0000000..4eb4e9b --- /dev/null +++ b/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> content; + } + +}