2026-01-23 18:39:20 +08:00
|
|
|
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;
|
2026-01-23 19:18:08 +08:00
|
|
|
@Autowired
|
|
|
|
|
private SmsAlarmUtil smsAlarmUtil;
|
2026-01-23 18:39:20 +08:00
|
|
|
/**
|
|
|
|
|
* 发送告警推送
|
|
|
|
|
* @param rmAlarmLog 告警日志参数
|
|
|
|
|
*/
|
|
|
|
|
public void sendAlarmPush(RmAlarmLog rmAlarmLog) {
|
|
|
|
|
|
2026-01-23 19:18:08 +08:00
|
|
|
String clientId = rmAlarmLog.getClientId();
|
2026-01-23 18:39:20 +08:00
|
|
|
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());
|
2026-01-23 19:18:08 +08:00
|
|
|
alarmMap.put("告警设备", clientId.substring(clientId.length() - 8));
|
2026-01-23 18:39:20 +08:00
|
|
|
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(",");
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|