Move ExponentialHistogram data to internal package. (#4217)

* Move ExponentialHistogram data to internal package.

* scare

* drift
This commit is contained in:
Anuraag Agrawal 2022-03-04 11:57:40 +09:00 committed by GitHub
parent dc8086dfca
commit 5cbfe9d93e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 103 additions and 59 deletions

View File

@ -10,7 +10,7 @@ import io.opentelemetry.exporter.internal.marshal.MarshalerWithSize;
import io.opentelemetry.exporter.internal.marshal.Serializer;
import io.opentelemetry.proto.metrics.v1.internal.ExponentialHistogramDataPoint;
import io.opentelemetry.sdk.internal.PrimitiveLongList;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramBuckets;
import java.io.IOException;
import java.util.List;

View File

@ -10,7 +10,7 @@ import io.opentelemetry.exporter.internal.marshal.MarshalerWithSize;
import io.opentelemetry.exporter.internal.marshal.Serializer;
import io.opentelemetry.exporter.internal.otlp.KeyValueMarshaler;
import io.opentelemetry.proto.metrics.v1.internal.ExponentialHistogramDataPoint;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramPointData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramPointData;
import java.io.IOException;
import java.util.Collection;

View File

@ -10,7 +10,7 @@ import io.opentelemetry.exporter.internal.marshal.MarshalerWithSize;
import io.opentelemetry.exporter.internal.marshal.ProtoEnumInfo;
import io.opentelemetry.exporter.internal.marshal.Serializer;
import io.opentelemetry.proto.metrics.v1.internal.ExponentialHistogram;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import java.io.IOException;
/**

View File

@ -12,6 +12,7 @@ import io.opentelemetry.exporter.internal.marshal.ProtoFieldInfo;
import io.opentelemetry.exporter.internal.marshal.Serializer;
import io.opentelemetry.proto.metrics.v1.internal.Metric;
import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import java.io.IOException;
final class MetricMarshaler extends MarshalerWithSize {
@ -56,7 +57,8 @@ final class MetricMarshaler extends MarshalerWithSize {
dataField = Metric.HISTOGRAM;
break;
case EXPONENTIAL_HISTOGRAM:
dataMarshaler = ExponentialHistogramMarshaler.create(metric.getExponentialHistogramData());
dataMarshaler =
ExponentialHistogramMarshaler.create(ExponentialHistogramData.fromMetricData(metric));
dataField = Metric.EXPONENTIAL_HISTOGRAM;
}

View File

@ -47,9 +47,6 @@ import io.opentelemetry.sdk.metrics.data.DoubleHistogramPointData;
import io.opentelemetry.sdk.metrics.data.DoublePointData;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryData;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryPointData;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramData;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramPointData;
import io.opentelemetry.sdk.metrics.data.LongExemplarData;
import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.data.MetricData;
@ -57,6 +54,9 @@ import io.opentelemetry.sdk.metrics.data.PointData;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramBuckets;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramPointData;
import io.opentelemetry.sdk.resources.Resource;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

View File

@ -22,6 +22,7 @@ import io.opentelemetry.sdk.metrics.data.MetricDataType;
import io.opentelemetry.sdk.metrics.data.PointData;
import io.opentelemetry.sdk.metrics.data.SumData;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import io.prometheus.client.Collector;
import io.prometheus.client.Collector.MetricFamilySamples;
import io.prometheus.client.Collector.MetricFamilySamples.Sample;
@ -294,7 +295,7 @@ final class MetricAdapter {
case HISTOGRAM:
return metricData.getDoubleHistogramData().getPoints();
case EXPONENTIAL_HISTOGRAM:
return metricData.getExponentialHistogramData().getPoints();
return ExponentialHistogramData.fromMetricData(metricData).getPoints();
}
return Collections.emptyList();
}

View File

@ -6,8 +6,8 @@
package io.opentelemetry.sdk.testing.assertj;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramData;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramPointData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramPointData;
import org.assertj.core.api.AbstractAssert;
import org.assertj.core.api.AbstractIterableAssert;
import org.assertj.core.api.Assertions;

View File

@ -5,7 +5,7 @@
package io.opentelemetry.sdk.testing.assertj;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramBuckets;
import java.util.List;
import org.assertj.core.api.AbstractAssert;
import org.assertj.core.api.Assertions;

View File

@ -5,7 +5,7 @@
package io.opentelemetry.sdk.testing.assertj;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramPointData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramPointData;
import org.assertj.core.api.Assertions;
/** Test assertions for {@link ExponentialHistogramPointData}. */

View File

@ -11,13 +11,13 @@ import io.opentelemetry.sdk.metrics.data.DoublePointData;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryData;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryPointData;
import io.opentelemetry.sdk.metrics.data.ExemplarData;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramPointData;
import io.opentelemetry.sdk.metrics.data.GaugeData;
import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.data.PointData;
import io.opentelemetry.sdk.metrics.data.SumData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramBuckets;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramPointData;
import org.assertj.core.api.Assertions;
/** Test assertions for data heading to exporters within the Metrics SDK. */

View File

@ -10,6 +10,7 @@ import io.opentelemetry.sdk.metrics.data.DoublePointData;
import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.data.MetricDataType;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import io.opentelemetry.sdk.resources.Resource;
import org.assertj.core.api.AbstractAssert;
@ -126,7 +127,7 @@ public class MetricDataAssert extends AbstractAssert<MetricDataAssert, MetricDat
MetricDataType.EXPONENTIAL_HISTOGRAM,
actual.getType());
}
return new ExponentialHistogramAssert(actual.getExponentialHistogramData());
return new ExponentialHistogramAssert(ExponentialHistogramData.fromMetricData(actual));
}
/**

View File

@ -21,13 +21,13 @@ import io.opentelemetry.sdk.metrics.data.DoubleHistogramPointData;
import io.opentelemetry.sdk.metrics.data.DoublePointData;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryData;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryPointData;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramData;
import io.opentelemetry.sdk.metrics.data.LongExemplarData;
import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import io.opentelemetry.sdk.resources.Resource;
import java.util.Arrays;
import java.util.Collections;

View File

@ -8,6 +8,7 @@ package io.opentelemetry.sdk.metrics.data;
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import io.opentelemetry.sdk.resources.Resource;
import javax.annotation.concurrent.Immutable;
@ -313,18 +314,4 @@ public interface MetricData {
}
return DoubleHistogramData.EMPTY;
}
/**
* Returns the {@link ExponentialHistogramData} if type is {@link
* MetricDataType#EXPONENTIAL_HISTOGRAM}, otherwise a default empty data.
*
* @return the {@link ExponentialHistogramData} if type is {@link
* MetricDataType#EXPONENTIAL_HISTOGRAM}, otherwise a default empty data.
*/
default ExponentialHistogramData getExponentialHistogramData() {
if (getType() == MetricDataType.EXPONENTIAL_HISTOGRAM) {
return (ExponentialHistogramData) getData();
}
return DoubleExponentialHistogramData.EMPTY;
}
}

View File

@ -9,9 +9,9 @@ import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.ExemplarData;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramData;
import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.exemplar.ExemplarReservoir;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import io.opentelemetry.sdk.metrics.internal.descriptor.MetricDescriptor;
import io.opentelemetry.sdk.metrics.internal.state.ExponentialCounterFactory;
import io.opentelemetry.sdk.resources.Resource;

View File

@ -6,7 +6,7 @@
package io.opentelemetry.sdk.metrics.internal.aggregator;
import io.opentelemetry.sdk.internal.PrimitiveLongList;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramBuckets;
import io.opentelemetry.sdk.metrics.internal.state.ExponentialCounter;
import io.opentelemetry.sdk.metrics.internal.state.ExponentialCounterFactory;
import java.util.Collections;

View File

@ -10,8 +10,8 @@ import io.opentelemetry.sdk.internal.PrimitiveLongList;
import io.opentelemetry.sdk.metrics.common.InstrumentType;
import io.opentelemetry.sdk.metrics.data.DoubleHistogramPointData;
import io.opentelemetry.sdk.metrics.data.DoublePointData;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramPointData;
import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramPointData;
import io.opentelemetry.sdk.metrics.internal.descriptor.InstrumentDescriptor;
import java.util.ArrayList;
import java.util.List;

View File

@ -13,7 +13,12 @@ import java.util.Collection;
import java.util.Collections;
import javax.annotation.concurrent.Immutable;
/** {@link GaugeData} recorded uses {@code double}s. */
/**
* {@link GaugeData} recorded uses {@code double}s.
*
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
* at any time.
*/
@Immutable
@AutoValue
public abstract class ImmutableGaugeData<T extends PointData> implements GaugeData<T> {

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.metrics.data;
package io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram;
import java.util.List;
import javax.annotation.concurrent.Immutable;
@ -19,6 +19,9 @@ import javax.annotation.concurrent.Immutable;
* Then, if <code>offset</code> is 0, the bucket lower bounds would be 1.0, 2.0, 4.0, 8.0, etc. If
* <code>offset</code> is -3, the bucket lower bounds would be 0.125, 0.25, 0.5, 1.0, 2,0, etc. If
* <code>offset</code> is +3, the bucket lower bounds would be 8.0, 16.0, 32.0, etc.
*
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
* at any time.
*/
@Immutable
public interface ExponentialHistogramBuckets {

View File

@ -3,8 +3,12 @@
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.metrics.data;
package io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.Data;
import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.data.MetricDataType;
import java.util.Collection;
import javax.annotation.concurrent.Immutable;
@ -19,6 +23,9 @@ import javax.annotation.concurrent.Immutable;
*
* <p><i>Note: This is called "ExponentialHistogramData" to reflect which primitives are used to
* record it, however "ExponentialHistogram" is the equivalent OTLP type.</i>
*
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
* at any time.
*/
@Immutable
public interface ExponentialHistogramData extends Data<ExponentialHistogramPointData> {
@ -30,7 +37,21 @@ public interface ExponentialHistogramData extends Data<ExponentialHistogramPoint
*/
static ExponentialHistogramData create(
AggregationTemporality temporality, Collection<ExponentialHistogramPointData> points) {
return DoubleExponentialHistogramData.create(temporality, points);
return ImmutableExponentialHistogramData.create(temporality, points);
}
/**
* Returns the {@link ExponentialHistogramData} if type is {@link
* MetricDataType#EXPONENTIAL_HISTOGRAM}, otherwise a default empty data.
*
* @return the {@link ExponentialHistogramData} if type is {@link
* MetricDataType#EXPONENTIAL_HISTOGRAM}, otherwise a default empty data.
*/
static ExponentialHistogramData fromMetricData(MetricData data) {
if (data.getType() == MetricDataType.EXPONENTIAL_HISTOGRAM) {
return (ExponentialHistogramData) data.getData();
}
return ImmutableExponentialHistogramData.empty();
}
/**

View File

@ -3,9 +3,11 @@
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.metrics.data;
package io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.sdk.metrics.data.ExemplarData;
import io.opentelemetry.sdk.metrics.data.PointData;
import java.util.List;
import javax.annotation.concurrent.Immutable;
@ -19,6 +21,9 @@ import javax.annotation.concurrent.Immutable;
*
* <p>See:
* https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/datamodel.md#exponentialhistogram
*
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
* at any time.
*/
@Immutable
public interface ExponentialHistogramPointData extends PointData {
@ -39,7 +44,7 @@ public interface ExponentialHistogramPointData extends PointData {
Attributes attributes,
List<ExemplarData> exemplars) {
return DoubleExponentialHistogramPointData.create(
return ImmutableExponentialHistogramPointData.create(
scale,
sum,
zeroCount,

View File

@ -3,9 +3,10 @@
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.metrics.data;
package io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram;
import com.google.auto.value.AutoValue;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import java.util.Collection;
import java.util.Collections;
@ -15,25 +16,28 @@ import java.util.Collections;
*
* <p>See:
* https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/datamodel.md#exponentialhistogram
*
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
* at any time.
*/
@AutoValue
abstract class DoubleExponentialHistogramData implements ExponentialHistogramData {
public abstract class ImmutableExponentialHistogramData implements ExponentialHistogramData {
static final ExponentialHistogramData EMPTY =
private static final ExponentialHistogramData EMPTY =
ExponentialHistogramData.create(AggregationTemporality.CUMULATIVE, Collections.emptyList());
DoubleExponentialHistogramData() {}
/**
* Create a DoubleExponentialHistogramData.
*
* @return a DoubleExponentialHistogramData
*/
static DoubleExponentialHistogramData create(
AggregationTemporality temporality, Collection<ExponentialHistogramPointData> points) {
return new AutoValue_DoubleExponentialHistogramData(temporality, points);
public static ExponentialHistogramData empty() {
return EMPTY;
}
/** Returns a new {@link ExponentialHistogramData}. */
public static ExponentialHistogramData create(
AggregationTemporality temporality, Collection<ExponentialHistogramPointData> points) {
return new AutoValue_ImmutableExponentialHistogramData(temporality, points);
}
ImmutableExponentialHistogramData() {}
@Override
public abstract AggregationTemporality getAggregationTemporality();

View File

@ -3,29 +3,33 @@
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.metrics.data;
package io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram;
import com.google.auto.value.AutoValue;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.sdk.metrics.data.ExemplarData;
import java.util.List;
import javax.annotation.concurrent.Immutable;
/**
* Simple auto value implementation of {@link ExponentialHistogramPointData}. For detailed javadoc
* on the type, see {@link ExponentialHistogramPointData}.
*
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
* at any time.
*/
@AutoValue
@Immutable
abstract class DoubleExponentialHistogramPointData implements ExponentialHistogramPointData {
abstract class ImmutableExponentialHistogramPointData implements ExponentialHistogramPointData {
DoubleExponentialHistogramPointData() {}
ImmutableExponentialHistogramPointData() {}
/**
* Create a DoubleExponentialHistogramPointData.
*
* @return a DoubleExponentialHistogramPointData.
*/
static DoubleExponentialHistogramPointData create(
static ImmutableExponentialHistogramPointData create(
int scale,
double sum,
long zeroCount,
@ -38,7 +42,7 @@ abstract class DoubleExponentialHistogramPointData implements ExponentialHistogr
long count = zeroCount + positiveBuckets.getTotalCount() + negativeBuckets.getTotalCount();
return new AutoValue_DoubleExponentialHistogramPointData(
return new AutoValue_ImmutableExponentialHistogramPointData(
scale,
sum,
count,

View File

@ -0,0 +1,10 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
/** The data format to model exponential histograms for export. */
@ParametersAreNonnullByDefault
package io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram;
import javax.annotation.ParametersAreNonnullByDefault;

View File

@ -17,9 +17,10 @@ import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.DoubleExemplarData;
import io.opentelemetry.sdk.metrics.data.ExemplarData;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets;
import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.exemplar.ExemplarReservoir;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramBuckets;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import io.opentelemetry.sdk.metrics.internal.descriptor.MetricDescriptor;
import io.opentelemetry.sdk.metrics.internal.state.ExponentialCounterFactory;
import io.opentelemetry.sdk.resources.Resource;
@ -506,7 +507,7 @@ class DoubleExponentialHistogramAggregatorTest {
0,
10,
100);
assertThat(metricDataDelta.getExponentialHistogramData().getAggregationTemporality())
assertThat(ExponentialHistogramData.fromMetricData(metricDataDelta).getAggregationTemporality())
.isEqualTo(AggregationTemporality.DELTA);
}