Extract SummaryData interface for DoubleSummaryData (#4224)

* Extract SummaryData interface for DoubleSummaryData

* ValueAtQuantile too

* javadoc
This commit is contained in:
Anuraag Agrawal 2022-03-04 17:20:21 +09:00 committed by GitHub
parent 17265d0b0d
commit cb80383df8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 253 additions and 191 deletions

View File

@ -13,12 +13,12 @@ import io.opentelemetry.internal.testing.slf4j.SuppressLogger;
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.DoublePointData; 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.LongPointData; import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableValueAtPercentile;
import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.resources.Resource;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.PrintStream; import java.io.PrintStream;
@ -69,17 +69,17 @@ class LoggingMetricExporterTest {
"measureOne", "measureOne",
"A summarized test measure", "A summarized test measure",
"ms", "ms",
DoubleSummaryData.create( ImmutableSummaryData.create(
Collections.singletonList( Collections.singletonList(
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
nowEpochNanos, nowEpochNanos,
nowEpochNanos + 245, nowEpochNanos + 245,
Attributes.of(stringKey("a"), "b", stringKey("c"), "d"), Attributes.of(stringKey("a"), "b", stringKey("c"), "d"),
1010, 1010,
50000, 50000,
Arrays.asList( Arrays.asList(
ValueAtPercentile.create(0.0, 25), ImmutableValueAtPercentile.create(0.0, 25),
ValueAtPercentile.create(100.0, 433)))))), ImmutableValueAtPercentile.create(100.0, 433)))))),
MetricData.createLongSum( MetricData.createLongSum(
resource, resource,
instrumentationLibraryInfo, instrumentationLibraryInfo,

View File

@ -49,7 +49,7 @@ final class MetricMarshaler extends MarshalerWithSize {
dataField = Metric.SUM; dataField = Metric.SUM;
break; break;
case SUMMARY: case SUMMARY:
dataMarshaler = SummaryMarshaler.create(metric.getDoubleSummaryData()); dataMarshaler = SummaryMarshaler.create(metric.getSummaryData());
dataField = Metric.SUMMARY; dataField = Metric.SUMMARY;
break; break;
case HISTOGRAM: case HISTOGRAM:

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.marshal.Serializer;
import io.opentelemetry.exporter.internal.otlp.KeyValueMarshaler; import io.opentelemetry.exporter.internal.otlp.KeyValueMarshaler;
import io.opentelemetry.proto.metrics.v1.internal.SummaryDataPoint; import io.opentelemetry.proto.metrics.v1.internal.SummaryDataPoint;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryPointData; import io.opentelemetry.sdk.metrics.data.SummaryPointData;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
@ -22,16 +22,16 @@ final class SummaryDataPointMarshaler extends MarshalerWithSize {
private final ValueAtQuantileMarshaler[] quantileValues; private final ValueAtQuantileMarshaler[] quantileValues;
private final KeyValueMarshaler[] attributes; private final KeyValueMarshaler[] attributes;
static SummaryDataPointMarshaler[] createRepeated(Collection<DoubleSummaryPointData> points) { static SummaryDataPointMarshaler[] createRepeated(Collection<SummaryPointData> points) {
SummaryDataPointMarshaler[] marshalers = new SummaryDataPointMarshaler[points.size()]; SummaryDataPointMarshaler[] marshalers = new SummaryDataPointMarshaler[points.size()];
int index = 0; int index = 0;
for (DoubleSummaryPointData point : points) { for (SummaryPointData point : points) {
marshalers[index++] = SummaryDataPointMarshaler.create(point); marshalers[index++] = SummaryDataPointMarshaler.create(point);
} }
return marshalers; return marshalers;
} }
static SummaryDataPointMarshaler create(DoubleSummaryPointData point) { static SummaryDataPointMarshaler create(SummaryPointData point) {
ValueAtQuantileMarshaler[] quantileMarshalers = ValueAtQuantileMarshaler[] quantileMarshalers =
ValueAtQuantileMarshaler.createRepeated(point.getPercentileValues()); ValueAtQuantileMarshaler.createRepeated(point.getPercentileValues());
KeyValueMarshaler[] attributeMarshalers = KeyValueMarshaler[] attributeMarshalers =

View File

@ -9,13 +9,13 @@ import io.opentelemetry.exporter.internal.marshal.MarshalerUtil;
import io.opentelemetry.exporter.internal.marshal.MarshalerWithSize; import io.opentelemetry.exporter.internal.marshal.MarshalerWithSize;
import io.opentelemetry.exporter.internal.marshal.Serializer; import io.opentelemetry.exporter.internal.marshal.Serializer;
import io.opentelemetry.proto.metrics.v1.internal.Summary; import io.opentelemetry.proto.metrics.v1.internal.Summary;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryData; import io.opentelemetry.sdk.metrics.data.SummaryData;
import java.io.IOException; import java.io.IOException;
final class SummaryMarshaler extends MarshalerWithSize { final class SummaryMarshaler extends MarshalerWithSize {
private final SummaryDataPointMarshaler[] dataPoints; private final SummaryDataPointMarshaler[] dataPoints;
static SummaryMarshaler create(DoubleSummaryData summary) { static SummaryMarshaler create(SummaryData summary) {
SummaryDataPointMarshaler[] dataPointMarshalers = SummaryDataPointMarshaler[] dataPointMarshalers =
SummaryDataPointMarshaler.createRepeated(summary.getPoints()); SummaryDataPointMarshaler.createRepeated(summary.getPoints());
return new SummaryMarshaler(dataPointMarshalers); return new SummaryMarshaler(dataPointMarshalers);

View File

@ -43,18 +43,19 @@ import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; import io.opentelemetry.sdk.metrics.data.DoubleExemplarData;
import io.opentelemetry.sdk.metrics.data.DoublePointData; 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.HistogramPointData; import io.opentelemetry.sdk.metrics.data.HistogramPointData;
import io.opentelemetry.sdk.metrics.data.LongExemplarData; import io.opentelemetry.sdk.metrics.data.LongExemplarData;
import io.opentelemetry.sdk.metrics.data.LongPointData; import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.data.PointData; import io.opentelemetry.sdk.metrics.data.PointData;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile; import io.opentelemetry.sdk.metrics.data.SummaryPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableValueAtPercentile;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramBuckets; 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.ExponentialHistogramData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramPointData; import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramPointData;
@ -271,13 +272,13 @@ class MetricsRequestMarshalerTest {
assertThat( assertThat(
toSummaryDataPoints( toSummaryDataPoints(
singletonList( singletonList(
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
123, 123,
456, 456,
KV_ATTR, KV_ATTR,
5, 5,
14.2, 14.2,
singletonList(ValueAtPercentile.create(0.0, 1.1)))))) singletonList(ImmutableValueAtPercentile.create(0.0, 1.1))))))
.containsExactly( .containsExactly(
SummaryDataPoint.newBuilder() SummaryDataPoint.newBuilder()
.setStartTimeUnixNano(123) .setStartTimeUnixNano(123)
@ -296,17 +297,17 @@ class MetricsRequestMarshalerTest {
assertThat( assertThat(
toSummaryDataPoints( toSummaryDataPoints(
ImmutableList.of( ImmutableList.of(
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
123, 456, Attributes.empty(), 7, 15.3, Collections.emptyList()), 123, 456, Attributes.empty(), 7, 15.3, Collections.emptyList()),
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
321, 321,
654, 654,
KV_ATTR, KV_ATTR,
9, 9,
18.3, 18.3,
ImmutableList.of( ImmutableList.of(
ValueAtPercentile.create(0.0, 1.1), ImmutableValueAtPercentile.create(0.0, 1.1),
ValueAtPercentile.create(100.0, 20.3)))))) ImmutableValueAtPercentile.create(100.0, 20.3))))))
.containsExactly( .containsExactly(
SummaryDataPoint.newBuilder() SummaryDataPoint.newBuilder()
.setStartTimeUnixNano(123) .setStartTimeUnixNano(123)
@ -679,17 +680,17 @@ class MetricsRequestMarshalerTest {
"name", "name",
"description", "description",
"1", "1",
DoubleSummaryData.create( ImmutableSummaryData.create(
singletonList( singletonList(
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
123, 123,
456, 456,
KV_ATTR, KV_ATTR,
5, 5,
33d, 33d,
ImmutableList.of( ImmutableList.of(
ValueAtPercentile.create(0, 1.1), ImmutableValueAtPercentile.create(0, 1.1),
ValueAtPercentile.create(100.0, 20.3)))))))) ImmutableValueAtPercentile.create(100.0, 20.3))))))))
.isEqualTo( .isEqualTo(
Metric.newBuilder() Metric.newBuilder()
.setName("name") .setName("name")
@ -959,8 +960,7 @@ class MetricsRequestMarshalerTest {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
private static List<SummaryDataPoint> toSummaryDataPoints( private static List<SummaryDataPoint> toSummaryDataPoints(Collection<SummaryPointData> points) {
Collection<DoubleSummaryPointData> points) {
return points.stream() return points.stream()
.map( .map(
point -> point ->

View File

@ -12,7 +12,6 @@ import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; import io.opentelemetry.sdk.metrics.data.DoubleExemplarData;
import io.opentelemetry.sdk.metrics.data.DoublePointData; import io.opentelemetry.sdk.metrics.data.DoublePointData;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryPointData;
import io.opentelemetry.sdk.metrics.data.ExemplarData; import io.opentelemetry.sdk.metrics.data.ExemplarData;
import io.opentelemetry.sdk.metrics.data.HistogramPointData; import io.opentelemetry.sdk.metrics.data.HistogramPointData;
import io.opentelemetry.sdk.metrics.data.LongExemplarData; import io.opentelemetry.sdk.metrics.data.LongExemplarData;
@ -21,6 +20,7 @@ import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.data.MetricDataType; import io.opentelemetry.sdk.metrics.data.MetricDataType;
import io.opentelemetry.sdk.metrics.data.PointData; import io.opentelemetry.sdk.metrics.data.PointData;
import io.opentelemetry.sdk.metrics.data.SumData; import io.opentelemetry.sdk.metrics.data.SumData;
import io.opentelemetry.sdk.metrics.data.SummaryPointData;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile; import io.opentelemetry.sdk.metrics.data.ValueAtPercentile;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData; import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import io.prometheus.client.Collector; import io.prometheus.client.Collector;
@ -149,8 +149,7 @@ final class MetricAdapter {
longPoint.getEpochNanos())); longPoint.getEpochNanos()));
break; break;
case SUMMARY: case SUMMARY:
addSummarySamples( addSummarySamples((SummaryPointData) pointData, name, labelNames, labelValues, samples);
(DoubleSummaryPointData) pointData, name, labelNames, labelValues, samples);
break; break;
case HISTOGRAM: case HISTOGRAM:
addHistogramSamples( addHistogramSamples(
@ -164,7 +163,7 @@ final class MetricAdapter {
} }
private static void addSummarySamples( private static void addSummarySamples(
DoubleSummaryPointData doubleSummaryPoint, SummaryPointData doubleSummaryPoint,
String name, String name,
List<String> labelNames, List<String> labelNames,
List<String> labelValues, List<String> labelValues,
@ -291,7 +290,7 @@ final class MetricAdapter {
case LONG_SUM: case LONG_SUM:
return metricData.getLongSumData().getPoints(); return metricData.getLongSumData().getPoints();
case SUMMARY: case SUMMARY:
return metricData.getDoubleSummaryData().getPoints(); return metricData.getSummaryData().getPoints();
case HISTOGRAM: case HISTOGRAM:
return metricData.getHistogramData().getPoints(); return metricData.getHistogramData().getPoints();
case EXPONENTIAL_HISTOGRAM: case EXPONENTIAL_HISTOGRAM:

View File

@ -26,7 +26,6 @@ import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; import io.opentelemetry.sdk.metrics.data.DoubleExemplarData;
import io.opentelemetry.sdk.metrics.data.DoublePointData; import io.opentelemetry.sdk.metrics.data.DoublePointData;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryPointData;
import io.opentelemetry.sdk.metrics.data.ExemplarData; import io.opentelemetry.sdk.metrics.data.ExemplarData;
import io.opentelemetry.sdk.metrics.data.HistogramPointData; import io.opentelemetry.sdk.metrics.data.HistogramPointData;
import io.opentelemetry.sdk.metrics.data.LongExemplarData; import io.opentelemetry.sdk.metrics.data.LongExemplarData;
@ -34,6 +33,7 @@ import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.data.MetricDataType; import io.opentelemetry.sdk.metrics.data.MetricDataType;
import io.opentelemetry.sdk.metrics.data.PointData; import io.opentelemetry.sdk.metrics.data.PointData;
import io.opentelemetry.sdk.metrics.data.SummaryPointData;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile; import io.opentelemetry.sdk.metrics.data.ValueAtPercentile;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.IOException; import java.io.IOException;
@ -152,7 +152,7 @@ abstract class Serializer {
writeHistogram(writer, name, (HistogramPointData) point); writeHistogram(writer, name, (HistogramPointData) point);
break; break;
case SUMMARY: case SUMMARY:
writeSummary(writer, name, (DoubleSummaryPointData) point); writeSummary(writer, name, (SummaryPointData) point);
break; break;
case EXPONENTIAL_HISTOGRAM: case EXPONENTIAL_HISTOGRAM:
throw new IllegalArgumentException("Can't happen"); throw new IllegalArgumentException("Can't happen");
@ -188,8 +188,7 @@ abstract class Serializer {
} }
} }
private void writeSummary(Writer writer, String name, DoubleSummaryPointData point) private void writeSummary(Writer writer, String name, SummaryPointData point) throws IOException {
throws IOException {
writePoint( writePoint(
writer, name + "_count", point.getCount(), point.getAttributes(), point.getEpochNanos()); writer, name + "_count", point.getCount(), point.getAttributes(), point.getEpochNanos());
writePoint(writer, name + "_sum", point.getSum(), point.getAttributes(), point.getEpochNanos()); writePoint(writer, name + "_sum", point.getSum(), point.getAttributes(), point.getEpochNanos());

View File

@ -16,17 +16,17 @@ import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.DoublePointData; 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.LongExemplarData; import io.opentelemetry.sdk.metrics.data.LongExemplarData;
import io.opentelemetry.sdk.metrics.data.LongPointData; import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.data.MetricDataType; import io.opentelemetry.sdk.metrics.data.MetricDataType;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableValueAtPercentile;
import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.resources.Resource;
import io.prometheus.client.Collector; import io.prometheus.client.Collector;
import io.prometheus.client.Collector.MetricFamilySamples; import io.prometheus.client.Collector.MetricFamilySamples;
@ -182,17 +182,17 @@ class MetricAdapterTest {
"instrument.name", "instrument.name",
"description", "description",
"1", "1",
DoubleSummaryData.create( ImmutableSummaryData.create(
Collections.singletonList( Collections.singletonList(
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
1633947011000000000L, 1633947011000000000L,
1633950672000000000L, 1633950672000000000L,
KP_VP_ATTR, KP_VP_ATTR,
5, 5,
7, 7,
Arrays.asList( Arrays.asList(
ValueAtPercentile.create(0.9, 0.1), ImmutableValueAtPercentile.create(0.9, 0.1),
ValueAtPercentile.create(0.99, 0.3)))))); ImmutableValueAtPercentile.create(0.99, 0.3))))));
private static final MetricData HISTOGRAM = private static final MetricData HISTOGRAM =
MetricData.createDoubleHistogram( MetricData.createDoubleHistogram(
Resource.create(Attributes.of(stringKey("kr"), "vr")), Resource.create(Attributes.of(stringKey("kr"), "vr")),
@ -430,13 +430,13 @@ class MetricAdapterTest {
"full_name", "full_name",
MetricDataType.SUMMARY, MetricDataType.SUMMARY,
ImmutableList.of( ImmutableList.of(
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
1633939689000000000L, 1633939689000000000L,
1633943350000000000L, 1633943350000000000L,
KP_VP_ATTR, KP_VP_ATTR,
9, 9,
18.3, 18.3,
ImmutableList.of(ValueAtPercentile.create(0.9, 1.1)))))) ImmutableList.of(ImmutableValueAtPercentile.create(0.9, 1.1))))))
.containsExactly( .containsExactly(
new Sample( new Sample(
"full_name_count", "full_name_count",
@ -465,22 +465,22 @@ class MetricAdapterTest {
"full_name", "full_name",
MetricDataType.SUMMARY, MetricDataType.SUMMARY,
ImmutableList.of( ImmutableList.of(
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
1633947011000000000L, 1633947011000000000L,
1633950672000000000L, 1633950672000000000L,
Attributes.empty(), Attributes.empty(),
7, 7,
15.3, 15.3,
Collections.emptyList()), Collections.emptyList()),
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
1633939689000000000L, 1633939689000000000L,
1633943350000000000L, 1633943350000000000L,
KP_VP_ATTR, KP_VP_ATTR,
9, 9,
18.3, 18.3,
ImmutableList.of( ImmutableList.of(
ValueAtPercentile.create(0.9, 1.1), ImmutableValueAtPercentile.create(0.9, 1.1),
ValueAtPercentile.create(0.99, 12.3)))))) ImmutableValueAtPercentile.create(0.99, 12.3))))))
.containsExactly( .containsExactly(
new Sample( new Sample(
"full_name_count", "full_name_count",

View File

@ -15,16 +15,16 @@ import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.DoublePointData; 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.LongExemplarData; import io.opentelemetry.sdk.metrics.data.LongExemplarData;
import io.opentelemetry.sdk.metrics.data.LongPointData; import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.data.MetricData; 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.ImmutableGaugeData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableValueAtPercentile;
import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.resources.Resource;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
@ -172,17 +172,17 @@ class SerializerTest {
"instrument.name", "instrument.name",
"description", "description",
"1", "1",
DoubleSummaryData.create( ImmutableSummaryData.create(
Collections.singletonList( Collections.singletonList(
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
1633947011000000000L, 1633947011000000000L,
1633950672000000000L, 1633950672000000000L,
KP_VP_ATTR, KP_VP_ATTR,
5, 5,
7, 7,
Arrays.asList( Arrays.asList(
ValueAtPercentile.create(0.9, 0.1), ImmutableValueAtPercentile.create(0.9, 0.1),
ValueAtPercentile.create(0.99, 0.3)))))); ImmutableValueAtPercentile.create(0.99, 0.3))))));
private static final MetricData HISTOGRAM = private static final MetricData HISTOGRAM =
MetricData.createDoubleHistogram( MetricData.createDoubleHistogram(
Resource.create(Attributes.of(stringKey("kr"), "vr")), Resource.create(Attributes.of(stringKey("kr"), "vr")),

View File

@ -24,8 +24,6 @@ import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; import io.opentelemetry.sdk.metrics.data.DoubleExemplarData;
import io.opentelemetry.sdk.metrics.data.DoublePointData; 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.ExemplarData;
import io.opentelemetry.sdk.metrics.data.GaugeData; import io.opentelemetry.sdk.metrics.data.GaugeData;
import io.opentelemetry.sdk.metrics.data.HistogramData; import io.opentelemetry.sdk.metrics.data.HistogramData;
@ -33,11 +31,16 @@ import io.opentelemetry.sdk.metrics.data.HistogramPointData;
import io.opentelemetry.sdk.metrics.data.LongPointData; import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.data.SumData; import io.opentelemetry.sdk.metrics.data.SumData;
import io.opentelemetry.sdk.metrics.data.SummaryData;
import io.opentelemetry.sdk.metrics.data.SummaryPointData;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile; import io.opentelemetry.sdk.metrics.data.ValueAtPercentile;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableValueAtPercentile;
import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.resources.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
@ -167,8 +170,8 @@ public final class MetricAdapter {
AggregationTemporality.DELTA, convertHistogramPoints(censusMetric)); AggregationTemporality.DELTA, convertHistogramPoints(censusMetric));
} }
static DoubleSummaryData convertSummary(Metric censusMetric) { static SummaryData convertSummary(Metric censusMetric) {
return DoubleSummaryData.create(convertSummaryPoints(censusMetric)); return ImmutableSummaryData.create(convertSummaryPoints(censusMetric));
} }
static Collection<LongPointData> convertLongPoints(Metric censusMetric) { static Collection<LongPointData> convertLongPoints(Metric censusMetric) {
@ -243,14 +246,14 @@ public final class MetricAdapter {
return result; return result;
} }
static Collection<DoubleSummaryPointData> convertSummaryPoints(Metric censusMetric) { static Collection<SummaryPointData> convertSummaryPoints(Metric censusMetric) {
List<DoubleSummaryPointData> result = new ArrayList<>(); List<SummaryPointData> result = new ArrayList<>();
for (TimeSeries ts : censusMetric.getTimeSeriesList()) { for (TimeSeries ts : censusMetric.getTimeSeriesList()) {
long startTimestamp = mapTimestamp(ts.getStartTimestamp()); long startTimestamp = mapTimestamp(ts.getStartTimestamp());
Attributes attributes = Attributes attributes =
mapAttributes(censusMetric.getMetricDescriptor().getLabelKeys(), ts.getLabelValues()); mapAttributes(censusMetric.getMetricDescriptor().getLabelKeys(), ts.getLabelValues());
for (Point point : ts.getPoints()) { for (Point point : ts.getPoints()) {
DoubleSummaryPointData otelPoint = SummaryPointData otelPoint =
point point
.getValue() .getValue()
.match( .match(
@ -258,7 +261,7 @@ public final class MetricAdapter {
lv -> null, lv -> null,
distribution -> null, distribution -> null,
summary -> summary ->
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
startTimestamp, startTimestamp,
mapTimestamp(point.getTimestamp()), mapTimestamp(point.getTimestamp()),
attributes, attributes,
@ -369,7 +372,8 @@ public final class MetricAdapter {
List<Summary.Snapshot.ValueAtPercentile> valueAtPercentiles) { List<Summary.Snapshot.ValueAtPercentile> valueAtPercentiles) {
List<ValueAtPercentile> result = new ArrayList<>(valueAtPercentiles.size()); List<ValueAtPercentile> result = new ArrayList<>(valueAtPercentiles.size());
for (Summary.Snapshot.ValueAtPercentile censusValue : valueAtPercentiles) { for (Summary.Snapshot.ValueAtPercentile censusValue : valueAtPercentiles) {
result.add(ValueAtPercentile.create(censusValue.getPercentile(), censusValue.getValue())); result.add(
ImmutableValueAtPercentile.create(censusValue.getPercentile(), censusValue.getValue()));
} }
return result; return result;
} }

View File

@ -25,7 +25,7 @@ import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.TraceFlags; import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceState; import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; import io.opentelemetry.sdk.metrics.data.DoubleExemplarData;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile; import io.opentelemetry.sdk.metrics.internal.data.ImmutableValueAtPercentile;
import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.resources.Resource;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
@ -301,7 +301,7 @@ class MetricAdapterTest {
.hasAttributes(Attributes.of(AttributeKey.stringKey("key1"), "value1")) .hasAttributes(Attributes.of(AttributeKey.stringKey("key1"), "value1"))
.hasCount(10) .hasCount(10)
.hasSum(5) .hasSum(5)
.hasPercentileValues(ValueAtPercentile.create(1.0, 200))); .hasPercentileValues(ImmutableValueAtPercentile.create(1.0, 200)));
} }
@Test @Test

View File

@ -1,29 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.testing.assertj;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryData;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryPointData;
import org.assertj.core.api.AbstractAssert;
import org.assertj.core.api.AbstractIterableAssert;
import org.assertj.core.api.Assertions;
/** Assert on a {@link DoubleSummaryData} metric. */
public class DoubleSummaryDataAssert
extends AbstractAssert<DoubleSummaryDataAssert, DoubleSummaryData> {
protected DoubleSummaryDataAssert(DoubleSummaryData actual) {
super(actual, DoubleSummaryDataAssert.class);
}
/** Returns convenience API to assert against the {@code points} field. */
public AbstractIterableAssert<
?, ? extends Iterable<? extends DoubleSummaryPointData>, DoubleSummaryPointData, ?>
points() {
isNotNull();
return Assertions.assertThat(actual.getPoints());
}
}

View File

@ -6,8 +6,6 @@
package io.opentelemetry.sdk.testing.assertj; package io.opentelemetry.sdk.testing.assertj;
import io.opentelemetry.sdk.metrics.data.DoublePointData; 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.ExemplarData;
import io.opentelemetry.sdk.metrics.data.GaugeData; import io.opentelemetry.sdk.metrics.data.GaugeData;
import io.opentelemetry.sdk.metrics.data.HistogramData; import io.opentelemetry.sdk.metrics.data.HistogramData;
@ -16,6 +14,8 @@ import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.data.PointData; import io.opentelemetry.sdk.metrics.data.PointData;
import io.opentelemetry.sdk.metrics.data.SumData; import io.opentelemetry.sdk.metrics.data.SumData;
import io.opentelemetry.sdk.metrics.data.SummaryData;
import io.opentelemetry.sdk.metrics.data.SummaryPointData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramBuckets; import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramBuckets;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramPointData; import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramPointData;
import org.assertj.core.api.Assertions; import org.assertj.core.api.Assertions;
@ -28,6 +28,9 @@ public final class MetricAssertions extends Assertions {
} }
/** Returns an assertion for {@link GaugeData}. */ /** Returns an assertion for {@link GaugeData}. */
// There is no real use case for passing in a GaugeData that is a lambda, if for some reason it is
// desired a cast will still work.
@SuppressWarnings("FunctionalInterfaceClash")
public static <T extends PointData> GaugeAssert<T> assertThat(GaugeData<T> metric) { public static <T extends PointData> GaugeAssert<T> assertThat(GaugeData<T> metric) {
return new GaugeAssert<>(metric); return new GaugeAssert<>(metric);
} }
@ -37,9 +40,9 @@ public final class MetricAssertions extends Assertions {
return new HistogramAssert(metric); return new HistogramAssert(metric);
} }
/** Returns an assertion for {@link DoubleSummaryData}. */ /** Returns an assertion for {@link SummaryData}. */
public static DoubleSummaryDataAssert assertThat(DoubleSummaryData metric) { public static SummaryDataAssert assertThat(SummaryData metric) {
return new DoubleSummaryDataAssert(metric); return new SummaryDataAssert(metric);
} }
/** Returns an assertion for {@link HistogramPointData}. */ /** Returns an assertion for {@link HistogramPointData}. */
@ -47,9 +50,9 @@ public final class MetricAssertions extends Assertions {
return new HistogramPointDataAssert(point); return new HistogramPointDataAssert(point);
} }
/** Returns an assertion for {@link DoubleSummaryPointData}. */ /** Returns an assertion for {@link SummaryPointData}. */
public static DoubleSummaryPointDataAssert assertThat(DoubleSummaryPointData point) { public static SummaryPointDataAssert assertThat(SummaryPointData point) {
return new DoubleSummaryPointDataAssert(point); return new SummaryPointDataAssert(point);
} }
/** Returns an assertion for {@link ExponentialHistogramPointData}. */ /** Returns an assertion for {@link ExponentialHistogramPointData}. */

View File

@ -207,7 +207,7 @@ public class MetricDataAssert extends AbstractAssert<MetricDataAssert, MetricDat
* *
* @return convenience API to assert against the {@code DoubleSummaryData}. * @return convenience API to assert against the {@code DoubleSummaryData}.
*/ */
public DoubleSummaryDataAssert hasDoubleSummary() { public SummaryDataAssert hasDoubleSummary() {
isNotNull(); isNotNull();
if (actual.getType() != MetricDataType.SUMMARY) { if (actual.getType() != MetricDataType.SUMMARY) {
failWithActualExpectedAndMessage( failWithActualExpectedAndMessage(
@ -217,6 +217,6 @@ public class MetricDataAssert extends AbstractAssert<MetricDataAssert, MetricDat
MetricDataType.SUMMARY, MetricDataType.SUMMARY,
actual.getType()); actual.getType());
} }
return new DoubleSummaryDataAssert(actual.getDoubleSummaryData()); return new SummaryDataAssert(actual.getSummaryData());
} }
} }

View File

@ -0,0 +1,28 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.testing.assertj;
import io.opentelemetry.sdk.metrics.data.SummaryData;
import io.opentelemetry.sdk.metrics.data.SummaryPointData;
import org.assertj.core.api.AbstractAssert;
import org.assertj.core.api.AbstractIterableAssert;
import org.assertj.core.api.Assertions;
/** Assert on a {@link SummaryData} metric. */
public class SummaryDataAssert extends AbstractAssert<SummaryDataAssert, SummaryData> {
protected SummaryDataAssert(SummaryData actual) {
super(actual, SummaryDataAssert.class);
}
/** Returns convenience API to assert against the {@code points} field. */
public AbstractIterableAssert<
?, ? extends Iterable<? extends SummaryPointData>, SummaryPointData, ?>
points() {
isNotNull();
return Assertions.assertThat(actual.getPoints());
}
}

View File

@ -5,33 +5,33 @@
package io.opentelemetry.sdk.testing.assertj; package io.opentelemetry.sdk.testing.assertj;
import io.opentelemetry.sdk.metrics.data.DoubleSummaryPointData; import io.opentelemetry.sdk.metrics.data.SummaryPointData;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile; import io.opentelemetry.sdk.metrics.data.ValueAtPercentile;
import org.assertj.core.api.Assertions; import org.assertj.core.api.Assertions;
/** Asserts for (deprecated) Summary points. */ /** Asserts for (deprecated) Summary points. */
public class DoubleSummaryPointDataAssert public class SummaryPointDataAssert
extends AbstractPointDataAssert<DoubleSummaryPointDataAssert, DoubleSummaryPointData> { extends AbstractPointDataAssert<SummaryPointDataAssert, SummaryPointData> {
protected DoubleSummaryPointDataAssert(DoubleSummaryPointData actual) { protected SummaryPointDataAssert(SummaryPointData actual) {
super(actual, DoubleSummaryPointDataAssert.class); super(actual, SummaryPointDataAssert.class);
} }
/** Ensure the summary has seen the expected count of measurements. */ /** Ensure the summary has seen the expected count of measurements. */
public DoubleSummaryPointDataAssert hasCount(long expected) { public SummaryPointDataAssert hasCount(long expected) {
isNotNull(); isNotNull();
Assertions.assertThat(actual.getCount()).as("count").isEqualTo(expected); Assertions.assertThat(actual.getCount()).as("count").isEqualTo(expected);
return this; return this;
} }
/** Ensure the summary has the expected sum across all observed measurements. */ /** Ensure the summary has the expected sum across all observed measurements. */
public DoubleSummaryPointDataAssert hasSum(double expected) { public SummaryPointDataAssert hasSum(double expected) {
isNotNull(); isNotNull();
Assertions.assertThat(actual.getSum()).as("sum").isEqualTo(expected); Assertions.assertThat(actual.getSum()).as("sum").isEqualTo(expected);
return this; return this;
} }
/** Ensure the summary has exactly, in any order, the given percentile values. */ /** Ensure the summary has exactly, in any order, the given percentile values. */
public DoubleSummaryPointDataAssert hasPercentileValues(ValueAtPercentile... percentiles) { public SummaryPointDataAssert hasPercentileValues(ValueAtPercentile... percentiles) {
isNotNull(); isNotNull();
Assertions.assertThat(actual.getPercentileValues()).containsExactlyInAnyOrder(percentiles); Assertions.assertThat(actual.getPercentileValues()).containsExactlyInAnyOrder(percentiles);
return this; return this;

View File

@ -17,17 +17,19 @@ import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
import io.opentelemetry.sdk.metrics.data.DoubleExemplarData; import io.opentelemetry.sdk.metrics.data.DoubleExemplarData;
import io.opentelemetry.sdk.metrics.data.DoublePointData; 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.HistogramPointData; import io.opentelemetry.sdk.metrics.data.HistogramPointData;
import io.opentelemetry.sdk.metrics.data.LongExemplarData; import io.opentelemetry.sdk.metrics.data.LongExemplarData;
import io.opentelemetry.sdk.metrics.data.LongPointData; import io.opentelemetry.sdk.metrics.data.LongPointData;
import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.metrics.data.SummaryPointData;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile; import io.opentelemetry.sdk.metrics.data.ValueAtPercentile;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableValueAtPercentile;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData; import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.resources.Resource;
import java.util.Arrays; import java.util.Arrays;
@ -94,7 +96,7 @@ public class MetricAssertionsTest {
/* name= */ "summary", /* name= */ "summary",
/* description= */ "description", /* description= */ "description",
/* unit= */ "unit", /* unit= */ "unit",
DoubleSummaryData.create( ImmutableSummaryData.create(
// Points // Points
Collections.emptyList())); Collections.emptyList()));
@ -207,10 +209,10 @@ public class MetricAssertionsTest {
private static final LongPointData LONG_POINT_DATA_WITH_EXEMPLAR = private static final LongPointData LONG_POINT_DATA_WITH_EXEMPLAR =
LongPointData.create(1, 2, Attributes.empty(), 3, Collections.singletonList(LONG_EXEMPLAR)); LongPointData.create(1, 2, Attributes.empty(), 3, Collections.singletonList(LONG_EXEMPLAR));
private static final ValueAtPercentile PERCENTILE_VALUE = ValueAtPercentile.create(0, 1); private static final ValueAtPercentile PERCENTILE_VALUE = ImmutableValueAtPercentile.create(0, 1);
private static final DoubleSummaryPointData DOUBLE_SUMMARY_POINT_DATA = private static final SummaryPointData DOUBLE_SUMMARY_POINT_DATA =
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
1, 2, Attributes.empty(), 1, 2, Collections.singletonList(PERCENTILE_VALUE)); 1, 2, Attributes.empty(), 1, 2, Collections.singletonList(PERCENTILE_VALUE));
private static final HistogramPointData DOUBLE_HISTOGRAM_POINT_DATA = private static final HistogramPointData DOUBLE_HISTOGRAM_POINT_DATA =
@ -476,7 +478,7 @@ public class MetricAssertionsTest {
assertThatThrownBy( assertThatThrownBy(
() -> () ->
assertThat(DOUBLE_SUMMARY_POINT_DATA) assertThat(DOUBLE_SUMMARY_POINT_DATA)
.hasPercentileValues(ValueAtPercentile.create(1, 1))) .hasPercentileValues(ImmutableValueAtPercentile.create(1, 1)))
.isInstanceOf(AssertionError.class); .isInstanceOf(AssertionError.class);
} }

View File

@ -9,6 +9,7 @@ import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData;
import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData; import io.opentelemetry.sdk.metrics.internal.data.exponentialhistogram.ExponentialHistogramData;
import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.resources.Resource;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
@ -119,7 +120,7 @@ public interface MetricData {
String name, String name,
String description, String description,
String unit, String unit,
DoubleSummaryData data) { SummaryData data) {
return MetricDataImpl.create( return MetricDataImpl.create(
resource, resource,
instrumentationLibraryInfo, instrumentationLibraryInfo,
@ -295,11 +296,11 @@ public interface MetricData {
* @return the {@code DoubleSummaryData} if type is {@link MetricDataType#SUMMARY}, otherwise a * @return the {@code DoubleSummaryData} if type is {@link MetricDataType#SUMMARY}, otherwise a
* default * empty data. * default * empty data.
*/ */
default DoubleSummaryData getDoubleSummaryData() { default SummaryData getSummaryData() {
if (getType() == MetricDataType.SUMMARY) { if (getType() == MetricDataType.SUMMARY) {
return (DoubleSummaryData) getData(); return (SummaryData) getData();
} }
return DoubleSummaryData.EMPTY; return ImmutableSummaryData.empty();
} }
/** /**

View File

@ -0,0 +1,14 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.metrics.data;
/**
* A summary metric.
*
* <p>See:
* https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/datamodel.md#summary
*/
public interface SummaryData extends Data<SummaryPointData> {}

View File

@ -0,0 +1,33 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.metrics.data;
import java.util.List;
/** A single data point that summarizes the values in a time series of numeric values. */
public interface SummaryPointData extends PointData {
/**
* The number of values that are being summarized.
*
* @return the number of values that are being summarized.
*/
long getCount();
/**
* The sum of all the values that are being summarized.
*
* @return the sum of the values that are being summarized.
*/
double getSum();
/**
* Percentile values in the summarization. Note: a percentile 0.0 represents the minimum value in
* the distribution.
*
* @return the percentiles values.
*/
List<ValueAtPercentile> getPercentileValues();
}

View File

@ -5,29 +5,19 @@
package io.opentelemetry.sdk.metrics.data; package io.opentelemetry.sdk.metrics.data;
import com.google.auto.value.AutoValue; /** A value within a summary. */
import javax.annotation.concurrent.Immutable; public interface ValueAtPercentile {
@Immutable
@AutoValue
public abstract class ValueAtPercentile {
public static ValueAtPercentile create(double percentile, double value) {
return new AutoValue_ValueAtPercentile(percentile, value);
}
ValueAtPercentile() {}
/** /**
* The percentile of a distribution. Must be in the interval [0.0, 100.0]. * The percentile of a distribution. Must be in the interval [0.0, 100.0].
* *
* @return the percentile. * @return the percentile.
*/ */
public abstract double getPercentile(); double getPercentile();
/** /**
* The value at the given percentile of a distribution. * The value at the given percentile of a distribution.
* *
* @return the value at the percentile. * @return the value at the percentile.
*/ */
public abstract double getValue(); double getValue();
} }

View File

@ -3,9 +3,11 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.sdk.metrics.data; package io.opentelemetry.sdk.metrics.internal.data;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import io.opentelemetry.sdk.metrics.data.SummaryData;
import io.opentelemetry.sdk.metrics.data.SummaryPointData;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
@ -21,19 +23,24 @@ import javax.annotation.concurrent.Immutable;
* *
* <p>Summary is considered a legacy metric type, and shouldn't be produced (by default) from * <p>Summary is considered a legacy metric type, and shouldn't be produced (by default) from
* instruments. * instruments.
*
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
* at any time
*/ */
@Immutable @Immutable
@AutoValue @AutoValue
public abstract class DoubleSummaryData implements Data<DoubleSummaryPointData> { public abstract class ImmutableSummaryData implements SummaryData {
static final DoubleSummaryData EMPTY = DoubleSummaryData.create(Collections.emptyList()); private static final ImmutableSummaryData EMPTY =
ImmutableSummaryData.create(Collections.emptyList());
DoubleSummaryData() {} public static ImmutableSummaryData empty() {
return EMPTY;
public static DoubleSummaryData create(Collection<DoubleSummaryPointData> points) {
return new AutoValue_DoubleSummaryData(points);
} }
@Override ImmutableSummaryData() {}
public abstract Collection<DoubleSummaryPointData> getPoints();
public static ImmutableSummaryData create(Collection<SummaryPointData> points) {
return new AutoValue_ImmutableSummaryData(points);
}
} }

View File

@ -3,23 +3,27 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
package io.opentelemetry.sdk.metrics.data; package io.opentelemetry.sdk.metrics.internal.data;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.sdk.metrics.data.SummaryPointData;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
/** /**
* SummaryPoint is a single data point that summarizes the values in a time series of numeric * A single data point that summarizes the values in a time series of numeric values.
* values. *
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
* at any time
*/ */
@Immutable @Immutable
@AutoValue @AutoValue
public abstract class DoubleSummaryPointData implements PointData { public abstract class ImmutableSummaryPointData implements SummaryPointData {
/** /**
* Creates a {@link DoubleSummaryPointData}. * Creates a {@link SummaryPointData}.
* *
* @param startEpochNanos (optional) The starting time for the period where this point was * @param startEpochNanos (optional) The starting time for the period where this point was
* sampled. * sampled.
@ -29,14 +33,14 @@ public abstract class DoubleSummaryPointData implements PointData {
* @param sum The sum of measuremnts being sumarized. * @param sum The sum of measuremnts being sumarized.
* @param percentileValues Calculations of percentile values from measurements. * @param percentileValues Calculations of percentile values from measurements.
*/ */
public static DoubleSummaryPointData create( public static ImmutableSummaryPointData create(
long startEpochNanos, long startEpochNanos,
long epochNanos, long epochNanos,
Attributes attributes, Attributes attributes,
long count, long count,
double sum, double sum,
List<ValueAtPercentile> percentileValues) { List<ValueAtPercentile> percentileValues) {
return new AutoValue_DoubleSummaryPointData( return new AutoValue_ImmutableSummaryPointData(
startEpochNanos, startEpochNanos,
epochNanos, epochNanos,
attributes, attributes,
@ -46,27 +50,5 @@ public abstract class DoubleSummaryPointData implements PointData {
percentileValues); percentileValues);
} }
DoubleSummaryPointData() {} ImmutableSummaryPointData() {}
/**
* The number of values that are being summarized.
*
* @return the number of values that are being summarized.
*/
public abstract long getCount();
/**
* The sum of all the values that are being summarized.
*
* @return the sum of the values that are being summarized.
*/
public abstract double getSum();
/**
* Percentile values in the summarization. Note: a percentile 0.0 represents the minimum value in
* the distribution.
*
* @return the percentiles values.
*/
public abstract List<ValueAtPercentile> getPercentileValues();
} }

View File

@ -0,0 +1,26 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.metrics.internal.data;
import com.google.auto.value.AutoValue;
import io.opentelemetry.sdk.metrics.data.ValueAtPercentile;
import javax.annotation.concurrent.Immutable;
/**
* A summary metric value.
*
* <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 ImmutableValueAtPercentile implements ValueAtPercentile {
public static ValueAtPercentile create(double percentile, double value) {
return new AutoValue_ImmutableValueAtPercentile(percentile, value);
}
ImmutableValueAtPercentile() {}
}

View File

@ -16,6 +16,9 @@ import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryPointData;
import io.opentelemetry.sdk.metrics.internal.data.ImmutableValueAtPercentile;
import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.resources.Resource;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
@ -30,24 +33,24 @@ class MetricDataImplTest {
private static final double DOUBLE_VALUE = 1.234; private static final double DOUBLE_VALUE = 1.234;
private static final AttributeKey<String> KEY = AttributeKey.stringKey("key"); private static final AttributeKey<String> KEY = AttributeKey.stringKey("key");
private static final ValueAtPercentile MINIMUM_VALUE = private static final ValueAtPercentile MINIMUM_VALUE =
ValueAtPercentile.create(0.0, DOUBLE_VALUE); ImmutableValueAtPercentile.create(0.0, DOUBLE_VALUE);
private static final ValueAtPercentile MAXIMUM_VALUE = private static final ValueAtPercentile MAXIMUM_VALUE =
ValueAtPercentile.create(100.0, DOUBLE_VALUE); ImmutableValueAtPercentile.create(100.0, DOUBLE_VALUE);
private static final LongPointData LONG_POINT = private static final LongPointData LONG_POINT =
LongPointData.create(START_EPOCH_NANOS, EPOCH_NANOS, Attributes.of(KEY, "value"), LONG_VALUE); LongPointData.create(START_EPOCH_NANOS, EPOCH_NANOS, Attributes.of(KEY, "value"), LONG_VALUE);
private static final DoublePointData DOUBLE_POINT = private static final DoublePointData DOUBLE_POINT =
DoublePointData.create( DoublePointData.create(
START_EPOCH_NANOS, EPOCH_NANOS, Attributes.of(KEY, "value"), DOUBLE_VALUE); START_EPOCH_NANOS, EPOCH_NANOS, Attributes.of(KEY, "value"), DOUBLE_VALUE);
private static final DoubleSummaryPointData SUMMARY_POINT = private static final SummaryPointData SUMMARY_POINT =
DoubleSummaryPointData.create( ImmutableSummaryPointData.create(
START_EPOCH_NANOS, START_EPOCH_NANOS,
EPOCH_NANOS, EPOCH_NANOS,
Attributes.of(KEY, "value"), Attributes.of(KEY, "value"),
LONG_VALUE, LONG_VALUE,
DOUBLE_VALUE, DOUBLE_VALUE,
Arrays.asList( Arrays.asList(
ValueAtPercentile.create(0.0, DOUBLE_VALUE), ImmutableValueAtPercentile.create(0.0, DOUBLE_VALUE),
ValueAtPercentile.create(100, DOUBLE_VALUE))); ImmutableValueAtPercentile.create(100, DOUBLE_VALUE)));
private static final ImmutableHistogramPointData HISTOGRAM_POINT = private static final ImmutableHistogramPointData HISTOGRAM_POINT =
ImmutableHistogramPointData.create( ImmutableHistogramPointData.create(
START_EPOCH_NANOS, START_EPOCH_NANOS,
@ -158,8 +161,8 @@ class MetricDataImplTest {
"metric_name", "metric_name",
"metric_description", "metric_description",
"ms", "ms",
DoubleSummaryData.create(Collections.singletonList(SUMMARY_POINT))); ImmutableSummaryData.create(Collections.singletonList(SUMMARY_POINT)));
assertThat(metricData.getDoubleSummaryData().getPoints()).containsExactly(SUMMARY_POINT); assertThat(metricData.getSummaryData().getPoints()).containsExactly(SUMMARY_POINT);
} }
@Test @Test
@ -220,13 +223,13 @@ class MetricDataImplTest {
"metric_name", "metric_name",
"metric_description", "metric_description",
"ms", "ms",
DoubleSummaryData.create(Collections.singletonList(SUMMARY_POINT))); ImmutableSummaryData.create(Collections.singletonList(SUMMARY_POINT)));
assertThat(metricData.getDoubleGaugeData().getPoints()).isEmpty(); assertThat(metricData.getDoubleGaugeData().getPoints()).isEmpty();
assertThat(metricData.getLongGaugeData().getPoints()).isEmpty(); assertThat(metricData.getLongGaugeData().getPoints()).isEmpty();
assertThat(metricData.getDoubleSumData().getPoints()).isEmpty(); assertThat(metricData.getDoubleSumData().getPoints()).isEmpty();
assertThat(metricData.getLongGaugeData().getPoints()).isEmpty(); assertThat(metricData.getLongGaugeData().getPoints()).isEmpty();
assertThat(metricData.getSummaryData().getPoints()).containsExactly(SUMMARY_POINT);
assertThat(metricData.getHistogramData().getPoints()).isEmpty(); assertThat(metricData.getHistogramData().getPoints()).isEmpty();
assertThat(metricData.getDoubleSummaryData().getPoints()).containsExactly(SUMMARY_POINT);
metricData = metricData =
MetricData.createDoubleGauge( MetricData.createDoubleGauge(
@ -240,7 +243,7 @@ class MetricDataImplTest {
assertThat(metricData.getLongGaugeData().getPoints()).isEmpty(); assertThat(metricData.getLongGaugeData().getPoints()).isEmpty();
assertThat(metricData.getDoubleSumData().getPoints()).isEmpty(); assertThat(metricData.getDoubleSumData().getPoints()).isEmpty();
assertThat(metricData.getLongGaugeData().getPoints()).isEmpty(); assertThat(metricData.getLongGaugeData().getPoints()).isEmpty();
assertThat(metricData.getSummaryData().getPoints()).isEmpty();
assertThat(metricData.getHistogramData().getPoints()).isEmpty(); assertThat(metricData.getHistogramData().getPoints()).isEmpty();
assertThat(metricData.getDoubleSummaryData().getPoints()).isEmpty();
} }
} }