128 lines
6.0 KiB
Java
128 lines
6.0 KiB
Java
package com.tongran.rocketmq.utils;
|
|
|
|
import com.tongran.common.core.constant.SecurityConstants;
|
|
import com.tongran.common.core.domain.R;
|
|
import com.tongran.common.core.utils.StringUtils;
|
|
import com.tongran.rocketmq.domain.RmAlarmLog;
|
|
import com.tongran.rocketmq.domain.RmAlarmPushConfig;
|
|
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.system.api.RemoteRevenueConfigService;
|
|
import com.tongran.system.api.domain.RmResourceRegistrationRemote;
|
|
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 RemoteRevenueConfigService remoteRevenueConfigService;
|
|
@Autowired
|
|
private SmsAlarmUtil smsAlarmUtil;
|
|
/**
|
|
* 发送告警推送
|
|
* @param rmAlarmLog 告警日志参数
|
|
*/
|
|
public void sendAlarmPush(RmAlarmLog rmAlarmLog, String alarmTypeMsg) {
|
|
|
|
String clientId = rmAlarmLog.getClientId();
|
|
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()) {
|
|
String phone = "";
|
|
try {
|
|
if(!AlarmTypeEnum.ping丢包率过高.getCode().equals(rmAlarmLog.getAlarmType())){
|
|
// 查询服务器信息
|
|
RmResourceRegistrationRemote query = new RmResourceRegistrationRemote();
|
|
query.setClientId(clientId);
|
|
R<RmResourceRegistrationRemote> registerMsgR = remoteRevenueConfigService.getListByHardwareSn(query, SecurityConstants.INNER);
|
|
if(registerMsgR != null && registerMsgR.getData() != null){
|
|
RmResourceRegistrationRemote serverMsg = registerMsgR.getData();
|
|
rmAlarmLog.setMgmPublicIp(serverMsg.getIp1PublicIp());
|
|
rmAlarmLog.setBusinessName(serverMsg.getBusinessName());
|
|
rmAlarmLog.setRemark(serverMsg.getRemark());
|
|
phone = serverMsg.getPhone();
|
|
}
|
|
}
|
|
Map<String, Object> alarmMap = new HashMap<>();
|
|
alarmMap.put("告警时间", rmAlarmLog.getAlarmTime());
|
|
alarmMap.put("IP", rmAlarmLog.getMgmPublicIp());
|
|
alarmMap.put("告警类型", alarmTypeMsg);
|
|
alarmMap.put("告警设备", clientId.substring(clientId.length() - 8));
|
|
alarmMap.put("告警内容", rmAlarmLog.getAlarmContent());
|
|
alarmMap.put("标签", rmAlarmLog.getRemark());
|
|
alarmMap.put("业务名称", rmAlarmLog.getBusinessName());
|
|
for (RmAlarmPushConfig alarmPushConfig : alarmConfigList) {
|
|
if(StringUtils.isNoneBlank(phone)){
|
|
alarmPushConfig.setContactPhones(phone);
|
|
}
|
|
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, "", 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;
|
|
}
|
|
}
|