content: package com.sohu.cache.dao;
  
  import com.sohu.cache.entity.AppCommandGroup;
  import com.sohu.cache.entity.AppCommandStats;
  import com.sohu.cache.entity.AppStats;
  import com.sohu.cache.entity.TimeDimensionality;
  
  import org.apache.ibatis.annotations.Param;
  
  import java.util.List;
  import java.util.Map;
  
  /**
   * Created by yijunzhang on 14-6-9.
   */
  public interface AppStatsDao {
  
      public static final int MINUTE_DIMENSIONALITY = 0;
  
      public static final int HOUR_DIMENSIONALITY = 1;
  
      /**
       * 插入或更新AppStats分钟统计
       */
      public void mergeMinuteAppStats(AppStats appStats);
  
      /**
       * 插入或更新AppCommandStats分钟统计
       */
      public void mergeMinuteCommandStatus(AppCommandStats commandStats);
  
      /**
       * 插入或更新AppStats小时统计
       */
      public void mergeHourAppStats(AppStats appStats);
  
      /**
       * 插入或更新AppCommandStats小时统计
       */
      public void mergeHourCommandStatus(AppCommandStats commandStats);
      
      /**
       * 按时间查询应用统计
       *
       * @param appId 应用id
       * @param td    时间维度
       * @return
       */
      public List<AppStats> getAppStatsList(@Param("appId") long appId, @Param("td") TimeDimensionality td);
  
      /**
       * 按照分钟查询应用统计
       * @param appId
       * @param beginTime
       * @param endTime
       * @return
       */
      public List<AppStats> getAppStatsByMinute(@Param("appId") long appId, @Param("beginTime") long beginTime, @Param("endTime") long endTime);
  
      /**
       * 按照小时查询应用统计
       * @param appId
       * @param beginTime
       * @param endTime
       * @return
       */
      public List<AppStats> getAppStatsByHour(@Param("appId") long appId, @Param("beginTime") long beginTime, @Param("endTime") long endTime);
  
      /**
       * 按时间查询应用命令统计
       *
       * @param appId       应用id
       * @param commandName 命令名称
       * @param td          时间维度
       * @return
       */
      public List<AppCommandStats> getAppCommandStatsList(@Param("appId") long appId, @Param("commandName") String commandName,
                                                          @Param("td") TimeDimensionality td);
  
      /**
       * 按应用命令统计
       *
       * @param appId       应用id
       * @param td          时间维度
       * @return
       */
      public List<AppCommandStats> getAppAllCommandStatsList(@Param("appId") long appId,@Param("td") TimeDimensionality td);
  
      /**
       * 
       * @param appId
       * @param beginTime
       * @param endTime
       * @param commandName
       * @return
       */
      public List<AppCommandStats> getAppCommandStatsListByMinuteWithCommand(@Param("appId") long appId, @Param("beginTime") long beginTime, @Param("endTime") long endTime, @Param("commandName") String commandName);
  
      /**
       * 
       * @param appId
       * @param beginTime
       * @param endTime
       * @param commandName
       * @return
       */
      public List<AppCommandStats> getAppCommandStatsListByHourWithCommand(@Param("appId") long appId, @Param("beginTime") long beginTime, @Param("endTime") long endTime, @Param("commandName") String commandName);
  
      /**
       * 
       * @param appId
       * @param beginTime
       * @param endTime
       * @return
       */
      public List<AppCommandStats> getAppAllCommandStatsListByMinute(@Param("appId") long appId, @Param("beginTime") long beginTime, @Param("endTime") long endTime);
  
      /**
       * 
       * @param appId
       * @param beginTime
       * @param endTime
       * @return
       */
      public List<AppCommandStats> getAppAllCommandStatsListByHour(@Param("appId") long appId, @Param("beginTime") long beginTime, @Param("endTime") long endTime);
  
      /**
       * 查询一天中应用的命令执行次数的topN
       *
       * @param appId 应用id
       * @param td    时间维度
       * @return
       */
      public List<AppCommandStats> getTopAppCommandStatsList(@Param("appId") long appId, @Param("td") TimeDimensionality td, @Param("top") int top);
  
      /**
       * 查询一段时间内，各个命令执行次数分布
       *
       * @param appId 应用id
       * @param td    时间维度
       * @return
       */
      public List<AppCommandStats> getTopAppCommandGroupSum(@Param("appId") long appId, @Param("td") TimeDimensionality td, @Param("top") int top);
      
      /**
       * 获取一定时间内命令峰值
       *
       * @param appId
       * @param commandName
       * @param td          时间维度
       * @return
       */
      public AppCommandStats getCommandClimax(@Param("appId") long appId, @Param("commandName") String commandName, @Param("td") TimeDimensionality td);
      
      public AppCommandStats getCommandClimaxCount(@Param("appId") long appId, @Param("commandName") String commandName, @Param("td") TimeDimensionality td);
      
      public AppCommandStats getCommandClimaxCreateTime(@Param("appId") long appId, @Param("commandName") String commandName, @Param("commandCount") long commandCount, @Param("td") TimeDimensionality td);
      
  
      /**
       * 获取应用命令调用次数分布
       *
       * @param appId
       * @param td    时间维度
       * @return
       */
      public List<AppCommandGroup> getAppCommandGroup(@Param("appId") long appId, @Param("td") TimeDimensionality td);
  
      /**
       * 应用分钟统计
       * @param appId
       * @param beginTime
       * @param endTime
       * @return
       */
      public Map<String, Object> getAppMinuteStat(@Param("appId") long appId, @Param("beginTime") long beginTime, @Param("endTime") long endTime);
  
      
  
  
  }
  