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

This commit is contained in:
chenghua
2022-02-22 20:58:38 +08:00
parent 67da4f6435
commit d27919dcb5
2 changed files with 126 additions and 1 deletions

View File

@@ -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<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 通知配置信息

View File

@@ -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;
}
}