@Override public Histogram loadHistogram(String detailsId, Date from, Date to, String instance, String type, String lastGroupId){ List<GroupEntity> allGroups = findGroupsInRange(from, to, instance, type); List<GroupEntity> tailGroups = tailAfter(allGroups, lastGroupId); List<GroupEntity> groups = limitHistogramSize(tailGroups); lastGroupId = (groups.size() == tailGroups.size()) ? null : groups.get(HISTOGRAM_PAGE-1).getId(); List<String> groupIds = extractGroupIds(groups); List<StatEntity> stats = loadGroupStats(groupIds, detailsId, true);//topLevel only Histogram result = createHistogram(groups, stats); result.setId(detailsId); result.setInfo(storageInfo(null)); result.setLastGroupId(lastGroupId); result.setStartDate(allGroups.stream().map(GroupEntity::getStartDate).min(Date::compareTo).orElseGet(() -> new Date())); result.setEndDate(allGroups.stream().map(GroupEntity::getEndDate).max(Date::compareTo).orElseGet(() -> new Date())); return result; }
private Histogram histogramForRange(String id, TimeRange range, String lastGroupId) { Histogram result; if( canSearch(range) ){ result = getStorage().loadHistogram(id, range.getFromDate(), range.getToDate(), range.getInstance(), range.getType(), lastGroupId); if( inMemoryInRange(range) && result.isLastHistogramPart() ){ Histogram current = histogramInMemory(id); if( current != null ){ result.getHistogram().addAll(current.getHistogram()); } result.setInfo("Added in-memory data. Original info: " + result.getInfo()); } } else { result = histogramInMemory(id); result.setInfo("in-memory data only. Original info: " + result.getInfo()); } result.setInfo(result.getInfo() + ", " + range.toString() ); return (result != null) ? result : new Histogram(id); }