package com.jthink.skyeye.web.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jthink.skyeye.base.constant.Constants;
import com.jthink.skyeye.web.message.BaseMessage;
import com.jthink.skyeye.web.message.MessageCode;
import com.jthink.skyeye.web.message.StatusCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* JThink@JThink
*
* @author JThink
* @version 0.0.1
* @desc 接口返回结果工具类
* @date 2016-10-09 09:19:47
*/
public class ResponseUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(ResponseUtil.class);
public static boolean IS_SIGN = true;
/**
* 构造返回message
*
* @param msg
* @param res
* @param sta
*/
public static void buildResMsg(BaseMessage msg, MessageCode res, StatusCode sta) {
if (null != msg) {
msg.setResCode(res.getCode());
msg.setResMsg(res.getMsg());
msg.setStatCode(sta.getCode());
msg.setStatMsg(sta.getMsg());
}
}
/**
* 构造返回message
*
* @param msg
* @param res
* @param sta
* @param appendMessage
*/
public static void buildResMsg(BaseMessage msg, MessageCode res, StatusCode sta, String appendMessage) {
if (null != msg) {
msg.setResCode(res.getCode());
msg.setResMsg(res.getMsg());
msg.setStatCode(sta.getCode());
msg.setStatMsg(sta.getMsg() + Constants.COMMA + appendMessage);
}
}
/**
* 格式化日志记录数据
*
* @param logData
* @return
*/
public static Object formatESLogData(String logData) {
JSONObject rtn = new JSONObject();
JSONObject json = JSON.parseObject(logData);
JSONObject hits = json.getJSONObject("hits");
Iterator<Object> iterator = hits.getJSONArray("hits").iterator();
Integer count = 0;
List<String> logs = new ArrayList<>();
StringBuffer sb;
JSONObject log;
while (iterator.hasNext()) {
sb = new StringBuffer();
log = ((JSONObject) iterator.next()).getJSONObject("_source");
if(!isEmpty(log.getString("day")) && !isEmpty(log.getString("time"))){
sb = sb.append(log.getString("day")).append(" ").append(log.getString("time"))
.append(Constants.SEMICOLON);
}else if(!isEmpty(log.getString("day"))){
sb = sb.append(log.getString("day")).append(Constants.SEMICOLON);
}else if(!isEmpty(log.getString("time"))){
sb = sb.append(log.getString("time")).append(Constants.SEMICOLON);
}
if(!isEmpty(log.getString("app"))){
sb.append(log.getString("app")).append(Constants.SEMICOLON);
}
if(!isEmpty(log.getString("host"))){
sb.append(log.getString("host")).append(Constants.SEMICOLON);
}
if(!isEmpty(log.getString("thread"))){
sb.append(log.getString("thread")).append(Constants.SEMICOLON);
}
if(!isEmpty(log.getString("level"))){
sb.append(log.getString("level")).append(Constants.SEMICOLON);
}
if(!isEmpty(log.getString("pack")) && !isEmpty(log.getString("clazz")) && !isEmpty(log.getString("line"))){
sb.append(log.getString("pack")).append(Constants.POINT)
.append(log.getString("clazz")).append(":")
.append(log.getString("line")).append(Constants.SEMICOLON);
}else if(!isEmpty(log.getString("pack")) && !isEmpty(log.getString("clazz"))){
sb.append(log.getString("pack")).append(Constants.POINT).append(log.getString("clazz"))
.append(Constants.SEMICOLON);
}else if(!isEmpty(log.getString("clazz")) && !isEmpty(log.getString("line"))){
sb.append(log.getString("clazz")).append(":")
.append(log.getString("line")).append(Constants.SEMICOLON);
}else if(!isEmpty(log.getString("pack"))){
sb.append(log.getString("pack")).append(Constants.SEMICOLON);
}else if(!isEmpty(log.getString("clazz"))){
sb.append(log.getString("clazz")).append(Constants.SEMICOLON);
}else if(!isEmpty(log.getString("line"))){
sb.append(log.getString("line")).append(Constants.SEMICOLON);
}
if(!isEmpty(log.getString("message_max"))){
sb.append(log.getString("message_max")).append(Constants.SEMICOLON);
}
logs.add(sb.toString());
count++;
}
rtn.put("total", hits.getString("total"));
rtn.put("resCount", count);
rtn.put("logs", hits.getJSONArray("hits"));
return rtn;
}
/**
* 通过code获取制定枚举
*
* @param code
* @return
*/
public static StatusCode getStatusCode(String code) {
StatusCode[] statusCodes = StatusCode.values();
for (StatusCode status : statusCodes) {
if (status.getCode().equals(code)) {
return status;
}
}
return null;
}
/**
* 生成返回验签
* @param msg
* @param privateKey
* @return
*/
// public static String getResponseSign(BaseMessage msg, String privateKey) {
// List<String> keys = new ArrayList<>();
// Map<String, String> map = new HashMap<String, String>();
//
// // 返回必填项
// keys.add(Constants.RES_CODE);
// map.put(Constants.RES_CODE, msg.getResCode());
// keys.add(Constants.RES_MSG);
// map.put(Constants.RES_MSG,msg.getResMsg());
// keys.add(Constants.STAT_CODE);
// map.put(Constants.STAT_CODE, msg.getStatCode());
// keys.add(Constants.STAT_MSG);
// map.put(Constants.STAT_MSG,msg.getStatMsg());
//
// if (null != msg.getData()) {
// keys.add(Constants.DATA);
// map.put(Constants.DATA, JSONUtil.toJson(msg.getData()));
// }
//
// Collections.sort(keys);
//
// StringBuilder buf = new StringBuilder();
// for (String key : keys) {
// if (IS_SIGN) {
// buf.append(key);
// }
// buf.append(getValue(map, key, GlobalConstants.EMPTY_STR));
// }
// buf.append(privateKey);
// return SignUtil.md5Upper(buf.toString());
// }
/**
*
* @param map
* @param key
* @param defaultValue
* @return
*/
// private static String getValue(Map<String, String> map, String key, String defaultValue) {
// String value = map.get(key);
// return StringUtil.isBlank(value) ? defaultValue : value;
// }
public static boolean isEmpty(Object str) {
return (str == null || "".equals(str));
}
}