}
}
@Override
public EventReport queryHourlyReport(String domain, Date start, Date end) {
EventReportMerger merger = new EventReportMerger(new EventReport(domain));
long startTime = start.getTime();
long endTime = end.getTime();
String name = EventAnalyzer.ID;
for (; startTime < endTime; startTime = startTime + TimeHelper.ONE_HOUR) {
List<HourlyReport> reports = null;
try {
reports = m_hourlyReportDao.findAllByDomainNamePeriod(new Date(startTime), domain, name,
HourlyReportEntity.READSET_FULL);
} catch (DalException e) {
Cat.logError(e);
}
if (reports != null) {
for (HourlyReport report : reports) {
String xml = report.getContent();
try {
if (xml != null && xml.length() > 0) {// for old xml storage
EventReport reportModel = com.dianping.cat.consumer.event.model.transform.DefaultSaxParser
.parse(xml);
reportModel.accept(merger);
} else {// for new binary storage, binary is same to report id
EventReport reportModel = queryFromHourlyBinary(report.getId(), domain);
reportModel.accept(merger);
}
} catch (DalNotFoundException e) {
//ignore
} catch (Exception e) {
Cat.logError(e);
}
}
}
}
EventReport eventReport = merger.getEventReport();
eventReport.setStartTime(start);
eventReport.setEndTime(new Date(end.getTime() - 1));
Set<String> domains = queryAllDomainNames(start, end, EventAnalyzer.ID);
eventReport.getDomainNames().addAll(domains);
return eventReport;
}