use of org.elasticsearch.search.aggregations.metrics.cardinality.Cardinality in project graylog2-server by Graylog2.
the class FieldHistogramResult method getResults.
@Override
public Map<Long, Map<String, Number>> getResults() {
if (result.getBuckets().isEmpty()) {
return Collections.emptyMap();
}
final Map<Long, Map<String, Number>> results = Maps.newTreeMap();
for (Histogram.Bucket b : result.getBuckets()) {
final ImmutableMap.Builder<String, Number> resultMap = ImmutableMap.builder();
resultMap.put("total_count", b.getDocCount());
final Stats stats = b.getAggregations().get(Searches.AGG_STATS);
resultMap.put("count", stats.getCount());
resultMap.put("min", stats.getMin());
resultMap.put("max", stats.getMax());
resultMap.put("total", stats.getSum());
resultMap.put("mean", stats.getAvg());
// cardinality is only calculated if it was explicitly requested, so this might be null
final Cardinality cardinality = b.getAggregations().get(Searches.AGG_CARDINALITY);
resultMap.put("cardinality", cardinality == null ? 0 : cardinality.getValue());
final DateTime keyAsDate = (DateTime) b.getKey();
final long timestamp = keyAsDate.getMillis() / 1000L;
results.put(timestamp, resultMap.build());
}
final long minTimestamp = Collections.min(results.keySet());
final long maxTimestamp = Collections.max(results.keySet());
final MutableDateTime currentTime = new MutableDateTime(minTimestamp, DateTimeZone.UTC);
while (currentTime.getMillis() < maxTimestamp) {
final Map<String, Number> entry = results.get(currentTime.getMillis());
// advance timestamp by the interval's seconds value
currentTime.add(interval.getPeriod());
if (entry == null) {
// synthesize a 0 value for this timestamp
results.put(currentTime.getMillis(), EMPTY_RESULT);
}
}
return results;
}
Aggregations