in java/ws-server/src/main/java/com/epam/deltix/tbwg/webapp/services/grafana/MultiAggregator.java [67:97]
public boolean nextInterval(MessageSource<InstrumentMessage> messageSource, IntervalEntry intervalEntry) {
intervalEntry.reuse();
if (next()) {
intervalEntry.setTimestamp(currentLast);
rawValues.clear();
do {
if (messageSource.getMessage() != null && messageSource.getMessage().getTimeStampMs() != Long.MIN_VALUE) {
RawMessage rawMessage = (RawMessage) messageSource.getMessage();
if (rawMessage.getTimeStampMs() >= currentFirst && rawMessage.getTimeStampMs() < currentLast) {
decoder.decode(rawMessage, rawValues);
} else if (rawMessage.getTimeStampMs() >= currentLast) {
break;
}
}
if (!messageSource.next()) {
cursorFinished = true;
}
} while (!cursorFinished && messageSource.getMessage().getTimeStampMs() < currentLast);
rawValues.forEach((field, values) -> {
if (!values.getList().isEmpty()) {
List<Aggregation> aggs = aggregations.get(field);
for (Aggregation aggregation : aggs) {
intervalEntry.put(fieldName(field, aggregation), aggregation.aggregate(values.getList()));
}
}
});
return true;
} else {
return false;
}
}