package com.sohu.cache.entity; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Date; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; /** * 实例基准统计 * Created by zhangyijun on 15/6/17. */ public class StandardStats { private final Logger logger = LoggerFactory.getLogger(this.getClass()); /** * id */ private long id; /** * 实例IP */ private String ip; /** * 实例端口号/hostId */ private int port; /** * 实例类型 */ private String dbType; /** * 收集时间:格式yyyyMMddHHmm */ private long collectTime; /** * 实例收集的json数据 */ private String infoJson; /** * 与上一次收集差异的json数据 */ private String diffJson; /** * infoJson的Map输出 */ private Map<String, Object> infoMap; /** * diffJson的Map输出 */ private Map<String, Object> diffMap; private Date createdTime; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getDbType() { return dbType; } public void setDbType(String dbType) { this.dbType = dbType; } public long getCollectTime() { return collectTime; } public void setCollectTime(long collectTime) { this.collectTime = collectTime; } public String getInfoJson() { return infoJson; } public void setInfoJson(String infoJson) { this.infoJson = infoJson; } public String getDiffJson() { return diffJson; } public void setDiffJson(String diffJson) { this.diffJson = diffJson; } public StandardStats(String diffJson) { this.diffJson = diffJson; } public StandardStats() { } public Map<String, Object> getInfoMap() { if (infoMap != null) { return infoMap; } else { if (StringUtils.isNotBlank(infoJson)) { JSONObject jsonObject; try { jsonObject = JSONObject.fromObject(infoJson); Map<String, Object> map = transferMapByJson(jsonObject); infoMap = map; } catch (Exception e) { logger.error(e.getMessage()); } } } return infoMap; } public void setInfoMap(Map<String, Object> infoMap) { if (infoJson == null) { JSONObject jsonObject; try { jsonObject = JSONObject.fromObject(infoMap); infoJson = jsonObject.toString(); } catch (Exception e) { logger.error(e.getMessage()); } } this.infoMap = infoMap; } public Map<String, Object> getDiffMap() { if (diffMap != null) { return diffMap; } else { if (StringUtils.isNotBlank(diffJson)) { JSONObject jsonObject; try { jsonObject = JSONObject.fromObject(diffJson); Map<String, Object> map = transferMapByJson(jsonObject); diffMap = map; } catch (Exception e) { logger.error(e.getMessage()); } } } return diffMap; } /** * 递归转换JsonObject * @param jsonObject * @return */ private Map<String, Object> transferMapByJson(JSONObject jsonObject) { Map<String, Object> map = new LinkedHashMap<String, Object>(); for (Iterator keys = jsonObject.keys(); keys.hasNext(); ) { String key = String.valueOf(keys.next()); Object value = jsonObject.get(key); if(value instanceof JSONObject){ JSONObject subJsonObject = (JSONObject) value; Map<String, Object> subMap = transferMapByJson(subJsonObject); map.put(key,subMap); }else{ map.put(key, value); } } return map; } public void setDiffMap(Map<String, Object> diffMap) { if (diffJson == null) { JSONObject jsonObject; try { jsonObject = JSONObject.fromObject(diffMap); diffJson = jsonObject.toString(); } catch (Exception e) { logger.error(e.getMessage()); } } this.diffMap = diffMap; } public Date getCreatedTime() { return createdTime; } public void setCreatedTime(Date createdTime) { this.createdTime = createdTime; } }