content: package com.sohu.cache.stats.app;
  
  import com.sohu.cache.constant.AppTopology;
  import com.sohu.cache.constant.TimeDimensionalityEnum;
  import com.sohu.cache.entity.AppCommandGroup;
  import com.sohu.cache.entity.AppCommandStats;
  import com.sohu.cache.entity.AppStats;
  import com.sohu.cache.entity.InstanceSlowLog;
  import com.sohu.cache.web.vo.AppDetailVO;
  
  import java.util.Date;
  import java.util.List;
  import java.util.Map;
  
  /**
   * app级别的查询、统计和汇总
   *
   * Created by lingguo on 14-6-26.
   */
  public interface AppStatsCenter {
      
      /**
       * 通过时间区间查询app的分钟统计数据
       *
       * @param appId
       * @param beginTime      时间，格式：yyyyMMddHHmm
       * @param endTime        时间，格式：yyyyMMddHHmm
       * @return
       */
      public List<AppStats> getAppStatsListByMinuteTime(final long appId, long beginTime, long endTime);
  
      /**
       * 通过时间区间查询app的分钟统计数据
       *
       * @param appId
       * @param beginTime      时间，格式：yyyyMMddHHmm
       * @param endTime        时间，格式：yyyyMMddHHmm
       * @return
       */
      public List<AppStats> getAppStatsList(final long appId, long beginTime, long endTime, TimeDimensionalityEnum timeDimensionalityEnum);
  
      /**
       * 查询一天中应用的命令执行次数的top5
       *
       * @param appId 应用id
       * @param begin 日期格式：yyyyMMddHHmm
       * @param end 日期格式：yyyyMMddHHmm
       * @return
       */
      public List<AppCommandStats> getTop5AppCommandStatsList(final long appId, long begin, long end);
  
      /**
       * 查询一天中应用的命令执行次数的top5
       *
       * @param appId 应用id
       * @param begin 日期格式：yyyyMMddHHmm
       * @param end 日期格式：yyyyMMddHHmm
       * @return
       */
      public List<AppCommandStats> getTopLimitAppCommandStatsList(final long appId, long begin, long end, int limit);
  
      /**
       * 查询应用的配置和节点信息
       *
       * @param appId
       * @return
       */
      public Map<AppTopology, Object> queryAppTopology(final long appId);
      
      
      /**
       * 查询应用指定时间段，指定命令名的结果集合
       * 
       * @param appId 应用id
       * @param beginTime 时间，格式：yyyyMMddHHmm
       * @param endTime 时间，格式：yyyyMMddHHmm
       * @param commandName 命令名
       * @return
       */
      public List<AppCommandStats> getCommandStatsListV2(long appId, long beginTime, long endTime, TimeDimensionalityEnum timeDimensionalityEnum, String commandName);
      
      /**
       * 查询应用指定时间段，指定命令名的结果集合
       * 
       * @param appId 应用id
       * @param beginTime 时间，格式：yyyyMMddHHmm
       * @param endTime 时间，格式：yyyyMMddHHmm
       * @param commandName 命令名
       * @return
       */
      public List<AppCommandStats> getCommandStatsList(long appId, long beginTime, long endTime, String commandName);
  
      /**
       * 查询应用指定时间段，指定命令名的结果集合
       *
       * @param appId 应用id
       * @param beginTime 时间，格式：yyyyMMddHHmm
       * @param endTime 时间，格式：yyyyMMddHHmm
       * @return
       */
      public List<AppCommandStats> getCommandStatsList(long appId, long beginTime, long endTime);
      
      /**
       * 查询应用指定时间段，指定命令名的结果集合
       *
       * @param appId 应用id
       * @param beginTime 时间，格式：yyyyMMddHHmm
       * @param endTime 时间，格式：yyyyMMddHHmm
       * @return
       */
      public List<AppCommandStats> getCommandStatsListV2(long appId, long beginTime, long endTime, TimeDimensionalityEnum timeDimensionalityEnum);
  
      /**
       * 查询应用指定命令的峰值
       * 
       * @param appId 应用id
       * @param beginTime 时间，格式：yyyyMMddHHmm
       * @param endTime 时间，格式：yyyyMMddHHmm
       * @param commandName 命令名
       * @return
       */
      public AppCommandStats getCommandClimax(long appId, Long beginTime, Long endTime, String commandName);
  
      /**
       * 获取应用详细信息
       * 
       * @param appId
       * @return
       */
      public AppDetailVO getAppDetail(long appId);
      
      /**
       * 获取应用命令调用次数分布
       * @param appId
       * @param beginTime
       * @param endTime
       * @return
       */
      public List<AppCommandGroup> getAppCommandGroup(long appId, Long beginTime, Long endTime);
  
      /**
       * 在appId级别执行命令
       *
       * @param appId
       * @param command
       * @return
       */
      public String executeCommand(long appId, String command);
  
  
      /**
       * 按照appId获取实例所有慢查询日志
       * @param appId
       * @param startDate
       * @param endDate
       * @return
       */
      public List<InstanceSlowLog> getInstanceSlowLogByAppId(long appId, Date startDate, Date endDate);
  
      /**
       * 按照appId获取每个实例慢查询个数
       * @param appId
       * @param startDate
       * @param endDate
       * @return
       */
      public Map<String, Long> getInstanceSlowLogCountMapByAppId(Long appId, Date startDate, Date endDate);
      
  }
  