private ServiceReport queryHourlyReportsByDuration(
      String name, String domain, Date start, Date end) {
    long startTime = start.getTime();
    long endTime = end.getTime();
    ServiceReportMerger merger = new ServiceReportMerger(new ServiceReport(domain));

    for (; startTime < endTime; startTime = startTime + TimeHelper.ONE_HOUR) {
      Date date = new Date(startTime);
      ServiceReport reportModel =
          m_reportService.queryReport(domain, date, new Date(date.getTime() + TimeHelper.ONE_HOUR));

      reportModel.accept(merger);
    }

    ServiceReport serviceReport = merger.getServiceReport();

    serviceReport.setStartTime(start);
    serviceReport.setEndTime(end);
    return serviceReport;
  }
  private ServiceReport queryDailyReportsByDuration(String domain, Date start, Date end) {
    long startTime = start.getTime();
    long endTime = end.getTime();
    ServiceReportMerger merger = new ServiceReportMerger(new ServiceReport(domain));

    for (; startTime < endTime; startTime += TimeHelper.ONE_DAY) {
      try {
        ServiceReport reportModel =
            m_reportService.queryReport(
                domain, new Date(startTime), new Date(startTime + TimeHelper.ONE_DAY));
        reportModel.accept(merger);
      } catch (Exception e) {
        Cat.logError(e);
      }
    }
    ServiceReport serviceReport = merger.getServiceReport();

    serviceReport.setStartTime(start);
    serviceReport.setEndTime(end);
    return serviceReport;
  }