content: package com.sohu.tv.cache.client.common.jmx;
  
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  import com.sohu.tv.jedis.stat.data.UsefulDataCollector;
  import com.sohu.tv.jedis.stat.model.CostTimeDetailStatKey;
  import com.sohu.tv.jedis.stat.model.ExceptionModel;
  import com.sohu.tv.jedis.stat.model.ValueLengthModel;
  import com.sohu.tv.jedis.stat.utils.AtomicLongMap;
  
  import java.util.*;
  import java.util.Map.Entry;
  
  /**
   * 监控cachecloud数据收集
   * @author leifu
   * @Date 2015年1月28日
   * @Time 下午2:02:04
   */
  public class CachecloudDataWatcher implements CachecloudDataWatcherMBean {
  	private final Logger logger = LoggerFactory.getLogger(this.getClass());
  
  	@Override
  	public Map<String, Map<Integer, Long>> getCostTimeMap() {
  		Map<CostTimeDetailStatKey, AtomicLongMap<Integer>> map = UsefulDataCollector.getDataCostTimeMapAll();
  		if (map == null || map.isEmpty()) {
  			return Collections.emptyMap();
  		}
  
  		Map<String, Map<Integer, Long>> result = new HashMap<String, Map<Integer, Long>>();
  		for (Entry<CostTimeDetailStatKey, AtomicLongMap<Integer>> entry : map.entrySet()) {
  			CostTimeDetailStatKey costTimeDetailStatKey = entry.getKey();
  			String key = costTimeDetailStatKey.getUiqueKey();
  			result.put(key, entry.getValue().asMap());
  		}
  
  		return result;
  	}
  	
  	@Override
      public Map<String, Long> getCostTimeGroupByMinute() {
          Map<CostTimeDetailStatKey, AtomicLongMap<Integer>> map = UsefulDataCollector.getDataCostTimeMapAll();
          if (map == null || map.isEmpty()) {
              return Collections.emptyMap();
          }
          Map<String, Long> result = new HashMap<String, Long>();
          for (Entry<CostTimeDetailStatKey, AtomicLongMap<Integer>> entry : map.entrySet()) {
              String minute = entry.getKey().getCurrentMinute();
              Long totalCount = 0L;
              for (Long count : entry.getValue().asMap().values()) {
                  totalCount += count;
              }
              if (result.containsKey(minute)) {
                  result.put(minute, result.get(minute) + totalCount);
              } else {
                  result.put(minute, totalCount);
              }
          }
          return result;
      }
  	
  	@Override
      public Map<String, Map<String, Long>> getCostTimeGroupByMinuteAndCommand() {
          Map<CostTimeDetailStatKey, AtomicLongMap<Integer>> map = UsefulDataCollector.getDataCostTimeMapAll();
          if (map == null || map.isEmpty()) {
              return Collections.emptyMap();
          }
          // 20150130113700_127.0.0.1:6381_del={0=4, 1=4}
          Map<String, Map<String, Long>> result = new HashMap<String, Map<String, Long>>();
          for (Entry<CostTimeDetailStatKey, AtomicLongMap<Integer>> entry : map.entrySet()) {
              String minute = entry.getKey().getCurrentMinute();
              String command = entry.getKey().getCommand();
              Long totalCount = 0L;
              for (Long count : entry.getValue().asMap().values()) {
                  totalCount += count;
              }
              if (result.containsKey(minute)) {
                  Map<String, Long> tempMap = result.get(minute);
                  if (tempMap.containsKey(command)) {
                      tempMap.put(command, tempMap.get(command) + totalCount);
                  } else {
                      tempMap.put(command, totalCount);
                  }
                  result.put(minute, tempMap);
              } else {
                  Map<String, Long> tempMap = new HashMap<String, Long>();
                  tempMap.put(command, totalCount);
                  result.put(minute, tempMap);
              }
          }
          return result;
      }
  
  	@Override
  	public Map<String, Map<String, Long>> getExceptionMap() {
  		Map<String, AtomicLongMap<ExceptionModel>> map = UsefulDataCollector.getDataExceptionMapAll();
  		if (map == null || map.isEmpty()) {
  			return Collections.emptyMap();
  		}
  
  		Map<String, Map<String, Long>> result = new HashMap<String, Map<String, Long>>();
  		for (Entry<String, AtomicLongMap<ExceptionModel>> entry : map.entrySet()) {
  			String key = entry.getKey();
  			Map<String, Long> tempMap = new HashMap<String, Long>();
  			for (Entry<ExceptionModel, Long> exceptionEntry : entry.getValue().asMap().entrySet()) {
  				tempMap.put(exceptionEntry.getKey().getUniqKey(), exceptionEntry.getValue());
  			}
  			result.put(key, tempMap);
  		}
  		return result;
  	}
  
  	@Override
  	public Map<String, Map<String, Long>> getValueLengthMap() {
  		Map<String, AtomicLongMap<ValueLengthModel>> map = UsefulDataCollector
  				.getDataValueLengthDistributeMapAll();
  		if (map == null || map.isEmpty()) {
  			return Collections.emptyMap();
  		}
  
  		Map<String, Map<String, Long>> result = new HashMap<String, Map<String, Long>>();
  		for (Entry<String, AtomicLongMap<ValueLengthModel>> entry : map.entrySet()) {
  			String key = entry.getKey();
  			Map<String, Long> tempMap = new HashMap<String, Long>();
  			for (Entry<ValueLengthModel, Long> valueLengthEntry : entry.getValue().asMap().entrySet()) {
  				tempMap.put(valueLengthEntry.getKey().getUniqKey(), valueLengthEntry.getValue());
  			}
  			result.put(key, tempMap);
  		}
  		return result;
  	}
  
      @Override
      public Map<String, Map<Long, Long>> getCollectionCostTimeMap() {
          Map<String, AtomicLongMap<Long>> map = UsefulDataCollector.getCollectionCostTimeMapAll();
          if (map == null || map.isEmpty()) {
              return Collections.emptyMap();
          }
          Map<String, Map<Long, Long>> result = new HashMap<String, Map<Long, Long>>();
          for (Entry<String, AtomicLongMap<Long>> entry : map.entrySet()) {
              String key = entry.getKey();
              result.put(key, entry.getValue().asMap());
          }
          return result;
      }
  
  
  
  }
  