/** * Once we call this method, all MetricDatums added to the scope will be enqueued to the publisher runnable. * We enqueue MetricDatumWithKey because the publisher will aggregate similar metrics (i.e. MetricDatum with the * same metricName) in the background thread. Hence aggregation using MetricDatumWithKey will be especially useful * when aggregating across multiple MetricScopes. */ @Override public void end() { super.end(); final List<MetricDatumWithKey<CloudWatchMetricKey>> dataWithKeys = data.values().stream() .map(metricDatum -> metricDatum.toBuilder().dimensions(getDimensions()).build()) .map(metricDatum -> new MetricDatumWithKey<>(new CloudWatchMetricKey(metricDatum), metricDatum)) .collect(Collectors.toList()); publisher.enqueue(dataWithKeys); }
@Override @SafeVarargs public final Builder metricData(Consumer<MetricDatum.Builder>... metricData) { metricData(Stream.of(metricData).map(c -> MetricDatum.builder().applyMutation(c).build()) .collect(Collectors.toList())); return this; }
final MetricDatum metricDatum; if (datum == null) { metricDatum = MetricDatum.builder().metricName(name).unit(unit) .statisticValues( StatisticSet.builder().maximum(value).minimum(value).sampleCount(1.0).sum(value).build()) .build(); } else { if (!datum.unit().equals(unit)) { .sum(oldStatisticSet.sum() + value).build(); metricDatum = datum.toBuilder().statisticValues(statisticSet).build();
final MetricDatum metricDatum; if (datum == null) { metricDatum = MetricDatum.builder().metricName(name).unit(unit) .statisticValues( StatisticSet.builder().maximum(value).minimum(value).sampleCount(1.0).sum(value).build()) .build(); } else { if (!datum.unit().equals(unit)) { .sum(oldStatisticSet.sum() + value).build(); metricDatum = datum.toBuilder().statisticValues(statisticSet).build();
/** * <p> * The statistical values for the metric. * </p> * This is a convenience that creates an instance of the {@link StatisticSet.Builder} avoiding the need to * create one manually via {@link StatisticSet#builder()}. * * When the {@link Consumer} completes, {@link StatisticSet.Builder#build()} is called immediately and its * result is passed to {@link #statisticValues(StatisticSet)}. * * @param statisticValues * a consumer that will call methods on {@link StatisticSet.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #statisticValues(StatisticSet) */ default Builder statisticValues(Consumer<StatisticSet.Builder> statisticValues) { return statisticValues(StatisticSet.builder().applyMutation(statisticValues).build()); }
/** * <p> * The statistical values for the metric. * </p> * This is a convenience that creates an instance of the {@link StatisticSet.Builder} avoiding the need to * create one manually via {@link StatisticSet#builder()}. * * When the {@link Consumer} completes, {@link StatisticSet.Builder#build()} is called immediately and its * result is passed to {@link #statisticValues(StatisticSet)}. * * @param statisticValues * a consumer that will call methods on {@link StatisticSet.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #statisticValues(StatisticSet) */ default Builder statisticValues(Consumer<StatisticSet.Builder> statisticValues) { return statisticValues(StatisticSet.builder().applyMutation(statisticValues).build()); }
private void accumulate(MetricDatumWithKey<KeyType> metricDatumWithKey, MetricDatum newDatum) { MetricDatum oldDatum = metricDatumWithKey.datum; if (!oldDatum.unit().equals(newDatum.unit())) { throw new IllegalArgumentException("Unit mismatch for datum named " + oldDatum.metricName()); } StatisticSet oldStats = oldDatum.statisticValues(); StatisticSet newStats = newDatum.statisticValues(); StatisticSet statisticSet = oldStats.toBuilder().sum(oldStats.sum() + newStats.sum()) .minimum(Math.min(oldStats.minimum(), newStats.minimum())) .maximum(Math.max(oldStats.maximum(), newStats.maximum())) .sampleCount(oldStats.sampleCount() + newStats.sampleCount()).build(); MetricDatum datum = oldDatum.toBuilder().statisticValues(statisticSet).build(); metricDatumWithKey.datum(datum); } }
/** * Once we call this method, all MetricDatums added to the scope will be enqueued to the publisher runnable. * We enqueue MetricDatumWithKey because the publisher will aggregate similar metrics (i.e. MetricDatum with the * same metricName) in the background thread. Hence aggregation using MetricDatumWithKey will be especially useful * when aggregating across multiple MetricScopes. */ @Override public void end() { super.end(); final List<MetricDatumWithKey<CloudWatchMetricKey>> dataWithKeys = data.values().stream() .map(metricDatum -> metricDatum.toBuilder().dimensions(getDimensions()).build()) .map(metricDatum -> new MetricDatumWithKey<>(new CloudWatchMetricKey(metricDatum), metricDatum)) .collect(Collectors.toList()); publisher.enqueue(dataWithKeys); }
private void accumulate(MetricDatumWithKey<KeyType> metricDatumWithKey, MetricDatum newDatum) { MetricDatum oldDatum = metricDatumWithKey.datum; if (!oldDatum.unit().equals(newDatum.unit())) { throw new IllegalArgumentException("Unit mismatch for datum named " + oldDatum.metricName()); } StatisticSet oldStats = oldDatum.statisticValues(); StatisticSet newStats = newDatum.statisticValues(); StatisticSet statisticSet = oldStats.toBuilder().sum(oldStats.sum() + newStats.sum()) .minimum(Math.min(oldStats.minimum(), newStats.minimum())) .maximum(Math.max(oldStats.maximum(), newStats.maximum())) .sampleCount(oldStats.sampleCount() + newStats.sampleCount()).build(); MetricDatum datum = oldDatum.toBuilder().statisticValues(statisticSet).build(); metricDatumWithKey.datum(datum); } }
@Override @SafeVarargs public final Builder metricData(Consumer<MetricDatum.Builder>... metricData) { metricData(Stream.of(metricData).map(c -> MetricDatum.builder().applyMutation(c).build()) .collect(Collectors.toList())); return this; }