package com.taover.heartbeat.bean; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.taover.util.UtilEmail; import com.taover.util.UtilLog; import com.taover.util.UtilWeixinMsg; public class ReformInstance { private List emailToList; private List weixinWxidList; private List mobileList; public ReformInstance() {} public void doReform(Instance instance) { if(instance == null) { return; } if(this.emailToList != null && !this.emailToList.isEmpty()) { this.sendEmail(instance); } if(this.weixinWxidList != null && !this.weixinWxidList.isEmpty()) { this.sendWeixin(instance); } } private void sendWeixin(Instance instance) { String weixinContent = "报警--项目可用性监控\n"; if(instance instanceof ClientInstance) { weixinContent += this.formatWeixin((ClientInstance)instance); }else if(instance instanceof ServerInstance) { weixinContent += this.formatWeixin((ServerInstance)instance); }else { try { weixinContent += " JSON序列化:"+JSONObject.toJSONString(instance); }catch (Exception e) { weixinContent += " 对象无法序列化打印,instance.toString() ==>> "+instance.toString(); } } try { for(String weixinWxid: this.weixinWxidList) { if(weixinWxid != null && !weixinWxid.trim().equals("")) { UtilWeixinMsg.sendTextMessage(weixinWxid, weixinContent); } } } catch (Exception e) { UtilLog.infoForMessage("发送微信消息失败,消息内容:"+weixinContent, this.getClass()); UtilLog.errorForException(e, this.getClass()); } } private String formatWeixin(ServerInstance instance) { String htmlContent = ""; if(instance.getLatestServerResponse() == null) { htmlContent += " 未收到服务器响应\n"; }else { if(instance.getLatestServerResponse().isOverdue()) { htmlContent += " 向服务器接口["+instance.getUrl()+"]发送请求,响应超时["+instance.getMaxWaitSec()+"s],请及时确认服务器是否正常运行\n"; }else if(!instance.getLatestServerResponse().isCodeOk()) { htmlContent += " 向服务器接口["+instance.getUrl()+"]发送请求,响应数据不正常(详细请查看邮件),请及时确认服务器是否正常运行\n"; }else { htmlContent += " 向服务器接口["+instance.getUrl()+"]发送请求,未知异常,请及时确认服务器是否正常运行\n"; } } htmlContent += " 最后一次请求时间: "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(instance.getLatestRequestUnixtime()*1000)); return htmlContent; } private String formatWeixin(ClientInstance instance) { String htmlContent = " 超过"+instance.getFixRateSec()+"秒未收到请求,请确认CODE["+instance.getCode()+"]对应的客户端是否运行正常\n"; htmlContent += " 客户端最后一次请求时间: "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(instance.getLastestClientRequest().getUnixtime()*1000))+"\n"; htmlContent += " 客户端IP:"+instance.getIp(); return htmlContent; } private void sendEmail(Instance instance) { String subject = "报警-项目可用性监控--监控ID["+instance.getIdentity()+"]"; String htmlContent = "

监控ID:"+instance.getIdentity()+"

"; if(instance instanceof ClientInstance) { htmlContent += this.formatHtml((ClientInstance)instance); }else if(instance instanceof ServerInstance) { htmlContent += this.formatHtml((ServerInstance)instance); }else { try { htmlContent += "

"+JSONObject.toJSONString(instance)+"

"; }catch (Exception e) { htmlContent += "对象无法序列化打印,instance.toString() ==>> "+instance.toString()+""; } } try { UtilEmail.sendHtmlMail(emailToList, subject, htmlContent); } catch (Exception e) { UtilLog.infoForMessage("发送邮件失败,消息内容:[标题:"+subject+"],[正文:"+htmlContent+"]", this.getClass()); UtilLog.errorForException(e, this.getClass()); } } private String formatHtml(ServerInstance instance) { String htmlContent = ""; htmlContent += "

"; if(instance.getLatestServerResponse() != null) { if(instance.getLatestServerResponse().isOverdue()) { htmlContent += " 向服务器接口["+instance.getUrl()+"]发送请求,响应超时["+instance.getMaxWaitSec()+"s],请及时确认服务器是否正常运行"; }else if(!instance.getLatestServerResponse().isCodeOk()) { htmlContent += " 向服务器接口["+instance.getUrl()+"]发送请求,响应数据不正常(详细请查看邮件),请及时确认服务器是否正常运行"; }else { htmlContent += "未知异常"; } }else { htmlContent += "未记录最后一次响应记录"; } htmlContent += "

"; htmlContent += "
    "; htmlContent += "
  • CODE: "+instance.getCode()+"
  • "; htmlContent += "
  • URL: "+instance.getUrl()+"
  • "; htmlContent += "
  • 请求频率: "+instance.getFixRateSec()+"秒/次
  • "; htmlContent += "
  • 请求最大等待时间: "+instance.getMaxWaitSec()+"秒
  • "; htmlContent += "
  • 客户端请求时间戳: "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(instance.getLatestRequestUnixtime()*1000))+"
  • "; htmlContent += "
  • 最后一次收到的响应包: "+JSON.toJSONString(instance.getLatestServerResponse())+"
  • "; htmlContent += "
"; return htmlContent; } private String formatHtml(ClientInstance instance) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String htmlContent = ""; htmlContent += "

"; htmlContent += "超过"+instance.getFixRateSec()+"秒未收到请求,请确认CODE["+instance.getCode()+"]对应的客户端是否运行正常
"; htmlContent += "客户端最后一次请求时间: "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(instance.getUnixtime()*1000)); htmlContent += "

"; htmlContent += "
    "; htmlContent += "
  • CODE: "+instance.getCode()+"
  • "; htmlContent += "
  • IP: "+instance.getIp()+"
  • "; htmlContent += "
  • 请求频率: "+instance.getFixRateSec()+"秒/次
  • "; htmlContent += "
  • 请求最大等待时间: "+instance.getMaxWaitSec()+"秒
  • "; htmlContent += "
  • 客户端请求时间戳: "+sdf.format(new Date(instance.getUnixtime()*1000))+"
  • "; htmlContent += "
  • 服务器接收时间: "+sdf.format(new Date(instance.getLastestServerUnixtime()*1000))+"
  • "; htmlContent += "
  • 最后一次收到的请求包: "+JSON.toJSONString(instance.getLastestClientRequest())+"
  • "; htmlContent += "
"; return htmlContent; } public void loadConfig(String emailTo, String weixinWxid, String mobile) { if(strNotBlank(emailTo)) { this.emailToList = Arrays.asList(emailTo.split(",")); } if(strNotBlank(weixinWxid)) { this.weixinWxidList = Arrays.asList(weixinWxid.split(",")); } if(strNotBlank(mobile)) { this.mobileList = Arrays.asList(mobile.split(",")); } } public void loadConfig(Map data) { Object emailTo = data.get("emailTo"); if(emailTo != null && strNotBlank(emailTo.toString())) { this.emailToList = Arrays.asList(emailTo.toString().split(",")); } Object weixinWxid = data.get("weixinWxid"); if(weixinWxid != null && strNotBlank(weixinWxid.toString())) { this.weixinWxidList = Arrays.asList(weixinWxid.toString().split(",")); } Object mobile = data.get("mobile"); if(mobile != null && strNotBlank(mobile.toString())) { this.mobileList = Arrays.asList(mobile.toString().split(",")); } } private boolean strNotBlank(String data) { return !(data == null || data.trim().equals("")); } public List getEmailToList() { return emailToList; } public void setEmailToList(List emailToList) { this.emailToList = emailToList; } public List getWeixinWxidList() { return weixinWxidList; } public void setWeixinWxidList(List weixinWxidList) { this.weixinWxidList = weixinWxidList; } public List getMobileList() { return mobileList; } public void setMobileList(List mobileList) { this.mobileList = mobileList; } }