Class AggregatorHandle<T extends PointData,U extends ExemplarData>

java.lang.Object
io.opentelemetry.sdk.metrics.internal.aggregator.AggregatorHandle<T,U>
Direct Known Subclasses:
DoubleBase2ExponentialHistogramAggregator.Handle, DoubleExplicitBucketHistogramAggregator.Handle, DoubleLastValueAggregator.Handle, DoubleSumAggregator.Handle, LongLastValueAggregator.Handle, LongSumAggregator.Handle

@ThreadSafe public abstract class AggregatorHandle<T extends PointData,U extends ExemplarData> extends Object
Aggregator represents the abstract class that is used for synchronous instruments. It must be thread-safe and avoid locking when possible, because values are recorded synchronously on the calling thread.

An AggregatorHandle must be created for every unique Attributes recorded.

This class is internal and is hence not for public use. Its APIs are unstable and can change at any time.

  • Field Details

    • exemplarReservoir

      private final ExemplarReservoir<U extends ExemplarData> exemplarReservoir
    • valuesRecorded

      private volatile boolean valuesRecorded
  • Constructor Details

  • Method Details

    • aggregateThenMaybeReset

      public final T aggregateThenMaybeReset(long startEpochNanos, long epochNanos, Attributes attributes, boolean reset)
      Returns the current value into as AggregatorHandle. If reset is true, resets the current value in this Aggregator.
    • doAggregateThenMaybeReset

      protected abstract T doAggregateThenMaybeReset(long startEpochNanos, long epochNanos, Attributes attributes, List<U> exemplars, boolean reset)
    • recordLong

      public final void recordLong(long value, Attributes attributes, Context context)
    • recordLong

      public final void recordLong(long value)
      Updates the current aggregator with a newly recorded long value.

      Visible for Testing

      Parameters:
      value - the new long value to be added.
    • doRecordLong

      protected void doRecordLong(long value)
      Concrete Aggregator instances should implement this method in order support recordings of long values.
    • recordDouble

      public final void recordDouble(double value, Attributes attributes, Context context)
    • recordDouble

      public final void recordDouble(double value)
      Updates the current aggregator with a newly recorded double value.

      Visible for Testing

      Parameters:
      value - the new double value to be added.
    • doRecordDouble

      protected void doRecordDouble(double value)
      Concrete Aggregator instances should implement this method in order support recordings of double values.
    • hasRecordedValues

      public boolean hasRecordedValues()
      Checks whether this handle has values recorded.
      Returns:
      True if values has been recorded to it