优化告警日志

This commit is contained in:
gaoyutao
2025-11-14 18:50:58 +08:00
parent 1adc72032a
commit 68e042d9fc
@@ -891,6 +891,7 @@ public class MessageHandler {
InitialHeartbeatListen heartbeat = heartbeats.get(0); InitialHeartbeatListen heartbeat = heartbeats.get(0);
String clientId = message.getClientId(); String clientId = message.getClientId();
String version = heartbeat.getVersion(); String version = heartbeat.getVersion();
String name = heartbeat.getName();
log.debug("处理心跳消息,客户端ID: {}, 时间: {}", clientId, heartbeat.getTimestamp()); log.debug("处理心跳消息,客户端ID: {}, 时间: {}", clientId, heartbeat.getTimestamp());
// 使用Redis存储状态 // 使用Redis存储状态
@@ -1144,14 +1145,52 @@ public class MessageHandler {
log.error("插入心跳日志失败", e); log.error("插入心跳日志失败", e);
} }
} }
private void insertAlarmRecords(String clientId){
/**
* 添加告警日志并推送消息到企业微信
* @param clientId
*/
private void insertAlarmRecords(String clientId) {
// 查询clientId是否为交换机唯一标识
boolean isSwitch = false;
String switchName = "";
RmSwitchManagementRemote rmSwitchManagementRemote = new RmSwitchManagementRemote();
rmSwitchManagementRemote.setClientId(clientId);
R<List<RmSwitchManagementRemote>> rmSwitchManagementRemoteListR = remoteRevenueConfigService.getSwitchNameByClientId(rmSwitchManagementRemote, SecurityConstants.INNER);
if (rmSwitchManagementRemoteListR != null &&
rmSwitchManagementRemoteListR.getData() != null &&
!rmSwitchManagementRemoteListR.getData().isEmpty()) {
isSwitch = true;
switchName = rmSwitchManagementRemoteListR.getData().get(0).getSwitchName();
}
// 创建告警日志记录
RmAlarmLog rmAlarmLog = createAlarmLog(clientId, isSwitch, switchName);
// 插入告警日志
rmAlarmLogService.insertRmAlarmLog(rmAlarmLog);
// 发送告警推送
sendAlarmPush(rmAlarmLog, isSwitch);
}
/**
* 创建告警日志记录
*/
private RmAlarmLog createAlarmLog(String clientId, boolean isSwitch, String switchName) {
RmAlarmLog rmAlarmLog = new RmAlarmLog(); RmAlarmLog rmAlarmLog = new RmAlarmLog();
String alarmContent = clientId + "下线";
if (isSwitch) {
rmAlarmLog.setClientId(switchName);
rmAlarmLog.setAlarmType("2");
} else {
// 查询管理网公网ip // 查询管理网公网ip
RmNetworkInterface rmNetworkInterface = new RmNetworkInterface(); RmNetworkInterface rmNetworkInterface = new RmNetworkInterface();
rmNetworkInterface.setClientId(clientId); rmNetworkInterface.setClientId(clientId);
rmNetworkInterface.setNewFlag(1); rmNetworkInterface.setNewFlag(1);
List<RmNetworkInterface> interfaceList = rmNetworkInterfaceService.selectRmNetworkInterfaceList(rmNetworkInterface); List<RmNetworkInterface> interfaceList = rmNetworkInterfaceService.selectRmNetworkInterfaceList(rmNetworkInterface);
if(interfaceList != null && !interfaceList.isEmpty()){ if (interfaceList != null && !interfaceList.isEmpty()) {
interfaceList.stream() interfaceList.stream()
.filter(info -> "2".equals(info.getBindIp()) || "3".equals(info.getBindIp())) .filter(info -> "2".equals(info.getBindIp()) || "3".equals(info.getBindIp()))
.findFirst() .findFirst()
@@ -1160,41 +1199,45 @@ public class MessageHandler {
}); });
} }
rmAlarmLog.setClientId(clientId); rmAlarmLog.setClientId(clientId);
rmAlarmLog.setAlarmContent(clientId + "下线");
rmAlarmLog.setAlarmTime(DateUtils.getNowDate());
rmAlarmLog.setAlarmType("1"); rmAlarmLog.setAlarmType("1");
// 查询此告警是否存在 }
// RmAlarmLog query = new RmAlarmLog();
// query.setClientId(clientId); rmAlarmLog.setAlarmContent(alarmContent);
// query.setAlarmType(AlarmTypeEnum.服务器下线.getCode()); rmAlarmLog.setAlarmTime(DateUtils.getNowDate());
// List<RmAlarmLog> alarmLog = rmAlarmLogService.selectRmAlarmLogList(query); return rmAlarmLog;
// if(alarmLog != null && !alarmLog.isEmpty()){ }
// rmAlarmLogService.updateRmAlarmLog(rmAlarmLog);
// } /**
rmAlarmLogService.insertRmAlarmLog(rmAlarmLog); * 发送告警推送
*/
private void sendAlarmPush(RmAlarmLog rmAlarmLog, boolean isSwitch) {
String alarmTypeCode = isSwitch ? AlarmTypeEnum.交换机下线.getCode() : AlarmTypeEnum.服务器下线.getCode();
String alarmTypeMsg = isSwitch ? AlarmTypeEnum.交换机下线.getMsg() : AlarmTypeEnum.服务器下线.getMsg();
// 拿到消息模板
RmAlarmPushConfig rmAlarmPushConfig = new RmAlarmPushConfig(); RmAlarmPushConfig rmAlarmPushConfig = new RmAlarmPushConfig();
rmAlarmPushConfig.setPushMethod(PushMethodEnum.企业微信.getCode()); rmAlarmPushConfig.setPushMethod(PushMethodEnum.企业微信.getCode());
rmAlarmPushConfig.setPushAlarmTypes(AlarmTypeEnum.服务器下线.getCode()); rmAlarmPushConfig.setPushAlarmTypes(alarmTypeCode);
List<RmAlarmPushConfig> alarmConfigList = rmAlarmPushConfigService.selectRmAlarmPushConfigList(rmAlarmPushConfig); List<RmAlarmPushConfig> alarmConfigList = rmAlarmPushConfigService.selectRmAlarmPushConfigList(rmAlarmPushConfig);
if(alarmConfigList != null && !alarmConfigList.isEmpty()){
if (alarmConfigList != null && !alarmConfigList.isEmpty()) {
for (RmAlarmPushConfig alarmPushConfig : alarmConfigList) { for (RmAlarmPushConfig alarmPushConfig : alarmConfigList) {
String contentTemplate = alarmPushConfig.getMessageContent(); String contentTemplate = alarmPushConfig.getMessageContent();
String webhookUrl = alarmPushConfig.getPushAddress(); String webhookUrl = alarmPushConfig.getPushAddress();
String[] phones = alarmPushConfig.getContactPhones().split(",");
String content = rmAlarmLog.getAlarmContent();
Map<String, Object> alarmMap = new HashMap<>(); Map<String, Object> alarmMap = new HashMap<>();
alarmMap.put("告警时间", rmAlarmLog.getAlarmTime()); alarmMap.put("告警时间", rmAlarmLog.getAlarmTime());
alarmMap.put("管理网-公网IP", rmAlarmLog.getMgmPublicIp()); alarmMap.put("管理网-公网IP", rmAlarmLog.getMgmPublicIp());
alarmMap.put("告警类型", AlarmTypeEnum.服务器下线.getMsg()); alarmMap.put("告警类型", alarmTypeMsg);
alarmMap.put("告警设备", rmAlarmLog.getClientId()); alarmMap.put("告警设备", rmAlarmLog.getClientId());
alarmMap.put("告警内容", content); alarmMap.put("告警内容", rmAlarmLog.getAlarmContent());
// 推送消息到企业微信
WeChatWorkBot.sendTemplateMessage(webhookUrl, contentTemplate, alarmMap, content, phones, false);
}
}
if (alarmPushConfig.getContactPhones() != null) {
String[] phones = alarmPushConfig.getContactPhones().split(",");
WeChatWorkBot.sendTemplateMessage(webhookUrl, contentTemplate, alarmMap, rmAlarmLog.getAlarmContent(), phones, false);
} else {
WeChatWorkBot.sendTemplateMessage(webhookUrl, contentTemplate, alarmMap);
}
}
}
} }
/** /**
@@ -1222,19 +1265,17 @@ public class MessageHandler {
long timestamp = rsp.getTimestamp(); long timestamp = rsp.getTimestamp();
long millis = timestamp * 1000; long millis = timestamp * 1000;
Date createTime = new Date(millis / 1000 * 1000); // 去除毫秒 Date createTime = new Date(millis / 1000 * 1000); // 去除毫秒
// 查询资源信息
RmResourceRegistrationRemote queryParam = new RmResourceRegistrationRemote();
queryParam.setClientId(message.getClientId());
R<RmResourceRegistrationRemote> resourceMsg = remoteRevenueConfigService.getListByHardwareSn(queryParam, SecurityConstants.INNER);
RmResourceRegistrationRemote resourceMsgData = resourceMsg.getData();
if(rsp.getResCode() == 1){ if(rsp.getResCode() == 1){
if(rsp.getResult() != null){ if(rsp.getResult() != null){
List<RspResultVo> resultVos = JsonDataParser.parseJsonData(rsp.getResult(), RspResultVo.class); List<RspResultVo> resultVos = JsonDataParser.parseJsonData(rsp.getResult(), RspResultVo.class);
RspResultVo rspResultVo = resultVos.get(0); RspResultVo rspResultVo = resultVos.get(0);
JSONObject jsonObject = JSONObject.parseObject(rsp.getResult()); JSONObject jsonObject = JSONObject.parseObject(rsp.getResult());
String resOut = jsonObject.getString("resOut"); String resOut = jsonObject.getString("resOut");
// 查询执行的脚本id
RmDeploymentPolicy deploymentPolicy = rmDeploymentPolicyService.selectRmDeploymentPolicyById(Long.valueOf(rspResultVo.getScriptId()));
Long businessScriptId = deploymentPolicy.getScriptId();
// 判断失败返回结果是否包含脚本执行失败关键字 // 判断失败返回结果是否包含脚本执行失败关键字
R<EpsBusinessScriptRemote> businessScriptMsgR = remoteRevenueConfigService.getBusinessScriptMsgByScriptId(Long.valueOf(rspResultVo.getScriptId()), SecurityConstants.AUTHORIZATION_HEADER); R<EpsBusinessScriptRemote> businessScriptMsgR = remoteRevenueConfigService.getBusinessScriptMsgByScriptId(businessScriptId, SecurityConstants.INNER);
// 构建脚本执行结果实体类 // 构建脚本执行结果实体类
RmResourceRemote insertData = new RmResourceRemote(); RmResourceRemote insertData = new RmResourceRemote();
insertData.setClientId(message.getClientId()); insertData.setClientId(message.getClientId());