ReformInstance.java
8.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
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<String> emailToList;
private List<String> weixinWxidList;
private List<String> 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();
htmlContent += " 累计次数(3次后不再报警):"+instance.getLostClientRequestCount();
return htmlContent;
}
private void sendEmail(Instance instance) {
String subject = "报警-项目可用性监控--监控ID["+instance.getIdentity()+"]";
String htmlContent = "<h2>监控ID:"+instance.getIdentity()+"</h2>";
if(instance instanceof ClientInstance) {
htmlContent += this.formatHtml((ClientInstance)instance);
}else if(instance instanceof ServerInstance) {
htmlContent += this.formatHtml((ServerInstance)instance);
}else {
try {
htmlContent += "<p>"+JSONObject.toJSONString(instance)+"</p>";
}catch (Exception e) {
htmlContent += "<span style=\"color:red;\">对象无法序列化打印,instance.toString() ==>> "+instance.toString()+"</span>";
}
}
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 += "<h4 style=\"color:red;\">";
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 += "</h4>";
htmlContent += "<ul>";
htmlContent += "<li>CODE: "+instance.getCode()+"</li>";
htmlContent += "<li>URL: "+instance.getUrl()+"</li>";
htmlContent += "<li>请求频率: "+instance.getFixRateSec()+"秒/次</li>";
htmlContent += "<li>请求最大等待时间: "+instance.getMaxWaitSec()+"秒</li>";
htmlContent += "<li>客户端请求时间戳: "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(instance.getLatestRequestUnixtime()*1000))+"</li>";
htmlContent += "<li>最后一次收到的响应包: <span style=\"color:gray;\">"+JSON.toJSONString(instance.getLatestServerResponse())+"</span></li>";
htmlContent += "</ul>";
return htmlContent;
}
private String formatHtml(ClientInstance instance) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String htmlContent = "";
htmlContent += "<h4 style=\"color:red;\">";
htmlContent += "超过"+instance.getFixRateSec()+"秒未收到请求,请确认CODE["+instance.getCode()+"]对应的客户端是否运行正常<br />";
htmlContent += "客户端最后一次请求时间: "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(instance.getUnixtime()*1000));
htmlContent += "</h4>";
htmlContent += "<ul>";
htmlContent += "<li>CODE: "+instance.getCode()+"</li>";
//htmlContent += "<li>IP: "+instance.getIp()+"</li>";
htmlContent += "<li>请求频率: "+instance.getFixRateSec()+"秒/次</li>";
htmlContent += "<li>请求最大等待时间: "+instance.getMaxWaitSec()+"秒</li>";
htmlContent += "<li>客户端请求时间戳: "+sdf.format(new Date(instance.getUnixtime()*1000))+"</li>";
htmlContent += "<li>服务器接收时间: "+sdf.format(new Date(instance.getLastestServerUnixtime()*1000))+"</li>";
htmlContent += "<li>最后一次收到的请求包: <span style=\"color:gray;\">"+JSON.toJSONString(instance.getLastestClientRequest())+"</span></li>";
htmlContent += "<li>累计次数(3次后不再报警):"+instance.getLostClientRequestCount()+"</li>";
htmlContent += "</ul>";
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<String, String> 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<String> getEmailToList() {
return emailToList;
}
public void setEmailToList(List<String> emailToList) {
this.emailToList = emailToList;
}
public List<String> getWeixinWxidList() {
return weixinWxidList;
}
public void setWeixinWxidList(List<String> weixinWxidList) {
this.weixinWxidList = weixinWxidList;
}
public List<String> getMobileList() {
return mobileList;
}
public void setMobileList(List<String> mobileList) {
this.mobileList = mobileList;
}
}