Number aggregateValue = base.getSingleDataValue(); Number result = TimelineMetricCalculator.sum(incomingValue, aggregateValue); Object prevMetric = state.get(PREV_METRIC_STATE_KEY); if (prevMetric instanceof TimelineMetric) { result = TimelineMetricCalculator.sub(result, ((TimelineMetric) prevMetric).getSingleDataValue());
/** * Keep the greater value of incoming and base. Stateless operation. * * @param incoming Metric a * @param base Metric b * @param state Operation state (not used) * @return the greater value of a and b */ @Override public TimelineMetric exec(TimelineMetric incoming, TimelineMetric base, Map<Object, Object> state) { if (base == null) { return incoming; } Number incomingValue = incoming.getSingleDataValue(); Number aggregateValue = base.getSingleDataValue(); if (aggregateValue == null) { aggregateValue = Long.MIN_VALUE; } if (TimelineMetricCalculator.compare(incomingValue, aggregateValue) > 0) { base.addValue(incoming.getSingleDataTimestamp(), incomingValue); } return base; } },