开发监控看板组管理CRUD
设计告警阈值配置功能
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
package com.tongran.rocketmq.utils;
|
||||
|
||||
import com.tongran.rocketmq.domain.RmAlarmLog;
|
||||
import com.tongran.rocketmq.domain.RmAlarmPushConfig;
|
||||
import com.tongran.rocketmq.domain.RmNetworkInterface;
|
||||
import com.tongran.rocketmq.enums.AlarmTypeEnum;
|
||||
import com.tongran.rocketmq.enums.PushMethodEnum;
|
||||
import com.tongran.rocketmq.service.IRmAlarmLogService;
|
||||
import com.tongran.rocketmq.service.IRmAlarmPushConfigService;
|
||||
import com.tongran.rocketmq.service.IRmNetworkInterfaceService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class SendAlarmPushUtil {
|
||||
|
||||
@Autowired
|
||||
private IRmAlarmLogService rmAlarmLogService;
|
||||
@Autowired
|
||||
private IRmAlarmPushConfigService rmAlarmPushConfigService;
|
||||
@Autowired
|
||||
private IRmNetworkInterfaceService rmNetworkInterfaceService;
|
||||
/**
|
||||
* 发送告警推送
|
||||
* @param rmAlarmLog 告警日志参数
|
||||
*/
|
||||
public void sendAlarmPush(RmAlarmLog rmAlarmLog) {
|
||||
|
||||
RmAlarmPushConfig rmAlarmPushConfig = new RmAlarmPushConfig();
|
||||
rmAlarmPushConfig.setPushAlarmTypes(rmAlarmLog.getAlarmType());
|
||||
List<RmAlarmPushConfig> alarmConfigList = rmAlarmPushConfigService.selectRmAlarmPushConfigList(rmAlarmPushConfig);
|
||||
RmAlarmLog updateData = new RmAlarmLog();
|
||||
updateData.setId(rmAlarmLog.getId());
|
||||
if (alarmConfigList != null && !alarmConfigList.isEmpty()) {
|
||||
try {
|
||||
// 查询管理网公网ip
|
||||
RmNetworkInterface rmNetworkInterface = new RmNetworkInterface();
|
||||
rmNetworkInterface.setClientId(rmAlarmLog.getClientId());
|
||||
rmNetworkInterface.setNewFlag(1);
|
||||
List<RmNetworkInterface> interfaceList = rmNetworkInterfaceService.selectRmNetworkInterfaceList(rmNetworkInterface);
|
||||
if (interfaceList != null && !interfaceList.isEmpty()) {
|
||||
interfaceList.stream()
|
||||
.filter(info -> "2".equals(info.getBindIp()) || "3".equals(info.getBindIp()))
|
||||
.findFirst()
|
||||
.ifPresent(networkInterface -> {
|
||||
rmAlarmLog.setMgmPublicIp(networkInterface.getPublicIp());
|
||||
});
|
||||
}
|
||||
Map<String, Object> alarmMap = new HashMap<>();
|
||||
alarmMap.put("告警时间", rmAlarmLog.getAlarmTime());
|
||||
alarmMap.put("IP", rmAlarmLog.getMgmPublicIp());
|
||||
alarmMap.put("告警类型", AlarmTypeEnum.CPU使用率高.getMsg());
|
||||
alarmMap.put("告警设备", rmAlarmLog.getClientId());
|
||||
alarmMap.put("告警内容", rmAlarmLog.getAlarmContent());
|
||||
for (RmAlarmPushConfig alarmPushConfig : alarmConfigList) {
|
||||
if(PushMethodEnum.企业微信.getCode().equals(alarmPushConfig.getPushMethod())){
|
||||
updateData.setPushFlag(processWeComPush(alarmPushConfig, alarmMap));
|
||||
}else if(PushMethodEnum.手机短信.getCode().equals(alarmPushConfig.getPushMethod())){
|
||||
updateData.setPushFlag(processTextMessagePush(alarmPushConfig, alarmMap));
|
||||
}else{
|
||||
log.info("暂无该推送方式:{}", alarmPushConfig.getPushMethod());
|
||||
updateData.setPushFlag(2L);
|
||||
}
|
||||
}
|
||||
} catch (Exception e){
|
||||
updateData.setPushFlag(0L);
|
||||
log.error("消息推送失败:{}", e.getMessage());
|
||||
}
|
||||
}else{
|
||||
updateData.setPushFlag(2L);
|
||||
}
|
||||
rmAlarmLogService.updateRmAlarmLog(updateData);
|
||||
}
|
||||
|
||||
/**
|
||||
* 企业微信处理
|
||||
*/
|
||||
private Long processWeComPush(RmAlarmPushConfig alarmPushConfig, Map<String, Object> alarmMap){
|
||||
String contentTemplate = alarmPushConfig.getMessageContent();
|
||||
String webhookUrl = alarmPushConfig.getPushAddress();
|
||||
if (alarmPushConfig.getContactPhones() != null) {
|
||||
String[] phones = alarmPushConfig.getContactPhones().split(",");
|
||||
WeChatWorkBot.sendTemplateMessage(webhookUrl, contentTemplate, alarmMap, alarmMap.get("告警内容"), phones, false);
|
||||
} else {
|
||||
WeChatWorkBot.sendTemplateMessage(webhookUrl, contentTemplate, alarmMap);
|
||||
}
|
||||
return 1L;
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机短信处理
|
||||
*/
|
||||
private Long processTextMessagePush(RmAlarmPushConfig alarmPushConfig, Map<String, Object> alarmMap){
|
||||
String contentTemplate = alarmPushConfig.getMessageContent();
|
||||
String actualContent = WeChatWorkBot.processTemplate(contentTemplate, alarmMap, alarmMap.get("告警内容"));
|
||||
if (alarmPushConfig.getContactPhones() != null) {
|
||||
String[] phones = alarmPushConfig.getContactPhones().split(",");
|
||||
SmsAlarmUtil smsAlarmUtil = new SmsAlarmUtil();
|
||||
int successCount = smsAlarmUtil.sendAlarmToMultiple(alarmPushConfig.getContactPhones(), actualContent);
|
||||
// 计算有效手机号数量(过滤空值)
|
||||
long validPhoneCount = Arrays.stream(phones)
|
||||
.map(String::trim)
|
||||
.filter(phone -> !phone.isEmpty())
|
||||
.count();
|
||||
return validPhoneCount == successCount ? 1L : 0L;
|
||||
}
|
||||
return 0L;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user