From 84aacd335511f4fdd3433fdd278aaac3b980c740 Mon Sep 17 00:00:00 2001 From: Teja Date: Sun, 30 Mar 2025 19:23:11 -0400 Subject: [PATCH 1/6] wip: creating DelegatingMetricData. --- .../opentelemetry-sdk-metrics.txt | 61 ++++- .../opentelemetry-sdk-testing.txt | 18 +- .../metrics/data/DelegatingMetricData.java | 189 ++++++++++++++++ .../sdk/metrics/data/DoubleExemplarData.java | 19 ++ .../sdk/metrics/data/DoublePointData.java | 20 ++ .../data/ExponentialHistogramBuckets.java | 11 + .../data/ExponentialHistogramData.java | 7 + .../data/ExponentialHistogramPointData.java | 39 ++++ .../sdk/metrics/data/GaugeData.java | 16 +- .../sdk/metrics/data/HistogramData.java | 14 ++ .../sdk/metrics/data/HistogramPointData.java | 37 +++ .../sdk/metrics/data/LongExemplarData.java | 19 ++ .../sdk/metrics/data/LongPointData.java | 20 ++ .../sdk/metrics/data/SumData.java | 16 ++ .../sdk/metrics/data/SummaryData.java | 16 +- .../sdk/metrics/data/SummaryPointData.java | 25 +++ .../sdk/metrics/data/ValueAtQuantile.java | 13 ++ .../data/DelegatingMetricDataTest.java | 210 ++++++++++++++++++ .../metrics/data/DoubleExemplarDataTest.java | 41 ++++ .../sdk/metrics/data/DoublePointDataTest.java | 25 +++ .../data/ExponentialHistogramBucketsTest.java | 23 ++ .../data/ExponentialHistogramDataTest.java | 23 ++ .../ExponentialHistogramPointDataTest.java | 68 ++++++ .../sdk/metrics/data/GaugeDataTest.java | 20 ++ .../sdk/metrics/data/HistogramDataTest.java | 23 ++ .../metrics/data/HistogramPointDataTest.java | 41 ++++ .../metrics/data/LongExemplarDataTest.java | 35 +++ .../sdk/metrics/data/LongPointDataTest.java | 23 ++ .../sdk/metrics/data/SumDataTest.java | 34 +++ .../sdk/metrics/data/SummaryDataTest.java | 31 +++ .../metrics/data/SummaryPointDataTest.java | 38 ++++ .../sdk/metrics/data/ValueAtQuantileTest.java | 20 ++ .../sdk/testing/metrics/TestMetricData.java | 104 +++++++++ 33 files changed, 1295 insertions(+), 4 deletions(-) create mode 100644 sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoublePointDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBucketsTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/GaugeDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramPointDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongExemplarDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongPointDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SumDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryPointDataTest.java create mode 100644 sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantileTest.java create mode 100644 sdk/testing/src/main/java/io/opentelemetry/sdk/testing/metrics/TestMetricData.java diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt index d3dba97c51d..a418a824b47 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt @@ -1,2 +1,61 @@ Comparing source compatibility of opentelemetry-sdk-metrics-1.49.0-SNAPSHOT.jar against opentelemetry-sdk-metrics-1.48.0.jar -No changes. \ No newline at end of file ++++ NEW CLASS: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.metrics.data.DelegatingMetricData (not serializable) + +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. + +++ NEW INTERFACE: io.opentelemetry.sdk.metrics.data.MetricData + +++ NEW SUPERCLASS: java.lang.Object + +++ NEW METHOD: PUBLIC(+) boolean equals(java.lang.Object) + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.metrics.data.Data getData() + +++ NEW METHOD: PUBLIC(+) java.lang.String getDescription() + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.common.InstrumentationScopeInfo getInstrumentationScopeInfo() + +++ NEW METHOD: PUBLIC(+) java.lang.String getName() + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.resources.Resource getResource() + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.metrics.data.MetricDataType getType() + +++ NEW METHOD: PUBLIC(+) java.lang.String getUnit() + +++ NEW METHOD: PUBLIC(+) int hashCode() + +++ NEW METHOD: PUBLIC(+) java.lang.String toString() +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.DoubleExemplarData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.DoubleExemplarData create(io.opentelemetry.api.common.Attributes, long, io.opentelemetry.api.trace.SpanContext, double) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.DoublePointData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.DoublePointData create(long, long, io.opentelemetry.api.common.Attributes, double) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets create(int, int, java.util.List) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.ExponentialHistogramData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.ExponentialHistogramData create(io.opentelemetry.sdk.metrics.data.AggregationTemporality, java.util.Collection) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.ExponentialHistogramPointData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.ExponentialHistogramPointData create(int, double, long, boolean, double, boolean, double, io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets, io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets, long, long, io.opentelemetry.api.common.Attributes, java.util.List) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.GaugeData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + GENERIC TEMPLATES: === T:io.opentelemetry.sdk.metrics.data.PointData + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.GaugeData create(java.util.Collection) + GENERIC TEMPLATES: +++ T:io.opentelemetry.sdk.metrics.data.PointData +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.HistogramData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.HistogramData create(io.opentelemetry.sdk.metrics.data.AggregationTemporality, java.util.Collection) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.HistogramPointData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.HistogramPointData create(long, long, io.opentelemetry.api.common.Attributes, double, boolean, double, boolean, double, java.util.List, java.util.List) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.LongExemplarData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.LongExemplarData create(io.opentelemetry.api.common.Attributes, long, io.opentelemetry.api.trace.SpanContext, long) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.LongPointData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.LongPointData create(long, long, io.opentelemetry.api.common.Attributes, long) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.SumData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + GENERIC TEMPLATES: === T:io.opentelemetry.sdk.metrics.data.PointData + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData create(boolean, io.opentelemetry.sdk.metrics.data.AggregationTemporality, java.util.Collection) + GENERIC TEMPLATES: +++ T:io.opentelemetry.sdk.metrics.data.PointData +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.SummaryData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.SummaryData create(java.util.Collection) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.SummaryPointData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.SummaryPointData create(long, long, io.opentelemetry.api.common.Attributes, long, double, java.util.List) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.ValueAtQuantile (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.ValueAtQuantile create(double, double) diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt index 2d1a38296f1..0119cc0c7c5 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt @@ -1,2 +1,18 @@ Comparing source compatibility of opentelemetry-sdk-testing-1.49.0-SNAPSHOT.jar against opentelemetry-sdk-testing-1.48.0.jar -No changes. \ No newline at end of file ++++ NEW CLASS: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData (not serializable) + +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. + +++ NEW SUPERCLASS: java.lang.Object + +++ NEW CONSTRUCTOR: PUBLIC(+) TestMetricData() + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder builder() ++++ NEW CLASS: PUBLIC(+) ABSTRACT(+) STATIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder (not serializable) + +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. + +++ NEW SUPERCLASS: java.lang.Object + +++ NEW CONSTRUCTOR: PUBLIC(+) TestMetricData$Builder() + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData build() + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setData(io.opentelemetry.sdk.metrics.data.Data) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setDescription(java.lang.String) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setInstrumentationScopeInfo(io.opentelemetry.sdk.common.InstrumentationScopeInfo) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setName(java.lang.String) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setResource(io.opentelemetry.sdk.resources.Resource) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setType(io.opentelemetry.sdk.metrics.data.MetricDataType) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setUnit(java.lang.String) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java new file mode 100644 index 00000000000..90fcce38277 --- /dev/null +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java @@ -0,0 +1,189 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static java.util.Objects.requireNonNull; + +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.resources.Resource; + +/** + * A {@link MetricData} which delegates all methods to another {@link MetricData}. Extend this class + * to modify the {@link MetricData} that will be exported, for example by creating a delegating + * {@link io.opentelemetry.sdk.metrics.export.MetricExporter} which wraps {@link MetricData} with a + * custom implementation. + * + *

Example usage: + * + *

{@code
+ * // class MetricDataWithCustomDescription extends DelegatingMetricData {
+ * //
+ * //   private final String description;
+ * //
+ * //   MetricDataWithCustomDescription(MetricData delegate) {
+ * //     super(delegate);
+ * //     this.description = delegate.getDescription() + " (custom)";
+ * //   }
+ * //
+ * //   @Override
+ * //   public String getDescription() {
+ * //     return description;
+ * //   }
+ * // }
+ * }
+ * + * @since 1.28.0 + */ +public abstract class DelegatingMetricData implements MetricData { + + private final MetricData delegate; + + protected DelegatingMetricData(MetricData delegate) { + this.delegate = requireNonNull(delegate, "delegate"); + } + + /** + * Returns the resource associated with this metric data. + * + * @return the {@link Resource} instance. + */ + @Override + public Resource getResource() { + return delegate.getResource(); + } + + /** + * Returns the instrumentation library information associated with this metric data. + * + * @return the {@link InstrumentationScopeInfo} instance. + */ + @Override + public InstrumentationScopeInfo getInstrumentationScopeInfo() { + return delegate.getInstrumentationScopeInfo(); + } + + /** + * Returns the name of the metric. + * + * @return the name of the metric. + */ + @Override + public String getName() { + return delegate.getName(); + } + + /** + * Returns the description of the metric. + * + * @return the description of the metric. + */ + @Override + public String getDescription() { + return delegate.getDescription(); + } + + /** + * Returns the unit of the metric. + * + * @return the unit of the metric. + */ + @Override + public String getUnit() { + return delegate.getUnit(); + } + + /** + * Returns the type of the metric. + * + * @return the type of the metric. + */ + @Override + public MetricDataType getType() { + return delegate.getType(); + } + + /** + * Returns the data of the metric. + * + * @return the data of the metric. + */ + @Override + public Data getData() { + return delegate.getData(); + } + + /** + * Returns a boolean indicating whether the delegate {@link MetricData} is equal to this {@code + * MetricData}. + * + * @param o the object to compare to. + * @return a boolean indicating whether the delegate {@link MetricData} is equal to this {@code + * MetricData}. + */ + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o instanceof MetricData) { + MetricData that = (MetricData) o; + return getResource().equals(that.getResource()) + && getInstrumentationScopeInfo().equals(that.getInstrumentationScopeInfo()) + && getName().equals(that.getName()) + && getDescription().equals(that.getDescription()) + && getUnit().equals(that.getUnit()) + && getType().equals(that.getType()) + && getData().equals(that.getData()); + } + return false; + } + + /** + * Returns a hash code value for the delegate {@link MetricData}. + * + * @return a hash code value for the delegate {@link MetricData}. + */ + @Override + public int hashCode() { + int code = 1; + code *= 1000003; + code ^= getResource().hashCode(); + code *= 1000003; + code ^= getInstrumentationScopeInfo().hashCode(); + code *= 1000003; + code ^= getName().hashCode(); + code *= 1000003; + code ^= getDescription().hashCode(); + code *= 1000003; + code ^= getUnit().hashCode(); + code *= 1000003; + code ^= getType().hashCode(); + code *= 1000003; + code ^= getData().hashCode(); + return code; + } + + /** Returns a string representation of the delegate {@link MetricData}. */ + @Override + public String toString() { + return "DelegatingMetricData{" + + "resource=" + + getResource() + + ", instrumentationScopeInfo=" + + getInstrumentationScopeInfo() + + ", name=" + + getName() + + ", description=" + + getDescription() + + ", unit=" + + getUnit() + + ", type=" + + getType() + + ", data=" + + getData() + + "}"; + } +} diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarData.java index 7df07202ebd..b67c0fde728 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarData.java @@ -5,6 +5,9 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableDoubleExemplarData; import javax.annotation.concurrent.Immutable; /** @@ -14,6 +17,22 @@ */ @Immutable public interface DoubleExemplarData extends ExemplarData { + + /** + * Construct a new exemplar. + * + * @param filteredAttributes The set of {@link Attributes} not already associated with the {@link + * PointData}. + * @param recordTimeNanos The time when the sample qas recorded in nanoseconds. + * @param spanContext The associated span context. + * @param value The value recorded. + */ + static DoubleExemplarData create( + Attributes filteredAttributes, long recordTimeNanos, SpanContext spanContext, double value) { + return ImmutableDoubleExemplarData.create( + filteredAttributes, recordTimeNanos, spanContext, value); + } + /** Numerical value of the measurement that was recorded. */ double getValue(); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoublePointData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoublePointData.java index fefbd27f547..31e0d759bfd 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoublePointData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoublePointData.java @@ -5,6 +5,9 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableDoublePointData; +import java.util.Collections; import java.util.List; /** @@ -13,6 +16,23 @@ * @since 1.14.0 */ public interface DoublePointData extends PointData { + + /** + * Creates a {@link DoublePointData}. + * + * @param startEpochNanos The starting time for the period where this point was sampled. Note: + * While start time is optional in OTLP, all SDKs should produce it for all their metrics, so + * it is required here. + * @param epochNanos The ending time for the period when this value was sampled. + * @param attributes The set of attributes associated with this point. + * @param value The value that was sampled. + */ + static DoublePointData create( + long startEpochNanos, long epochNanos, Attributes attributes, double value) { + return ImmutableDoublePointData.create( + startEpochNanos, epochNanos, attributes, value, Collections.emptyList()); + } + /** Returns the value of the data point. */ double getValue(); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBuckets.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBuckets.java index 71ad13f899f..e966afb7394 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBuckets.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBuckets.java @@ -5,6 +5,7 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableExponentialHistogramBuckets; import java.util.List; import javax.annotation.concurrent.Immutable; @@ -25,6 +26,16 @@ @Immutable public interface ExponentialHistogramBuckets { + /** + * Create a ExponentialHistogramBuckets. + * + * @return a ExponentialHistogramBuckets. + */ + @SuppressWarnings("TooManyParameters") + static ExponentialHistogramBuckets create(int scale, int offset, List bucketCounts) { + return ImmutableExponentialHistogramBuckets.create(scale, offset, bucketCounts); + } + /** The scale of the buckets. Must align with {@link ExponentialHistogramPointData#getScale()}. */ int getScale(); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramData.java index 68db6f5c6e5..261c95a6f18 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramData.java @@ -5,6 +5,7 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableExponentialHistogramData; import java.util.Collection; import javax.annotation.concurrent.Immutable; @@ -24,6 +25,12 @@ @Immutable public interface ExponentialHistogramData extends Data { + /** Returns a new {@link ExponentialHistogramData}. */ + static ExponentialHistogramData create( + AggregationTemporality temporality, Collection points) { + return ImmutableExponentialHistogramData.create(temporality, points); + } + /** * Returns the {@code AggregationTemporality} of this metric. * diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointData.java index 841c2bc62e2..9bbf9b65e1d 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointData.java @@ -5,6 +5,8 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableExponentialHistogramPointData; import java.util.List; import javax.annotation.concurrent.Immutable; @@ -24,6 +26,43 @@ @Immutable public interface ExponentialHistogramPointData extends PointData { + /** + * Create a ExponentialHistogramPointData. + * + * @return a ExponentialHistogramPointData. + */ + @SuppressWarnings("TooManyParameters") + static ExponentialHistogramPointData create( + int scale, + double sum, + long zeroCount, + boolean hasMin, + double min, + boolean hasMax, + double max, + ExponentialHistogramBuckets positiveBuckets, + ExponentialHistogramBuckets negativeBuckets, + long startEpochNanos, + long epochNanos, + Attributes attributes, + List exemplars) { + + return ImmutableExponentialHistogramPointData.create( + scale, + sum, + zeroCount, + hasMin, + min, + hasMax, + max, + positiveBuckets, + negativeBuckets, + startEpochNanos, + epochNanos, + attributes, + exemplars); + } + /** * Scale characterises the resolution of the histogram, with larger values of scale offering * greater precision. Bucket boundaries of the histogram are located at integer powers of the diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/GaugeData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/GaugeData.java index f08e5bf5415..2520519c1dc 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/GaugeData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/GaugeData.java @@ -5,6 +5,8 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData; +import java.util.Collection; import javax.annotation.concurrent.Immutable; /** @@ -13,4 +15,16 @@ * @since 1.14.0 */ @Immutable -public interface GaugeData extends Data {} +public interface GaugeData extends Data { + + /** + * Creates an instance of {@link GaugeData} with the given collection of points. + * + * @param the type of the point data + * @param points the collection of points to be included in the gauge data + * @return an instance of {@link ImmutableGaugeData} containing the provided points + */ + static GaugeData create(Collection points) { + return ImmutableGaugeData.create(points); + } +} diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramData.java index a3952844e6e..00ebc4af5b7 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramData.java @@ -5,6 +5,7 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; import java.util.Collection; import javax.annotation.concurrent.Immutable; @@ -15,6 +16,19 @@ */ @Immutable public interface HistogramData extends Data { + + /** + * Creates a new instance of {@link HistogramData}. + * + * @param temporality the aggregation temporality of the histogram data + * @param points the collection of histogram point data + * @return a new instance of {@link HistogramData} + */ + static HistogramData create( + AggregationTemporality temporality, Collection points) { + return ImmutableHistogramData.create(temporality, points); + } + /** Returns the histogram {@link AggregationTemporality}. */ AggregationTemporality getAggregationTemporality(); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramPointData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramPointData.java index 36af358200d..8ad66b095cc 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramPointData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramPointData.java @@ -5,6 +5,9 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData; +import java.util.Collections; import java.util.List; import javax.annotation.concurrent.Immutable; @@ -15,6 +18,40 @@ */ @Immutable public interface HistogramPointData extends PointData { + + /** + * Creates a HistogramPointData. For a Histogram with N defined boundaries, there should be N+1 + * counts. + * + * @return a HistogramPointData. + * @throws IllegalArgumentException if the given boundaries/counts were invalid + */ + @SuppressWarnings("TooManyParameters") + static HistogramPointData create( + long startEpochNanos, + long epochNanos, + Attributes attributes, + double sum, + boolean hasMin, + double min, + boolean hasMax, + double max, + List boundaries, + List counts) { + return ImmutableHistogramPointData.create( + startEpochNanos, + epochNanos, + attributes, + sum, + hasMin, + min, + hasMax, + max, + boundaries, + counts, + Collections.emptyList()); + } + /** * The sum of all measurements recorded. * diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongExemplarData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongExemplarData.java index 7842241fcef..a3b56a841dc 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongExemplarData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongExemplarData.java @@ -5,6 +5,9 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableLongExemplarData; import javax.annotation.concurrent.Immutable; /** @@ -14,6 +17,22 @@ */ @Immutable public interface LongExemplarData extends ExemplarData { + + /** + * Construct a new exemplar. + * + * @param filteredAttributes The set of {@link Attributes} not already associated with the {@link + * PointData}. + * @param recordTimeNanos The time when the sample qas recorded in nanoseconds. + * @param spanContext The associated span context. + * @param value The value recorded. + */ + static LongExemplarData create( + Attributes filteredAttributes, long recordTimeNanos, SpanContext spanContext, long value) { + return ImmutableLongExemplarData.create( + filteredAttributes, recordTimeNanos, spanContext, value); + } + /** Numerical value of the measurement that was recorded. */ long getValue(); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongPointData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongPointData.java index 18b42cb9d06..115b56a3f5f 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongPointData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongPointData.java @@ -5,6 +5,9 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableLongPointData; +import java.util.Collections; import java.util.List; /** @@ -13,6 +16,23 @@ * @since 1.14.0 */ public interface LongPointData extends PointData { + + /** + * Creates a {@link LongPointData}. + * + * @param startEpochNanos The starting time for the period where this point was sampled. Note: + * While start time is optional in OTLP, all SDKs should produce it for all their metrics, so + * it is required here. + * @param epochNanos The ending time for the period when this value was sampled. + * @param attributes The set of attributes associated with this point. + * @param value The value that was sampled. + */ + static LongPointData create( + long startEpochNanos, long epochNanos, Attributes attributes, long value) { + return ImmutableLongPointData.create( + startEpochNanos, epochNanos, attributes, value, Collections.emptyList()); + } + /** Returns the value of the data point. */ long getValue(); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SumData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SumData.java index af74e0338e6..e12d1f6750e 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SumData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SumData.java @@ -5,6 +5,8 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData; +import java.util.Collection; import javax.annotation.concurrent.Immutable; /** @@ -14,6 +16,20 @@ */ @Immutable public interface SumData extends Data { + + /** + * Creates a new instance of {@link SumData}. + * + * @param isMonotonic {@code true} if the sum is monotonic. + * @param temporality the aggregation temporality of the sum data + * @param points the collection of sum point data + * @return a new instance of {@link SumData} + */ + static ImmutableSumData create( + boolean isMonotonic, AggregationTemporality temporality, Collection points) { + return ImmutableSumData.create(isMonotonic, temporality, points); + } + /** Returns "true" if the sum is monotonic. */ boolean isMonotonic(); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryData.java index 1189a76db11..b689daab666 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryData.java @@ -5,6 +5,8 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData; +import java.util.Collection; import javax.annotation.concurrent.Immutable; /** @@ -13,4 +15,16 @@ * @since 1.14.0 */ @Immutable -public interface SummaryData extends Data {} +public interface SummaryData extends Data { + + /** + * Creates a new instance of {@link SummaryData} with the given collection of {@link + * SummaryPointData}. + * + * @param points a collection of {@link SummaryPointData} to be included in the summary data + * @return a new instance of {@link SummaryData} containing the provided points + */ + static SummaryData create(Collection points) { + return ImmutableSummaryData.create(points); + } +} diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryPointData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryPointData.java index df9db3d85b5..3b38d197c4a 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryPointData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryPointData.java @@ -5,6 +5,8 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryPointData; import java.util.List; import javax.annotation.concurrent.Immutable; @@ -15,6 +17,29 @@ */ @Immutable public interface SummaryPointData extends PointData { + + /** + * Creates a {@link SummaryPointData}. + * + * @param startEpochNanos (optional) The starting time for the period where this point was + * sampled. + * @param epochNanos The ending time for the period when this value was sampled. + * @param attributes The set of attributes associated with this point. + * @param count The number of measurements being sumarized. + * @param sum The sum of measuremnts being sumarized. + * @param percentileValues Calculations of percentile values from measurements. + */ + static SummaryPointData create( + long startEpochNanos, + long epochNanos, + Attributes attributes, + long count, + double sum, + List percentileValues) { + return ImmutableSummaryPointData.create( + startEpochNanos, epochNanos, attributes, count, sum, percentileValues); + } + /** Returns the count of measurements. */ long getCount(); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantile.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantile.java index 35702e46bb7..cadebed75e1 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantile.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantile.java @@ -5,6 +5,7 @@ package io.opentelemetry.sdk.metrics.data; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableValueAtQuantile; import javax.annotation.concurrent.Immutable; /** @@ -14,6 +15,18 @@ */ @Immutable public interface ValueAtQuantile { + + /** + * Creates a new {@code ValueAtQuantile} instance with the specified quantile and value. + * + * @param quantile the quantile for which the value is being recorded + * @param value the value at the specified quantile + * @return a new {@code ValueAtQuantile} instance + */ + static ValueAtQuantile create(double quantile, double value) { + return ImmutableValueAtQuantile.create(quantile, value); + } + /** Returns the quantile of a distribution. Must be in the interval [0.0, 1.0]. */ double getQuantile(); diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricDataTest.java new file mode 100644 index 00000000000..914bf8db1c9 --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricDataTest.java @@ -0,0 +1,210 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.testing.metrics.TestMetricData; +import org.assertj.core.api.recursive.comparison.RecursiveComparisonConfiguration; +import org.junit.jupiter.api.Test; + +class DelegatingMetricDataTest { + + @Test + void delegates() { + MetricData metricData = createBasicMetricBuilder().build(); + MetricData noOpWrapper = new NoOpDelegatingMetricData(metricData); + + assertThat(noOpWrapper) + .usingRecursiveComparison( + RecursiveComparisonConfiguration.builder().withIgnoredFields("delegate").build()) + .isEqualTo(metricData); + } + + @Test + void overrideDelegate() { + MetricData metricData = createBasicMetricBuilder().build(); + MetricData withCustomDescription = new MetricDataWithCustomDescription(metricData); + + assertThat(withCustomDescription.getDescription()).isEqualTo("test"); + } + + @Test + void equals() { + MetricData metricData = createBasicMetricBuilder().build(); + MetricData noOpWrapper = new NoOpDelegatingMetricData(metricData); + MetricData withCustomDescription = new MetricDataWithCustomDescription(metricData); + + assertThat(noOpWrapper).isEqualTo(metricData); + assertThat(metricData).isNotEqualTo(withCustomDescription); + } + + @Test + void equals_sameInstance() { + MetricData metricData = createBasicMetricBuilder().build(); + MetricData noOpWrapper = new NoOpDelegatingMetricData(metricData); + + assertThat(noOpWrapper.equals(noOpWrapper)).isTrue(); + } + + @Test + void equals_differentResource() { + MetricData metricData1 = + createBasicMetricBuilder() + .setResource(Resource.create(Attributes.builder().put("key", "value1").build())) + .build(); + MetricData metricData2 = + createBasicMetricBuilder() + .setResource(Resource.create(Attributes.builder().put("key", "value2").build())) + .build(); + MetricData noOpWrapper1 = new NoOpDelegatingMetricData(metricData1); + MetricData noOpWrapper2 = new NoOpDelegatingMetricData(metricData2); + + assertThat(noOpWrapper1).isNotEqualTo(noOpWrapper2); + } + + @Test + void equals_differentInstrumentationScopeInfo() { + MetricData metricData1 = + createBasicMetricBuilder() + .setInstrumentationScopeInfo(InstrumentationScopeInfo.create("scope1")) + .build(); + MetricData metricData2 = + createBasicMetricBuilder() + .setInstrumentationScopeInfo(InstrumentationScopeInfo.create("scope2")) + .build(); + MetricData noOpWrapper1 = new NoOpDelegatingMetricData(metricData1); + MetricData noOpWrapper2 = new NoOpDelegatingMetricData(metricData2); + + assertThat(noOpWrapper1).isNotEqualTo(noOpWrapper2); + } + + @Test + void equals_differentName() { + MetricData metricData1 = createBasicMetricBuilder().setName("name1").build(); + MetricData metricData2 = createBasicMetricBuilder().setName("name2").build(); + MetricData noOpWrapper1 = new NoOpDelegatingMetricData(metricData1); + MetricData noOpWrapper2 = new NoOpDelegatingMetricData(metricData2); + + assertThat(noOpWrapper1).isNotEqualTo(noOpWrapper2); + } + + @Test + void equals_differentUnit() { + MetricData metricData1 = createBasicMetricBuilder().setUnit("unit1").build(); + MetricData metricData2 = createBasicMetricBuilder().setUnit("unit2").build(); + MetricData noOpWrapper1 = new NoOpDelegatingMetricData(metricData1); + MetricData noOpWrapper2 = new NoOpDelegatingMetricData(metricData2); + + assertThat(noOpWrapper1).isNotEqualTo(noOpWrapper2); + } + + @Test + void equals_differentType() { + MetricData metricData1 = createBasicMetricBuilder().setType(MetricDataType.SUMMARY).build(); + MetricData metricData2 = createBasicMetricBuilder().setType(MetricDataType.LONG_SUM).build(); + MetricData noOpWrapper1 = new NoOpDelegatingMetricData(metricData1); + MetricData noOpWrapper2 = new NoOpDelegatingMetricData(metricData2); + + assertThat(noOpWrapper1).isNotEqualTo(noOpWrapper2); + } + + @Test + void equals_differentData() { + MetricData metricData1 = + createBasicMetricBuilder().setData(ImmutableSummaryData.empty()).build(); + MetricData metricData2 = + createBasicMetricBuilder().setData(ImmutableSummaryData.empty()).build(); + MetricData noOpWrapper1 = new NoOpDelegatingMetricData(metricData1); + MetricData noOpWrapper2 = new NoOpDelegatingMetricData(metricData2); + + assertThat(noOpWrapper1).isEqualTo(noOpWrapper2); + } + + @Test + void equals_nonMetricDataObject_returnsFalse() { + MetricData metricData = createBasicMetricBuilder().build(); + MetricData noOpWrapper = new NoOpDelegatingMetricData(metricData); + + // Compare with a String object (non-MetricData) + Object nonMetricData = "not a metric data"; + + assertThat(noOpWrapper.equals(nonMetricData)).isFalse(); + } + + @Test + void testToString() { + MetricData metricData = createBasicMetricBuilder().build(); + MetricData noOpWrapper = new NoOpDelegatingMetricData(metricData); + + String expectedString = + "DelegatingMetricData{" + + "resource=" + + metricData.getResource() + + ", instrumentationScopeInfo=" + + metricData.getInstrumentationScopeInfo() + + ", name=" + + metricData.getName() + + ", description=" + + metricData.getDescription() + + ", unit=" + + metricData.getUnit() + + ", type=" + + metricData.getType() + + ", data=" + + metricData.getData() + + "}"; + + assertThat(noOpWrapper.toString()).isEqualTo(expectedString); + } + + @Test + void testHashCode() { + MetricData metricData1 = createBasicMetricBuilder().build(); + MetricData metricData2 = createBasicMetricBuilder().build(); + MetricData noOpWrapper1 = new NoOpDelegatingMetricData(metricData1); + MetricData noOpWrapper2 = new NoOpDelegatingMetricData(metricData2); + + assertThat(noOpWrapper1.hashCode()).isEqualTo(metricData1.hashCode()); + assertThat(noOpWrapper2.hashCode()).isEqualTo(metricData2.hashCode()); + assertThat(noOpWrapper1.hashCode()).isEqualTo(noOpWrapper2.hashCode()); + } + + private static TestMetricData.Builder createBasicMetricBuilder() { + return TestMetricData.builder() + .setResource(Resource.empty()) + .setInstrumentationScopeInfo(InstrumentationScopeInfo.empty()) + .setDescription("") + .setUnit("1") + .setName("name") + .setData(ImmutableSummaryData.empty()) + .setType(MetricDataType.SUMMARY); // Not sure what type should be here + } + + private static final class NoOpDelegatingMetricData extends DelegatingMetricData { + private NoOpDelegatingMetricData(MetricData delegate) { + super(delegate); + } + } + + private static final class MetricDataWithCustomDescription extends DelegatingMetricData { + private final String description; + + private MetricDataWithCustomDescription(MetricData delegate) { + super(delegate); + this.description = "test"; + } + + @Override + public String getDescription() { + return description; + } + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java new file mode 100644 index 00000000000..77b66aa8f6c --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java @@ -0,0 +1,41 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.internal.ImmutableSpanContext; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.TraceFlags; +import io.opentelemetry.api.trace.TraceState; +import org.junit.jupiter.api.Test; + +public class DoubleExemplarDataTest { + + private static final String TRACE_ID = "00000000000000000000000000000061"; + private static final String SPAN_ID = "0000000000000061"; + + @Test + void create() { + SpanContext spanContext = + ImmutableSpanContext.create( + TRACE_ID, + SPAN_ID, + TraceFlags.getDefault(), + TraceState.getDefault(), + /* remote= */ false, + /* skipIdValidation= */ false); + DoubleExemplarData exemplarData = + DoubleExemplarData.create( + Attributes.builder().put("key", "value1").build(), // attributes + 1, // epochNanos + /* spanContext= */ spanContext, // spanContext + /* value= */ 2.0); + assertThat(exemplarData.getValue()).isEqualTo(2.0); + assertThat(exemplarData.getEpochNanos()).isEqualTo(1); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoublePointDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoublePointDataTest.java new file mode 100644 index 00000000000..c56639f18d8 --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoublePointDataTest.java @@ -0,0 +1,25 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.Attributes; +import org.junit.jupiter.api.Test; + +public class DoublePointDataTest { + + @Test + void create() { + DoublePointData pointData = + DoublePointData.create(1, 2, Attributes.builder().put("key", "value1").build(), 3); + assertThat(pointData.getStartEpochNanos()).isEqualTo(1); + assertThat(pointData.getEpochNanos()).isEqualTo(2); + assertThat(pointData.getAttributes()) + .isEqualTo(Attributes.builder().put("key", "value1").build()); + assertThat(pointData.getValue()).isEqualTo(3); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBucketsTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBucketsTest.java new file mode 100644 index 00000000000..e1f919287ad --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBucketsTest.java @@ -0,0 +1,23 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import org.junit.jupiter.api.Test; + +public class ExponentialHistogramBucketsTest { + + @Test + void create() { + ExponentialHistogramBuckets buckets = + ExponentialHistogramBuckets.create(1, 2, Arrays.asList(3L, 4L)); + assertThat(buckets.getBucketCounts()).containsExactly(3L, 4L); + assertThat(buckets.getScale()).isEqualTo(1); + assertThat(buckets.getOffset()).isEqualTo(2); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramDataTest.java new file mode 100644 index 00000000000..e1723e3f290 --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramDataTest.java @@ -0,0 +1,23 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Collections; +import org.junit.jupiter.api.Test; + +public class ExponentialHistogramDataTest { + + @Test + void create() { + ExponentialHistogramData histogramData = + ExponentialHistogramData.create(AggregationTemporality.CUMULATIVE, Collections.emptyList()); + assertThat(histogramData.getAggregationTemporality()) + .isEqualTo(AggregationTemporality.CUMULATIVE); + assertThat(histogramData.getPoints()).isEmpty(); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointDataTest.java new file mode 100644 index 00000000000..01a0439933a --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointDataTest.java @@ -0,0 +1,68 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.TraceFlags; +import io.opentelemetry.api.trace.TraceState; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableDoubleExemplarData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableExponentialHistogramBuckets; +import java.util.Arrays; +import java.util.Collections; +import org.junit.jupiter.api.Test; + +public class ExponentialHistogramPointDataTest { + + @Test + void create() { + DoubleExemplarData doubleExemplarOne = + ImmutableDoubleExemplarData.create( + Attributes.empty(), + 0, + SpanContext.create( + "TraceId", "SpanId", TraceFlags.getDefault(), TraceState.getDefault()), + 1.0); + + DoubleExemplarData doubleExemplarTwo = + ImmutableDoubleExemplarData.create( + Attributes.empty(), + 2, + SpanContext.create( + "TraceId", "SpanId", TraceFlags.getDefault(), TraceState.getDefault()), + 2.0); + ExponentialHistogramPointData pointData = + ExponentialHistogramPointData.create( + 1, + 10.0, + 1, + /* hasMin= */ true, + 2.0, + /* hasMax= */ true, + 4.0, + ImmutableExponentialHistogramBuckets.create(1, 10, Arrays.asList(1L, 2L)), + ImmutableExponentialHistogramBuckets.create(1, 0, Collections.emptyList()), + 1, + 2, + Attributes.empty(), + Arrays.asList(doubleExemplarOne, doubleExemplarTwo)); + assertThat(pointData.getStartEpochNanos()).isEqualTo(1); + assertThat(pointData.getEpochNanos()).isEqualTo(2); + assertThat(pointData.getAttributes()).isEqualTo(Attributes.empty()); + assertThat(pointData.getSum()).isEqualTo(10.0); + assertThat(pointData.getCount()).isEqualTo(4); + assertThat(pointData.hasMin()).isTrue(); + assertThat(pointData.getMin()).isEqualTo(2.0); + assertThat(pointData.hasMax()).isTrue(); + assertThat(pointData.getMax()).isEqualTo(4.0); + assertThat(pointData.getPositiveBuckets().getTotalCount()).isEqualTo(3); + assertThat(pointData.getNegativeBuckets().getTotalCount()).isEqualTo(0); + assertThat(pointData.getPositiveBuckets().getBucketCounts()).containsExactly(1L, 2L); + assertThat(pointData.getNegativeBuckets().getBucketCounts()).isEmpty(); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/GaugeDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/GaugeDataTest.java new file mode 100644 index 00000000000..20a3128d21e --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/GaugeDataTest.java @@ -0,0 +1,20 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Collections; +import org.junit.jupiter.api.Test; + +public class GaugeDataTest { + + @Test + void create() { + GaugeData gaugeData = GaugeData.create(Collections.emptyList()); + assertThat(gaugeData.getPoints()).isEmpty(); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramDataTest.java new file mode 100644 index 00000000000..f7d4942e89a --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramDataTest.java @@ -0,0 +1,23 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Collections; +import org.junit.jupiter.api.Test; + +public class HistogramDataTest { + + @Test + void create() { + HistogramData histogramData = + HistogramData.create(AggregationTemporality.CUMULATIVE, Collections.emptyList()); + assertThat(histogramData.getAggregationTemporality()) + .isEqualTo(AggregationTemporality.CUMULATIVE); + assertThat(histogramData.getPoints()).isEmpty(); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramPointDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramPointDataTest.java new file mode 100644 index 00000000000..e8ba3510582 --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramPointDataTest.java @@ -0,0 +1,41 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.common.collect.ImmutableList; +import io.opentelemetry.api.common.Attributes; +import java.util.ArrayList; +import org.junit.jupiter.api.Test; + +public class HistogramPointDataTest { + + @Test + void create() { + HistogramPointData pointData = + HistogramPointData.create( + 0, + 0, + Attributes.empty(), + 0.0, + /* hasMin= */ false, + 0.0, + /* hasMax= */ false, + 0.0, + new ArrayList<>(), + ImmutableList.of(0L)); + assertThat(pointData.getStartEpochNanos()).isEqualTo(0); + assertThat(pointData.getEpochNanos()).isEqualTo(0); + assertThat(pointData.getAttributes()).isEqualTo(Attributes.empty()); + assertThat(pointData.getSum()).isEqualTo(0.0); + assertThat(pointData.getCount()).isEqualTo(0); + assertThat(pointData.hasMin()).isFalse(); + assertThat(pointData.getMin()).isEqualTo(0.0); + assertThat(pointData.hasMax()).isFalse(); + assertThat(pointData.getMax()).isEqualTo(0.0); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongExemplarDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongExemplarDataTest.java new file mode 100644 index 00000000000..5e19f9f440c --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongExemplarDataTest.java @@ -0,0 +1,35 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.TraceFlags; +import io.opentelemetry.api.trace.TraceState; +import org.junit.jupiter.api.Test; + +public class LongExemplarDataTest { + + @Test + void create() { + Attributes attributes = Attributes.builder().put("test", "value").build(); + LongExemplarData exemplar = + LongExemplarData.create( + attributes, + 2L, + SpanContext.create( + "00000000000000000000000000000001", + "0000000000000002", + TraceFlags.getDefault(), + TraceState.getDefault()), + 1); + assertThat(exemplar.getFilteredAttributes()).isEqualTo(attributes); + assertThat(exemplar.getValue()).isEqualTo(1L); + assertThat(exemplar.getSpanContext()).isNotNull(); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongPointDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongPointDataTest.java new file mode 100644 index 00000000000..5ba002d7980 --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongPointDataTest.java @@ -0,0 +1,23 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.Attributes; +import org.junit.jupiter.api.Test; + +public class LongPointDataTest { + + @Test + void create() { + LongPointData pointData = LongPointData.create(0, 0, Attributes.empty(), 0); + assertThat(pointData.getStartEpochNanos()).isEqualTo(0); + assertThat(pointData.getEpochNanos()).isEqualTo(0); + assertThat(pointData.getAttributes()).isEqualTo(Attributes.empty()); + assertThat(pointData.getValue()).isEqualTo(0); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SumDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SumDataTest.java new file mode 100644 index 00000000000..02bc5f82fe1 --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SumDataTest.java @@ -0,0 +1,34 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Attributes; +import java.util.Collections; +import java.util.concurrent.TimeUnit; +import org.junit.jupiter.api.Test; + +public class SumDataTest { + + @Test + void create() { + long startEpochNanos = TimeUnit.MILLISECONDS.toNanos(1000); + long epochNanos = TimeUnit.MILLISECONDS.toNanos(2000); + long longValue = 10; + AttributeKey key = AttributeKey.stringKey("key"); + LongPointData longPoint = + LongPointData.create(startEpochNanos, epochNanos, Attributes.of(key, "value"), longValue); + SumData sumData = + SumData.create( + /* isMonotonic= */ false, + AggregationTemporality.CUMULATIVE, + Collections.singletonList(longPoint)); + assertThat(sumData.isMonotonic()).isFalse(); + assertThat(sumData.getAggregationTemporality()).isEqualTo(AggregationTemporality.CUMULATIVE); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryDataTest.java new file mode 100644 index 00000000000..465b1cb0f8f --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryDataTest.java @@ -0,0 +1,31 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryPointData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableValueAtQuantile; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Test; + +public class SummaryDataTest { + + @Test + void create() { + List percentileValues = + Arrays.asList(ImmutableValueAtQuantile.create(3.0, 4.0)); + List points = + Arrays.asList( + ImmutableSummaryPointData.create( + 12345, 12346, Attributes.empty(), 1, 2.0, percentileValues)); + SummaryData summary = ImmutableSummaryData.create(points); + assertThat(summary.getPoints()).isEqualTo(points); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryPointDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryPointDataTest.java new file mode 100644 index 00000000000..aa9c61e3041 --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryPointDataTest.java @@ -0,0 +1,38 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Attributes; +import java.util.Collections; +import java.util.concurrent.TimeUnit; +import org.junit.jupiter.api.Test; + +public class SummaryPointDataTest { + + @Test + void create() { + AttributeKey kvAttr = AttributeKey.stringKey("key"); + long startEpochNanos = TimeUnit.MILLISECONDS.toNanos(1000); + long epochNanos = TimeUnit.MILLISECONDS.toNanos(2000); + double sum = 10.0; + long count = 5; + SummaryPointData summaryPoint = + SummaryPointData.create( + startEpochNanos, + epochNanos, + Attributes.of(kvAttr, "value"), + count, + sum, + Collections.emptyList()); + assertThat(summaryPoint.getStartEpochNanos()).isEqualTo(startEpochNanos); + assertThat(summaryPoint.getEpochNanos()).isEqualTo(epochNanos); + assertThat(summaryPoint.getSum()).isEqualTo(sum); + assertThat(summaryPoint.getCount()).isEqualTo(count); + } +} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantileTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantileTest.java new file mode 100644 index 00000000000..151d9111cee --- /dev/null +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantileTest.java @@ -0,0 +1,20 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.metrics.data; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +public class ValueAtQuantileTest { + + @Test + void create() { + ValueAtQuantile valueAtQuantile = ValueAtQuantile.create(0.0, 1.1); + assertThat(valueAtQuantile.getQuantile()).isEqualTo(0.0); + assertThat(valueAtQuantile.getValue()).isEqualTo(1.1); + } +} diff --git a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/metrics/TestMetricData.java b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/metrics/TestMetricData.java new file mode 100644 index 00000000000..f09de005d3c --- /dev/null +++ b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/metrics/TestMetricData.java @@ -0,0 +1,104 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.sdk.testing.metrics; + +import com.google.auto.value.AutoValue; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.metrics.data.Data; +import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.metrics.data.MetricDataType; +import io.opentelemetry.sdk.resources.Resource; +import javax.annotation.concurrent.Immutable; + +/** + * Immutable representation of all data collected by the {@link + * io.opentelemetry.sdk.metrics.data.MetricData} class. + */ +@Immutable +@AutoValue +public abstract class TestMetricData implements MetricData { + public static Builder builder() { + return new AutoValue_TestMetricData.Builder() + .setResource(Resource.empty()) + .setName("name") + .setInstrumentationScopeInfo(InstrumentationScopeInfo.empty()) + .setDescription("description") + .setUnit("1"); + } + + /** A builder for {@link TestMetricData}. */ + @AutoValue.Builder + public abstract static class Builder { + abstract TestMetricData autoBuild(); + + /** + * Builds and returns a new {@link MetricData} instance from the data in {@code this}. + * + * @return a new {@link MetricData} instance. + */ + public TestMetricData build() { + return autoBuild(); + } + + /** + * Sets the resource of the metric. + * + * @param resource the resource of the metric. + * @return this. + */ + public abstract Builder setResource(Resource resource); + + /** + * Sets the name of the metric. + * + * @param name the name of the metric. + * @return this. + */ + public abstract Builder setName(String name); + + /** + * Sets the description of the metric. + * + * @param description the description of the metric. + * @return this. + */ + public abstract Builder setDescription(String description); + + /** + * Sets the unit of the metric. + * + * @param unit the unit of the metric. + * @return this. + */ + public abstract Builder setUnit(String unit); + + /** + * Sets the type of the metric. + * + * @param type the type of the metric. + * @return this. + */ + public abstract Builder setType(MetricDataType type); + + /** + * Sets the data of the metric. + * + * @param data the data of the metric. + * @return this. + */ + public abstract Builder setData(Data data); + + /** + * Sets the Instrumentation scope of the metric. + * + * @param instrumentationScopeInfo the instrumentation scope of the tracer which created this + * metric. + * @return this. + */ + public abstract Builder setInstrumentationScopeInfo( + InstrumentationScopeInfo instrumentationScopeInfo); + } +} From 52b440094d95a7d4b55a8e358d6afb5510b4ace7 Mon Sep 17 00:00:00 2001 From: Teja Date: Wed, 2 Apr 2025 08:09:11 -0400 Subject: [PATCH 2/6] removing the tag as per feedback. Co-authored-by: jack-berg <34418638+jack-berg@users.noreply.github.com> --- .../io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java index 90fcce38277..becd56cdf3e 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java @@ -35,7 +35,6 @@ * // } * } * - * @since 1.28.0 */ public abstract class DelegatingMetricData implements MetricData { From c6b6dcc4c566a4e0c7c287bdee934085cd6c6b40 Mon Sep 17 00:00:00 2001 From: Teja Date: Mon, 7 Apr 2025 22:36:33 -0400 Subject: [PATCH 3/6] polish: pr feedback and correcting the build. --- .../opentelemetry-exporter-common.txt | 2 +- .../opentelemetry-exporter-otlp.txt | 21 ++----------- ...y-exporter-sender-grpc-managed-channel.txt | 2 +- .../opentelemetry-exporter-sender-jdk.txt | 2 +- .../opentelemetry-exporter-sender-okhttp.txt | 2 +- .../opentelemetry-opentracing-shim.txt | 2 +- .../opentelemetry-sdk-common.txt | 2 +- .../opentelemetry-sdk-metrics.txt | 12 ++++---- .../opentelemetry-sdk-trace.txt | 2 +- .../metrics/data/DelegatingMetricData.java | 1 - .../sdk/metrics/data/DoubleExemplarData.java | 9 ------ .../sdk/metrics/data/DoublePointData.java | 19 ++++-------- .../data/ExponentialHistogramBuckets.java | 1 - .../data/ExponentialHistogramData.java | 1 - .../data/ExponentialHistogramPointData.java | 5 ---- .../sdk/metrics/data/GaugeData.java | 14 ++++----- .../sdk/metrics/data/HistogramData.java | 7 ----- .../sdk/metrics/data/HistogramPointData.java | 7 ----- .../sdk/metrics/data/LongExemplarData.java | 9 ------ .../sdk/metrics/data/LongPointData.java | 10 ------- .../sdk/metrics/data/SumData.java | 17 +++++------ .../sdk/metrics/data/SummaryData.java | 7 ----- .../sdk/metrics/data/SummaryPointData.java | 11 ------- .../sdk/metrics/data/ValueAtQuantile.java | 7 ----- .../sdk/metrics/data/DoublePointDataTest.java | 4 ++- .../sdk/metrics/data/GaugeDataTest.java | 18 +++++++++-- .../sdk/metrics/data/SumDataTest.java | 30 +++++++++++-------- .../sdk/testing/metrics/TestMetricData.java | 5 +--- 28 files changed, 70 insertions(+), 159 deletions(-) diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-common.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-common.txt index 570550ff81f..7d0a87106a1 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-common.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-common.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-common-1.49.0-SNAPSHOT.jar against opentelemetry-exporter-common-1.48.0.jar +Comparing source compatibility of opentelemetry-exporter-common-1.49.0-SNAPSHOT.jar against opentelemetry-exporter-common-1.49.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp.txt index 018e2e3884d..6b8b8138968 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp.txt @@ -1,19 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-otlp-1.49.0-SNAPSHOT.jar against opentelemetry-exporter-otlp-1.48.0.jar -*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder setExecutorService(java.util.concurrent.ExecutorService) -*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder setExecutorService(java.util.concurrent.ExecutorService) -*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder setExecutorService(java.util.concurrent.ExecutorService) -*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder setExecutorService(java.util.concurrent.ExecutorService) -*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder setExecutorService(java.util.concurrent.ExecutorService) -*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder setExecutorService(java.util.concurrent.ExecutorService) +Comparing source compatibility of opentelemetry-exporter-otlp-1.49.0-SNAPSHOT.jar against opentelemetry-exporter-otlp-1.49.0.jar +No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-grpc-managed-channel.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-grpc-managed-channel.txt index 9c3f334ad4d..af13368bb1e 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-grpc-managed-channel.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-grpc-managed-channel.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-sender-grpc-managed-channel-1.49.0-SNAPSHOT.jar against opentelemetry-exporter-sender-grpc-managed-channel-1.48.0.jar +Comparing source compatibility of opentelemetry-exporter-sender-grpc-managed-channel-1.49.0-SNAPSHOT.jar against opentelemetry-exporter-sender-grpc-managed-channel-1.49.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-jdk.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-jdk.txt index afe9b8526d5..687c6bcc1dd 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-jdk.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-jdk.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-sender-jdk-1.49.0-SNAPSHOT.jar against opentelemetry-exporter-sender-jdk-1.48.0.jar +Comparing source compatibility of opentelemetry-exporter-sender-jdk-1.49.0-SNAPSHOT.jar against opentelemetry-exporter-sender-jdk-1.49.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-okhttp.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-okhttp.txt index 0815487f216..a61f753a2f1 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-okhttp.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-okhttp.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-sender-okhttp-1.49.0-SNAPSHOT.jar against opentelemetry-exporter-sender-okhttp-1.48.0.jar +Comparing source compatibility of opentelemetry-exporter-sender-okhttp-1.49.0-SNAPSHOT.jar against opentelemetry-exporter-sender-okhttp-1.49.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-opentracing-shim.txt b/docs/apidiffs/current_vs_latest/opentelemetry-opentracing-shim.txt index 0c209995480..bf7b0b2c103 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-opentracing-shim.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-opentracing-shim.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-opentracing-shim-1.49.0-SNAPSHOT.jar against opentelemetry-opentracing-shim-1.48.0.jar +Comparing source compatibility of opentelemetry-opentracing-shim-1.49.0-SNAPSHOT.jar against opentelemetry-opentracing-shim-1.49.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-common.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-common.txt index 87bf61b8638..399fd73bb2f 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-common.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-common.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-sdk-common-1.49.0-SNAPSHOT.jar against opentelemetry-sdk-common-1.48.0.jar +Comparing source compatibility of opentelemetry-sdk-common-1.49.0-SNAPSHOT.jar against opentelemetry-sdk-common-1.49.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt index a418a824b47..af104ad8d7f 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt @@ -1,4 +1,4 @@ -Comparing source compatibility of opentelemetry-sdk-metrics-1.49.0-SNAPSHOT.jar against opentelemetry-sdk-metrics-1.48.0.jar +Comparing source compatibility of opentelemetry-sdk-metrics-1.49.0-SNAPSHOT.jar against opentelemetry-sdk-metrics-1.49.0.jar +++ NEW CLASS: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.metrics.data.DelegatingMetricData (not serializable) +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. +++ NEW INTERFACE: io.opentelemetry.sdk.metrics.data.MetricData @@ -18,7 +18,7 @@ Comparing source compatibility of opentelemetry-sdk-metrics-1.49.0-SNAPSHOT.jar +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.DoubleExemplarData create(io.opentelemetry.api.common.Attributes, long, io.opentelemetry.api.trace.SpanContext, double) *** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.DoublePointData (not serializable) === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.DoublePointData create(long, long, io.opentelemetry.api.common.Attributes, double) + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.DoublePointData create(long, long, io.opentelemetry.api.common.Attributes, double, java.util.List) *** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets (not serializable) === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets create(int, int, java.util.List) @@ -31,8 +31,8 @@ Comparing source compatibility of opentelemetry-sdk-metrics-1.49.0-SNAPSHOT.jar *** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.GaugeData (not serializable) === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 GENERIC TEMPLATES: === T:io.opentelemetry.sdk.metrics.data.PointData - +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.GaugeData create(java.util.Collection) - GENERIC TEMPLATES: +++ T:io.opentelemetry.sdk.metrics.data.PointData + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.GaugeData createDoubleGaugeData(java.util.Collection) + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.GaugeData createLongGaugeData(java.util.Collection) *** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.HistogramData (not serializable) === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.HistogramData create(io.opentelemetry.sdk.metrics.data.AggregationTemporality, java.util.Collection) @@ -48,8 +48,8 @@ Comparing source compatibility of opentelemetry-sdk-metrics-1.49.0-SNAPSHOT.jar *** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.SumData (not serializable) === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 GENERIC TEMPLATES: === T:io.opentelemetry.sdk.metrics.data.PointData - +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData create(boolean, io.opentelemetry.sdk.metrics.data.AggregationTemporality, java.util.Collection) - GENERIC TEMPLATES: +++ T:io.opentelemetry.sdk.metrics.data.PointData + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.SumData createDoubleSumData(boolean, io.opentelemetry.sdk.metrics.data.AggregationTemporality, java.util.Collection) + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.SumData createLongSumData(boolean, io.opentelemetry.sdk.metrics.data.AggregationTemporality, java.util.Collection) *** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.SummaryData (not serializable) === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.SummaryData create(java.util.Collection) diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt index b5c1d3c6dad..0f65a4d12f0 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-sdk-trace-1.49.0-SNAPSHOT.jar against opentelemetry-sdk-trace-1.48.0.jar +Comparing source compatibility of opentelemetry-sdk-trace-1.49.0-SNAPSHOT.jar against opentelemetry-sdk-trace-1.49.0.jar No changes. \ No newline at end of file diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java index becd56cdf3e..9840ec33724 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricData.java @@ -34,7 +34,6 @@ * // } * // } * } - * */ public abstract class DelegatingMetricData implements MetricData { diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarData.java index b67c0fde728..23cfad21d90 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarData.java @@ -18,15 +18,6 @@ @Immutable public interface DoubleExemplarData extends ExemplarData { - /** - * Construct a new exemplar. - * - * @param filteredAttributes The set of {@link Attributes} not already associated with the {@link - * PointData}. - * @param recordTimeNanos The time when the sample qas recorded in nanoseconds. - * @param spanContext The associated span context. - * @param value The value recorded. - */ static DoubleExemplarData create( Attributes filteredAttributes, long recordTimeNanos, SpanContext spanContext, double value) { return ImmutableDoubleExemplarData.create( diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoublePointData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoublePointData.java index 31e0d759bfd..e27a19496e6 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoublePointData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/DoublePointData.java @@ -7,7 +7,6 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.sdk.metrics.internal.data.ImmutableDoublePointData; -import java.util.Collections; import java.util.List; /** @@ -17,20 +16,14 @@ */ public interface DoublePointData extends PointData { - /** - * Creates a {@link DoublePointData}. - * - * @param startEpochNanos The starting time for the period where this point was sampled. Note: - * While start time is optional in OTLP, all SDKs should produce it for all their metrics, so - * it is required here. - * @param epochNanos The ending time for the period when this value was sampled. - * @param attributes The set of attributes associated with this point. - * @param value The value that was sampled. - */ static DoublePointData create( - long startEpochNanos, long epochNanos, Attributes attributes, double value) { + long startEpochNanos, + long epochNanos, + Attributes attributes, + double value, + List exemplars) { return ImmutableDoublePointData.create( - startEpochNanos, epochNanos, attributes, value, Collections.emptyList()); + startEpochNanos, epochNanos, attributes, value, exemplars); } /** Returns the value of the data point. */ diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBuckets.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBuckets.java index e966afb7394..087bd10bd00 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBuckets.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBuckets.java @@ -31,7 +31,6 @@ public interface ExponentialHistogramBuckets { * * @return a ExponentialHistogramBuckets. */ - @SuppressWarnings("TooManyParameters") static ExponentialHistogramBuckets create(int scale, int offset, List bucketCounts) { return ImmutableExponentialHistogramBuckets.create(scale, offset, bucketCounts); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramData.java index 261c95a6f18..8406ef632d5 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramData.java @@ -25,7 +25,6 @@ @Immutable public interface ExponentialHistogramData extends Data { - /** Returns a new {@link ExponentialHistogramData}. */ static ExponentialHistogramData create( AggregationTemporality temporality, Collection points) { return ImmutableExponentialHistogramData.create(temporality, points); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointData.java index 9bbf9b65e1d..8e3d271532c 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointData.java @@ -26,11 +26,6 @@ @Immutable public interface ExponentialHistogramPointData extends PointData { - /** - * Create a ExponentialHistogramPointData. - * - * @return a ExponentialHistogramPointData. - */ @SuppressWarnings("TooManyParameters") static ExponentialHistogramPointData create( int scale, diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/GaugeData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/GaugeData.java index 2520519c1dc..a1c56f51e7d 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/GaugeData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/GaugeData.java @@ -17,14 +17,12 @@ @Immutable public interface GaugeData extends Data { - /** - * Creates an instance of {@link GaugeData} with the given collection of points. - * - * @param the type of the point data - * @param points the collection of points to be included in the gauge data - * @return an instance of {@link ImmutableGaugeData} containing the provided points - */ - static GaugeData create(Collection points) { + // For double gauges + static GaugeData createDoubleGaugeData(Collection points) { + return ImmutableGaugeData.create(points); + } + + static GaugeData createLongGaugeData(Collection points) { return ImmutableGaugeData.create(points); } } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramData.java index 00ebc4af5b7..a315c9c0c38 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramData.java @@ -17,13 +17,6 @@ @Immutable public interface HistogramData extends Data { - /** - * Creates a new instance of {@link HistogramData}. - * - * @param temporality the aggregation temporality of the histogram data - * @param points the collection of histogram point data - * @return a new instance of {@link HistogramData} - */ static HistogramData create( AggregationTemporality temporality, Collection points) { return ImmutableHistogramData.create(temporality, points); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramPointData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramPointData.java index 8ad66b095cc..d6239284dca 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramPointData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/HistogramPointData.java @@ -19,13 +19,6 @@ @Immutable public interface HistogramPointData extends PointData { - /** - * Creates a HistogramPointData. For a Histogram with N defined boundaries, there should be N+1 - * counts. - * - * @return a HistogramPointData. - * @throws IllegalArgumentException if the given boundaries/counts were invalid - */ @SuppressWarnings("TooManyParameters") static HistogramPointData create( long startEpochNanos, diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongExemplarData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongExemplarData.java index a3b56a841dc..8bf9098258e 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongExemplarData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongExemplarData.java @@ -18,15 +18,6 @@ @Immutable public interface LongExemplarData extends ExemplarData { - /** - * Construct a new exemplar. - * - * @param filteredAttributes The set of {@link Attributes} not already associated with the {@link - * PointData}. - * @param recordTimeNanos The time when the sample qas recorded in nanoseconds. - * @param spanContext The associated span context. - * @param value The value recorded. - */ static LongExemplarData create( Attributes filteredAttributes, long recordTimeNanos, SpanContext spanContext, long value) { return ImmutableLongExemplarData.create( diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongPointData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongPointData.java index 115b56a3f5f..3aff3ea47bc 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongPointData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/LongPointData.java @@ -17,16 +17,6 @@ */ public interface LongPointData extends PointData { - /** - * Creates a {@link LongPointData}. - * - * @param startEpochNanos The starting time for the period where this point was sampled. Note: - * While start time is optional in OTLP, all SDKs should produce it for all their metrics, so - * it is required here. - * @param epochNanos The ending time for the period when this value was sampled. - * @param attributes The set of attributes associated with this point. - * @param value The value that was sampled. - */ static LongPointData create( long startEpochNanos, long epochNanos, Attributes attributes, long value) { return ImmutableLongPointData.create( diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SumData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SumData.java index e12d1f6750e..914671ee538 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SumData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SumData.java @@ -17,16 +17,13 @@ @Immutable public interface SumData extends Data { - /** - * Creates a new instance of {@link SumData}. - * - * @param isMonotonic {@code true} if the sum is monotonic. - * @param temporality the aggregation temporality of the sum data - * @param points the collection of sum point data - * @return a new instance of {@link SumData} - */ - static ImmutableSumData create( - boolean isMonotonic, AggregationTemporality temporality, Collection points) { + static SumData createLongSumData( + boolean isMonotonic, AggregationTemporality temporality, Collection points) { + return ImmutableSumData.create(isMonotonic, temporality, points); + } + + static SumData createDoubleSumData( + boolean isMonotonic, AggregationTemporality temporality, Collection points) { return ImmutableSumData.create(isMonotonic, temporality, points); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryData.java index b689daab666..3ecd0049c13 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryData.java @@ -17,13 +17,6 @@ @Immutable public interface SummaryData extends Data { - /** - * Creates a new instance of {@link SummaryData} with the given collection of {@link - * SummaryPointData}. - * - * @param points a collection of {@link SummaryPointData} to be included in the summary data - * @return a new instance of {@link SummaryData} containing the provided points - */ static SummaryData create(Collection points) { return ImmutableSummaryData.create(points); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryPointData.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryPointData.java index 3b38d197c4a..37df18d1c2b 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryPointData.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/SummaryPointData.java @@ -18,17 +18,6 @@ @Immutable public interface SummaryPointData extends PointData { - /** - * Creates a {@link SummaryPointData}. - * - * @param startEpochNanos (optional) The starting time for the period where this point was - * sampled. - * @param epochNanos The ending time for the period when this value was sampled. - * @param attributes The set of attributes associated with this point. - * @param count The number of measurements being sumarized. - * @param sum The sum of measuremnts being sumarized. - * @param percentileValues Calculations of percentile values from measurements. - */ static SummaryPointData create( long startEpochNanos, long epochNanos, diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantile.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantile.java index cadebed75e1..4df1339d4fe 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantile.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantile.java @@ -16,13 +16,6 @@ @Immutable public interface ValueAtQuantile { - /** - * Creates a new {@code ValueAtQuantile} instance with the specified quantile and value. - * - * @param quantile the quantile for which the value is being recorded - * @param value the value at the specified quantile - * @return a new {@code ValueAtQuantile} instance - */ static ValueAtQuantile create(double quantile, double value) { return ImmutableValueAtQuantile.create(quantile, value); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoublePointDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoublePointDataTest.java index c56639f18d8..85bde9ed89e 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoublePointDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoublePointDataTest.java @@ -8,6 +8,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.common.Attributes; +import java.util.Collections; import org.junit.jupiter.api.Test; public class DoublePointDataTest { @@ -15,7 +16,8 @@ public class DoublePointDataTest { @Test void create() { DoublePointData pointData = - DoublePointData.create(1, 2, Attributes.builder().put("key", "value1").build(), 3); + DoublePointData.create( + 1, 2, Attributes.builder().put("key", "value1").build(), 3, Collections.emptyList()); assertThat(pointData.getStartEpochNanos()).isEqualTo(1); assertThat(pointData.getEpochNanos()).isEqualTo(2); assertThat(pointData.getAttributes()) diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/GaugeDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/GaugeDataTest.java index 20a3128d21e..ff60c533af1 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/GaugeDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/GaugeDataTest.java @@ -7,14 +7,26 @@ import static org.assertj.core.api.Assertions.assertThat; +import io.opentelemetry.api.common.Attributes; import java.util.Collections; import org.junit.jupiter.api.Test; public class GaugeDataTest { @Test - void create() { - GaugeData gaugeData = GaugeData.create(Collections.emptyList()); - assertThat(gaugeData.getPoints()).isEmpty(); + void createLongGaugeData() { + LongPointData point = LongPointData.create(0, 0, Attributes.empty(), 1); + GaugeData gaugeData = + GaugeData.createLongGaugeData(Collections.singleton(point)); + assertThat(gaugeData.getPoints()).containsExactly(point); + } + + @Test + void createDoubleGaugeData() { + DoublePointData point = + DoublePointData.create(0, 0, Attributes.empty(), 1.0, Collections.emptyList()); + GaugeData gaugeData = + GaugeData.createDoubleGaugeData(Collections.singleton(point)); + assertThat(gaugeData.getPoints()).containsExactly(point); } } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SumDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SumDataTest.java index 02bc5f82fe1..05b1a02d8c3 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SumDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SumDataTest.java @@ -7,28 +7,32 @@ import static org.assertj.core.api.Assertions.assertThat; -import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import java.util.Collections; -import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test; public class SumDataTest { @Test - void create() { - long startEpochNanos = TimeUnit.MILLISECONDS.toNanos(1000); - long epochNanos = TimeUnit.MILLISECONDS.toNanos(2000); - long longValue = 10; - AttributeKey key = AttributeKey.stringKey("key"); - LongPointData longPoint = - LongPointData.create(startEpochNanos, epochNanos, Attributes.of(key, "value"), longValue); + void createLongSumData() { + LongPointData point = LongPointData.create(0, 0, Attributes.empty(), 1); SumData sumData = - SumData.create( + SumData.createLongSumData( /* isMonotonic= */ false, AggregationTemporality.CUMULATIVE, - Collections.singletonList(longPoint)); - assertThat(sumData.isMonotonic()).isFalse(); - assertThat(sumData.getAggregationTemporality()).isEqualTo(AggregationTemporality.CUMULATIVE); + Collections.singletonList(point)); + assertThat(sumData.getPoints()).containsExactly(point); + } + + @Test + void createDoubleSumData() { + DoublePointData point = + DoublePointData.create(0, 0, Attributes.empty(), 1.0, Collections.emptyList()); + SumData sumData = + SumData.createDoubleSumData( + /* isMonotonic= */ false, + AggregationTemporality.CUMULATIVE, + Collections.singletonList(point)); + assertThat(sumData.getPoints()).containsExactly(point); } } diff --git a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/metrics/TestMetricData.java b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/metrics/TestMetricData.java index f09de005d3c..177369b4fb0 100644 --- a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/metrics/TestMetricData.java +++ b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/metrics/TestMetricData.java @@ -23,10 +23,7 @@ public abstract class TestMetricData implements MetricData { public static Builder builder() { return new AutoValue_TestMetricData.Builder() .setResource(Resource.empty()) - .setName("name") - .setInstrumentationScopeInfo(InstrumentationScopeInfo.empty()) - .setDescription("description") - .setUnit("1"); + .setInstrumentationScopeInfo(InstrumentationScopeInfo.empty()); } /** A builder for {@link TestMetricData}. */ From 679dd73e2d05b83518b3d4ab5e3f796c4991bac3 Mon Sep 17 00:00:00 2001 From: Teja Date: Tue, 8 Apr 2025 23:06:50 -0400 Subject: [PATCH 4/6] polish: restructuring TestMetricData api. --- .../opentelemetry-sdk-metrics.txt | 61 +++++++++++- .../opentelemetry-sdk-testing.txt | 23 ++++- .../opentelemetry-sdk-trace.txt | 2 +- .../data/DelegatingMetricDataTest.java | 14 +-- .../sdk/testing/metrics/TestMetricData.java | 94 +++++++++---------- 5 files changed, 133 insertions(+), 61 deletions(-) diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt index 9060d4b3a5d..72a131718a9 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt @@ -1,2 +1,61 @@ Comparing source compatibility of opentelemetry-sdk-metrics-1.50.0-SNAPSHOT.jar against opentelemetry-sdk-metrics-1.49.0.jar -No changes. ++++ NEW CLASS: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.metrics.data.DelegatingMetricData (not serializable) + +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. + +++ NEW INTERFACE: io.opentelemetry.sdk.metrics.data.MetricData + +++ NEW SUPERCLASS: java.lang.Object + +++ NEW METHOD: PUBLIC(+) boolean equals(java.lang.Object) + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.metrics.data.Data getData() + +++ NEW METHOD: PUBLIC(+) java.lang.String getDescription() + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.common.InstrumentationScopeInfo getInstrumentationScopeInfo() + +++ NEW METHOD: PUBLIC(+) java.lang.String getName() + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.resources.Resource getResource() + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.metrics.data.MetricDataType getType() + +++ NEW METHOD: PUBLIC(+) java.lang.String getUnit() + +++ NEW METHOD: PUBLIC(+) int hashCode() + +++ NEW METHOD: PUBLIC(+) java.lang.String toString() +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.DoubleExemplarData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.DoubleExemplarData create(io.opentelemetry.api.common.Attributes, long, io.opentelemetry.api.trace.SpanContext, double) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.DoublePointData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.DoublePointData create(long, long, io.opentelemetry.api.common.Attributes, double, java.util.List) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets create(int, int, java.util.List) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.ExponentialHistogramData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.ExponentialHistogramData create(io.opentelemetry.sdk.metrics.data.AggregationTemporality, java.util.Collection) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.ExponentialHistogramPointData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.ExponentialHistogramPointData create(int, double, long, boolean, double, boolean, double, io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets, io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets, long, long, io.opentelemetry.api.common.Attributes, java.util.List) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.GaugeData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + GENERIC TEMPLATES: === T:io.opentelemetry.sdk.metrics.data.PointData + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.GaugeData createDoubleGaugeData(java.util.Collection) + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.GaugeData createLongGaugeData(java.util.Collection) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.HistogramData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.HistogramData create(io.opentelemetry.sdk.metrics.data.AggregationTemporality, java.util.Collection) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.HistogramPointData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.HistogramPointData create(long, long, io.opentelemetry.api.common.Attributes, double, boolean, double, boolean, double, java.util.List, java.util.List) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.LongExemplarData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.LongExemplarData create(io.opentelemetry.api.common.Attributes, long, io.opentelemetry.api.trace.SpanContext, long) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.LongPointData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.LongPointData create(long, long, io.opentelemetry.api.common.Attributes, long) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.SumData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + GENERIC TEMPLATES: === T:io.opentelemetry.sdk.metrics.data.PointData + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.SumData createDoubleSumData(boolean, io.opentelemetry.sdk.metrics.data.AggregationTemporality, java.util.Collection) + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.SumData createLongSumData(boolean, io.opentelemetry.sdk.metrics.data.AggregationTemporality, java.util.Collection) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.SummaryData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.SummaryData create(java.util.Collection) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.SummaryPointData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.SummaryPointData create(long, long, io.opentelemetry.api.common.Attributes, long, double, java.util.List) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.metrics.data.ValueAtQuantile (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.metrics.data.ValueAtQuantile create(double, double) diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt index 854ffc90a98..cdc87b76ae5 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt @@ -1,2 +1,23 @@ Comparing source compatibility of opentelemetry-sdk-testing-1.50.0-SNAPSHOT.jar against opentelemetry-sdk-testing-1.49.0.jar -No changes. ++++ NEW CLASS: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData (not serializable) + +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. + +++ NEW SUPERCLASS: java.lang.Object + +++ NEW CONSTRUCTOR: PUBLIC(+) TestMetricData() + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder builder() ++++ NEW CLASS: PUBLIC(+) ABSTRACT(+) STATIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder (not serializable) + +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. + +++ NEW SUPERCLASS: java.lang.Object + +++ NEW CONSTRUCTOR: PUBLIC(+) TestMetricData$Builder() + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData build() + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setDescription(java.lang.String) + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setDoubleGaugeData(io.opentelemetry.sdk.metrics.data.GaugeData) + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setDoubleSumData(io.opentelemetry.sdk.metrics.data.SumData) + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setExponentialHistogramData(io.opentelemetry.sdk.metrics.data.ExponentialHistogramData) + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setHistogramData(io.opentelemetry.sdk.metrics.data.HistogramData) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setInstrumentationScopeInfo(io.opentelemetry.sdk.common.InstrumentationScopeInfo) + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setLongGaugeData(io.opentelemetry.sdk.metrics.data.GaugeData) + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setLongSumData(io.opentelemetry.sdk.metrics.data.SumData) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setName(java.lang.String) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setResource(io.opentelemetry.sdk.resources.Resource) + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setSummaryData(io.opentelemetry.sdk.metrics.data.SummaryData) + +++ NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.testing.metrics.TestMetricData$Builder setUnit(java.lang.String) diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt index 0f65a4d12f0..86833bbeaa0 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-sdk-trace-1.49.0-SNAPSHOT.jar against opentelemetry-sdk-trace-1.49.0.jar +Comparing source compatibility of opentelemetry-sdk-trace-1.50.0-SNAPSHOT.jar against opentelemetry-sdk-trace-1.49.0.jar No changes. \ No newline at end of file diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricDataTest.java index 914bf8db1c9..3b3763ca6f5 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DelegatingMetricDataTest.java @@ -9,6 +9,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.testing.metrics.TestMetricData; @@ -108,8 +109,10 @@ void equals_differentUnit() { @Test void equals_differentType() { - MetricData metricData1 = createBasicMetricBuilder().setType(MetricDataType.SUMMARY).build(); - MetricData metricData2 = createBasicMetricBuilder().setType(MetricDataType.LONG_SUM).build(); + MetricData metricData1 = + createBasicMetricBuilder().setHistogramData(ImmutableHistogramData.empty()).build(); + MetricData metricData2 = + createBasicMetricBuilder().setSummaryData(ImmutableSummaryData.empty()).build(); MetricData noOpWrapper1 = new NoOpDelegatingMetricData(metricData1); MetricData noOpWrapper2 = new NoOpDelegatingMetricData(metricData2); @@ -119,9 +122,9 @@ void equals_differentType() { @Test void equals_differentData() { MetricData metricData1 = - createBasicMetricBuilder().setData(ImmutableSummaryData.empty()).build(); + createBasicMetricBuilder().setSummaryData(ImmutableSummaryData.empty()).build(); MetricData metricData2 = - createBasicMetricBuilder().setData(ImmutableSummaryData.empty()).build(); + createBasicMetricBuilder().setSummaryData(ImmutableSummaryData.empty()).build(); MetricData noOpWrapper1 = new NoOpDelegatingMetricData(metricData1); MetricData noOpWrapper2 = new NoOpDelegatingMetricData(metricData2); @@ -184,8 +187,7 @@ private static TestMetricData.Builder createBasicMetricBuilder() { .setDescription("") .setUnit("1") .setName("name") - .setData(ImmutableSummaryData.empty()) - .setType(MetricDataType.SUMMARY); // Not sure what type should be here + .setSummaryData(ImmutableSummaryData.empty()); } private static final class NoOpDelegatingMetricData extends DelegatingMetricData { diff --git a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/metrics/TestMetricData.java b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/metrics/TestMetricData.java index 177369b4fb0..adeb3f783f5 100644 --- a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/metrics/TestMetricData.java +++ b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/metrics/TestMetricData.java @@ -8,8 +8,15 @@ import com.google.auto.value.AutoValue; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.metrics.data.Data; +import io.opentelemetry.sdk.metrics.data.DoublePointData; +import io.opentelemetry.sdk.metrics.data.ExponentialHistogramData; +import io.opentelemetry.sdk.metrics.data.GaugeData; +import io.opentelemetry.sdk.metrics.data.HistogramData; +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.data.SumData; +import io.opentelemetry.sdk.metrics.data.SummaryData; import io.opentelemetry.sdk.resources.Resource; import javax.annotation.concurrent.Immutable; @@ -31,70 +38,53 @@ public static Builder builder() { public abstract static class Builder { abstract TestMetricData autoBuild(); - /** - * Builds and returns a new {@link MetricData} instance from the data in {@code this}. - * - * @return a new {@link MetricData} instance. - */ public TestMetricData build() { return autoBuild(); } - /** - * Sets the resource of the metric. - * - * @param resource the resource of the metric. - * @return this. - */ public abstract Builder setResource(Resource resource); - /** - * Sets the name of the metric. - * - * @param name the name of the metric. - * @return this. - */ public abstract Builder setName(String name); - /** - * Sets the description of the metric. - * - * @param description the description of the metric. - * @return this. - */ public abstract Builder setDescription(String description); - /** - * Sets the unit of the metric. - * - * @param unit the unit of the metric. - * @return this. - */ public abstract Builder setUnit(String unit); - /** - * Sets the type of the metric. - * - * @param type the type of the metric. - * @return this. - */ - public abstract Builder setType(MetricDataType type); - - /** - * Sets the data of the metric. - * - * @param data the data of the metric. - * @return this. - */ - public abstract Builder setData(Data data); - - /** - * Sets the Instrumentation scope of the metric. - * - * @param instrumentationScopeInfo the instrumentation scope of the tracer which created this - * metric. - * @return this. - */ + // Make setType package-private to restrict direct access + abstract Builder setType(MetricDataType type); + + // Keep the generic setData method for internal use + abstract Builder setData(Data data); + + // Add specific setData overloads for each metric data type + public Builder setExponentialHistogramData(ExponentialHistogramData data) { + return setType(MetricDataType.EXPONENTIAL_HISTOGRAM).setData(data); + } + + public Builder setHistogramData(HistogramData data) { + return setType(MetricDataType.HISTOGRAM).setData(data); + } + + public Builder setLongSumData(SumData data) { + return setType(MetricDataType.LONG_SUM).setData(data); + } + + public Builder setDoubleSumData(SumData data) { + return setType(MetricDataType.DOUBLE_SUM).setData(data); + } + + public Builder setDoubleGaugeData(GaugeData data) { + return setType(MetricDataType.DOUBLE_GAUGE).setData(data); + } + + public Builder setLongGaugeData(GaugeData data) { + return setType(MetricDataType.LONG_GAUGE).setData(data); + } + + public Builder setSummaryData(SummaryData data) { + return setType(MetricDataType.SUMMARY).setData(data); + } + public abstract Builder setInstrumentationScopeInfo( InstrumentationScopeInfo instrumentationScopeInfo); } From 919df870be8938d5de2837ce493be4d5b514d348 Mon Sep 17 00:00:00 2001 From: Teja Date: Thu, 10 Apr 2025 21:52:33 -0400 Subject: [PATCH 5/6] polish: restructuring code as pr feedback. --- .../metrics/data/ExponentialHistogramBuckets.java | 5 ----- .../sdk/metrics/data/DoubleExemplarDataTest.java | 2 +- .../sdk/metrics/data/DoublePointDataTest.java | 2 +- .../data/ExponentialHistogramBucketsTest.java | 2 +- .../metrics/data/ExponentialHistogramDataTest.java | 2 +- .../data/ExponentialHistogramPointDataTest.java | 2 +- .../sdk/metrics/data/GaugeDataTest.java | 2 +- .../sdk/metrics/data/HistogramDataTest.java | 2 +- .../sdk/metrics/data/HistogramPointDataTest.java | 14 +++++++------- .../sdk/metrics/data/LongExemplarDataTest.java | 2 +- .../sdk/metrics/data/LongPointDataTest.java | 2 +- .../sdk/metrics/data/SumDataTest.java | 2 +- .../sdk/metrics/data/SummaryDataTest.java | 8 ++++---- .../sdk/metrics/data/SummaryPointDataTest.java | 2 +- .../sdk/metrics/data/ValueAtQuantileTest.java | 2 +- 15 files changed, 23 insertions(+), 28 deletions(-) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBuckets.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBuckets.java index 087bd10bd00..22e2addb0c3 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBuckets.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBuckets.java @@ -26,11 +26,6 @@ @Immutable public interface ExponentialHistogramBuckets { - /** - * Create a ExponentialHistogramBuckets. - * - * @return a ExponentialHistogramBuckets. - */ static ExponentialHistogramBuckets create(int scale, int offset, List bucketCounts) { return ImmutableExponentialHistogramBuckets.create(scale, offset, bucketCounts); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java index 77b66aa8f6c..759a4d33200 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java @@ -14,7 +14,7 @@ import io.opentelemetry.api.trace.TraceState; import org.junit.jupiter.api.Test; -public class DoubleExemplarDataTest { +class DoubleExemplarDataTest { private static final String TRACE_ID = "00000000000000000000000000000061"; private static final String SPAN_ID = "0000000000000061"; diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoublePointDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoublePointDataTest.java index 85bde9ed89e..c44c0dde2a3 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoublePointDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoublePointDataTest.java @@ -11,7 +11,7 @@ import java.util.Collections; import org.junit.jupiter.api.Test; -public class DoublePointDataTest { +class DoublePointDataTest { @Test void create() { diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBucketsTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBucketsTest.java index e1f919287ad..f496ec04548 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBucketsTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramBucketsTest.java @@ -10,7 +10,7 @@ import java.util.Arrays; import org.junit.jupiter.api.Test; -public class ExponentialHistogramBucketsTest { +class ExponentialHistogramBucketsTest { @Test void create() { diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramDataTest.java index e1723e3f290..28664f07cbd 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramDataTest.java @@ -10,7 +10,7 @@ import java.util.Collections; import org.junit.jupiter.api.Test; -public class ExponentialHistogramDataTest { +class ExponentialHistogramDataTest { @Test void create() { diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointDataTest.java index 01a0439933a..2e066af2e0a 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ExponentialHistogramPointDataTest.java @@ -17,7 +17,7 @@ import java.util.Collections; import org.junit.jupiter.api.Test; -public class ExponentialHistogramPointDataTest { +class ExponentialHistogramPointDataTest { @Test void create() { diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/GaugeDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/GaugeDataTest.java index ff60c533af1..85e3c73e3d7 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/GaugeDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/GaugeDataTest.java @@ -11,7 +11,7 @@ import java.util.Collections; import org.junit.jupiter.api.Test; -public class GaugeDataTest { +class GaugeDataTest { @Test void createLongGaugeData() { diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramDataTest.java index f7d4942e89a..ca131e125bc 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramDataTest.java @@ -10,7 +10,7 @@ import java.util.Collections; import org.junit.jupiter.api.Test; -public class HistogramDataTest { +class HistogramDataTest { @Test void create() { diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramPointDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramPointDataTest.java index e8ba3510582..72b132fbc88 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramPointDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/HistogramPointDataTest.java @@ -12,7 +12,7 @@ import java.util.ArrayList; import org.junit.jupiter.api.Test; -public class HistogramPointDataTest { +class HistogramPointDataTest { @Test void create() { @@ -21,21 +21,21 @@ void create() { 0, 0, Attributes.empty(), - 0.0, + 3.0, /* hasMin= */ false, - 0.0, + 1.0, /* hasMax= */ false, - 0.0, + 2.0, new ArrayList<>(), ImmutableList.of(0L)); assertThat(pointData.getStartEpochNanos()).isEqualTo(0); assertThat(pointData.getEpochNanos()).isEqualTo(0); assertThat(pointData.getAttributes()).isEqualTo(Attributes.empty()); - assertThat(pointData.getSum()).isEqualTo(0.0); + assertThat(pointData.getSum()).isEqualTo(3.0); assertThat(pointData.getCount()).isEqualTo(0); assertThat(pointData.hasMin()).isFalse(); - assertThat(pointData.getMin()).isEqualTo(0.0); + assertThat(pointData.getMin()).isEqualTo(1.0); assertThat(pointData.hasMax()).isFalse(); - assertThat(pointData.getMax()).isEqualTo(0.0); + assertThat(pointData.getMax()).isEqualTo(2.0); } } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongExemplarDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongExemplarDataTest.java index 5e19f9f440c..25da1c9e24e 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongExemplarDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongExemplarDataTest.java @@ -13,7 +13,7 @@ import io.opentelemetry.api.trace.TraceState; import org.junit.jupiter.api.Test; -public class LongExemplarDataTest { +class LongExemplarDataTest { @Test void create() { diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongPointDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongPointDataTest.java index 5ba002d7980..7685ff2968e 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongPointDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/LongPointDataTest.java @@ -10,7 +10,7 @@ import io.opentelemetry.api.common.Attributes; import org.junit.jupiter.api.Test; -public class LongPointDataTest { +class LongPointDataTest { @Test void create() { diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SumDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SumDataTest.java index 05b1a02d8c3..96f959d52ab 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SumDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SumDataTest.java @@ -11,7 +11,7 @@ import java.util.Collections; import org.junit.jupiter.api.Test; -public class SumDataTest { +class SumDataTest { @Test void createLongSumData() { diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryDataTest.java index 465b1cb0f8f..729b3bf5119 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryDataTest.java @@ -11,18 +11,18 @@ import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryPointData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableValueAtQuantile; -import java.util.Arrays; +import java.util.Collections; import java.util.List; import org.junit.jupiter.api.Test; -public class SummaryDataTest { +class SummaryDataTest { @Test void create() { List percentileValues = - Arrays.asList(ImmutableValueAtQuantile.create(3.0, 4.0)); + Collections.singletonList(ImmutableValueAtQuantile.create(3.0, 4.0)); List points = - Arrays.asList( + Collections.singletonList( ImmutableSummaryPointData.create( 12345, 12346, Attributes.empty(), 1, 2.0, percentileValues)); SummaryData summary = ImmutableSummaryData.create(points); diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryPointDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryPointDataTest.java index aa9c61e3041..08ba69bac55 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryPointDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/SummaryPointDataTest.java @@ -13,7 +13,7 @@ import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test; -public class SummaryPointDataTest { +class SummaryPointDataTest { @Test void create() { diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantileTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantileTest.java index 151d9111cee..ffcd37cc5da 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantileTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/ValueAtQuantileTest.java @@ -9,7 +9,7 @@ import org.junit.jupiter.api.Test; -public class ValueAtQuantileTest { +class ValueAtQuantileTest { @Test void create() { From 055fe19efca0994b1a929bbe92d62933f11d3612 Mon Sep 17 00:00:00 2001 From: Teja Date: Thu, 10 Apr 2025 21:55:02 -0400 Subject: [PATCH 6/6] polish: removing the extra comment. --- .../opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java index 759a4d33200..ec3d8d31d03 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/data/DoubleExemplarDataTest.java @@ -33,7 +33,7 @@ void create() { DoubleExemplarData.create( Attributes.builder().put("key", "value1").build(), // attributes 1, // epochNanos - /* spanContext= */ spanContext, // spanContext + /* spanContext= */ spanContext, /* value= */ 2.0); assertThat(exemplarData.getValue()).isEqualTo(2.0); assertThat(exemplarData.getEpochNanos()).isEqualTo(1);