package com.hqyg.disjob.monitor.rms;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import com.hqyg.disjob.common.util.LocalHost;
import com.hqyg.disjob.monitor.rms.pojo.RMSMonitorInfo;
import com.hqyg.disjob.monitor.rms.util.MD5Util;
import com.google.gson.JsonObject;
public class SendInfo implements Serializable{
private static final long serialVersionUID = 1L;
private static final String dateformat = "yyyy-MM-dd HH:mm:ss";
private static final int defaultEncode = 0;
private JsonObject result;
private JsonObject data;
private JsonObject content;
private String token;
private int selfTest = 0;
public SendInfo() {
}
public SendInfo(String pointCode, String errorCode, String content, String token) {
this(pointCode, errorCode, content, token, false);
}
public SendInfo(String pointCode, String errorCode, String content, String token, boolean selfTest) {
setPointCode(pointCode);
setErrorCode(errorCode);
setContent(content);
setToken(token);
setSelfTest(selfTest);
}
public SendInfo(RMSMonitorInfo monitorInfo, String message) {
setPointCode(monitorInfo.getPointCode());
setErrorCode(monitorInfo.getErrorCode());
setContent("[" + monitorInfo.getDescription() + "] " + message);
setToken(monitorInfo.getToken());
setSelfTest(monitorInfo.isTest());
}
private void setSelfTest(boolean selfTest) {
if(selfTest){
this.selfTest = 1;
}else{
this.selfTest = 0;
}
data.addProperty("is_test", this.selfTest);
}
{
result = new JsonObject();
data = new JsonObject();
content = new JsonObject();
result.add("data", data);
data.add("content", content);
LocalHost localhost = new LocalHost();
data.addProperty("level", 2);
data.addProperty("server_ip", localhost.getIp());
data.addProperty("server_name", localhost.getHostName());
data.addProperty("notice_time",
new SimpleDateFormat(dateformat).format(new GregorianCalendar().getTime()));
}
public void setNoticeTime(Date noticetime) {
data.addProperty("notice_time", new SimpleDateFormat(dateformat).format(noticetime));
}
public void setServerIP(String serverip) {
data.addProperty("server_ip", serverip);
}
public void setServerName(String servername) {
data.addProperty("server_name", servername);
}
public void setPointCode(String pointcode) {
data.addProperty("point_code", pointcode);
}
public void setErrorCode(String errorcode) {
data.addProperty("error_code", errorcode);
}
public void setContent(String content) {
this.content.addProperty("info", content);
}
private static String escapeNonAscii(String str) {
StringBuilder retStr = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
int cp = Character.codePointAt(str, i);
int charCount = Character.charCount(cp);
if (charCount > 1) {
i += charCount - 1; // 2.
if (i >= str.length()) {
throw new IllegalArgumentException("truncated unexpectedly");
}
}
if (cp < 128) {
retStr.appendCodePoint(cp);
} else {
retStr.append(String.format("\\u%x", cp));
}
}
return retStr.toString();
}
public void setToken(String token) {
this.token = token;
}
public String get() {
String tokenAndData = escapeNonAscii(new StringBuilder().append(this.token).append(data.toString()).toString());
String token = MD5Util.textToMD5L32(tokenAndData);
result.addProperty("token", token);
result.addProperty("encode", defaultEncode);
return result.toString();
}
}