diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/handler/MessageHandler.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/handler/MessageHandler.java index abebef2..b1a2a0e 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/handler/MessageHandler.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/handler/MessageHandler.java @@ -891,6 +891,7 @@ public class MessageHandler { InitialHeartbeatListen heartbeat = heartbeats.get(0); String clientId = message.getClientId(); String version = heartbeat.getVersion(); + String name = heartbeat.getName(); log.debug("处理心跳消息,客户端ID: {}, 时间: {}", clientId, heartbeat.getTimestamp()); // 使用Redis存储状态 @@ -1144,57 +1145,99 @@ public class MessageHandler { log.error("插入心跳日志失败", e); } } - private void insertAlarmRecords(String clientId){ - RmAlarmLog rmAlarmLog = new RmAlarmLog(); - // 查询管理网公网ip - RmNetworkInterface rmNetworkInterface = new RmNetworkInterface(); - rmNetworkInterface.setClientId(clientId); - rmNetworkInterface.setNewFlag(1); - List 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()); - }); + + /** + * 添加告警日志并推送消息到企业微信 + * @param clientId + */ + private void insertAlarmRecords(String clientId) { + // 查询clientId是否为交换机唯一标识 + boolean isSwitch = false; + String switchName = ""; + RmSwitchManagementRemote rmSwitchManagementRemote = new RmSwitchManagementRemote(); + rmSwitchManagementRemote.setClientId(clientId); + R> rmSwitchManagementRemoteListR = remoteRevenueConfigService.getSwitchNameByClientId(rmSwitchManagementRemote, SecurityConstants.INNER); + if (rmSwitchManagementRemoteListR != null && + rmSwitchManagementRemoteListR.getData() != null && + !rmSwitchManagementRemoteListR.getData().isEmpty()) { + isSwitch = true; + switchName = rmSwitchManagementRemoteListR.getData().get(0).getSwitchName(); } - rmAlarmLog.setClientId(clientId); - rmAlarmLog.setAlarmContent(clientId + "下线"); - rmAlarmLog.setAlarmTime(DateUtils.getNowDate()); - rmAlarmLog.setAlarmType("1"); - // 查询此告警是否存在 -// RmAlarmLog query = new RmAlarmLog(); -// query.setClientId(clientId); -// query.setAlarmType(AlarmTypeEnum.服务器下线.getCode()); -// List alarmLog = rmAlarmLogService.selectRmAlarmLogList(query); -// if(alarmLog != null && !alarmLog.isEmpty()){ -// rmAlarmLogService.updateRmAlarmLog(rmAlarmLog); -// } + + // 创建告警日志记录 + 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(); + String alarmContent = clientId + "下线"; + + if (isSwitch) { + rmAlarmLog.setClientId(switchName); + rmAlarmLog.setAlarmType("2"); + } else { + // 查询管理网公网ip + RmNetworkInterface rmNetworkInterface = new RmNetworkInterface(); + rmNetworkInterface.setClientId(clientId); + rmNetworkInterface.setNewFlag(1); + List 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()); + }); + } + rmAlarmLog.setClientId(clientId); + rmAlarmLog.setAlarmType("1"); + } + + rmAlarmLog.setAlarmContent(alarmContent); + rmAlarmLog.setAlarmTime(DateUtils.getNowDate()); + return 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.setPushMethod(PushMethodEnum.企业微信.getCode()); - rmAlarmPushConfig.setPushAlarmTypes(AlarmTypeEnum.服务器下线.getCode()); + rmAlarmPushConfig.setPushAlarmTypes(alarmTypeCode); List alarmConfigList = rmAlarmPushConfigService.selectRmAlarmPushConfigList(rmAlarmPushConfig); - if(alarmConfigList != null && !alarmConfigList.isEmpty()){ + + if (alarmConfigList != null && !alarmConfigList.isEmpty()) { for (RmAlarmPushConfig alarmPushConfig : alarmConfigList) { String contentTemplate = alarmPushConfig.getMessageContent(); String webhookUrl = alarmPushConfig.getPushAddress(); - String[] phones = alarmPushConfig.getContactPhones().split(","); - String content = rmAlarmLog.getAlarmContent(); Map alarmMap = new HashMap<>(); alarmMap.put("告警时间", rmAlarmLog.getAlarmTime()); alarmMap.put("管理网-公网IP", rmAlarmLog.getMgmPublicIp()); - alarmMap.put("告警类型", AlarmTypeEnum.服务器下线.getMsg()); + alarmMap.put("告警类型", alarmTypeMsg); alarmMap.put("告警设备", rmAlarmLog.getClientId()); - alarmMap.put("告警内容", content); - // 推送消息到企业微信 - WeChatWorkBot.sendTemplateMessage(webhookUrl, contentTemplate, alarmMap, content, phones, false); + alarmMap.put("告警内容", rmAlarmLog.getAlarmContent()); + + 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 millis = timestamp * 1000; Date createTime = new Date(millis / 1000 * 1000); // 去除毫秒 - // 查询资源信息 - RmResourceRegistrationRemote queryParam = new RmResourceRegistrationRemote(); - queryParam.setClientId(message.getClientId()); - R resourceMsg = remoteRevenueConfigService.getListByHardwareSn(queryParam, SecurityConstants.INNER); - RmResourceRegistrationRemote resourceMsgData = resourceMsg.getData(); if(rsp.getResCode() == 1){ if(rsp.getResult() != null){ List resultVos = JsonDataParser.parseJsonData(rsp.getResult(), RspResultVo.class); RspResultVo rspResultVo = resultVos.get(0); JSONObject jsonObject = JSONObject.parseObject(rsp.getResult()); String resOut = jsonObject.getString("resOut"); + // 查询执行的脚本id + RmDeploymentPolicy deploymentPolicy = rmDeploymentPolicyService.selectRmDeploymentPolicyById(Long.valueOf(rspResultVo.getScriptId())); + Long businessScriptId = deploymentPolicy.getScriptId(); // 判断失败返回结果是否包含脚本执行失败关键字 - R businessScriptMsgR = remoteRevenueConfigService.getBusinessScriptMsgByScriptId(Long.valueOf(rspResultVo.getScriptId()), SecurityConstants.AUTHORIZATION_HEADER); + R businessScriptMsgR = remoteRevenueConfigService.getBusinessScriptMsgByScriptId(businessScriptId, SecurityConstants.INNER); // 构建脚本执行结果实体类 RmResourceRemote insertData = new RmResourceRemote(); insertData.setClientId(message.getClientId());