From d875d997c139b0eb3fea54fa7c092041fe475de6 Mon Sep 17 00:00:00 2001 From: Mateusz Rzeszutek Date: Wed, 5 Jul 2023 18:55:46 +0200 Subject: [PATCH] Micrometer bridge: interpret no SLO config as no buckets advice (#8856) --- .../micrometer/v1_5/HistogramAdviceUtil.java | 12 +++++++----- .../v1_5/AbstractDistributionSummaryTest.java | 8 ++------ .../micrometer/v1_5/AbstractTimerTest.java | 8 ++------ 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/instrumentation/micrometer/micrometer-1.5/library/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/HistogramAdviceUtil.java b/instrumentation/micrometer/micrometer-1.5/library/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/HistogramAdviceUtil.java index 2816791895..8ae5037e82 100644 --- a/instrumentation/micrometer/micrometer-1.5/library/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/HistogramAdviceUtil.java +++ b/instrumentation/micrometer/micrometer-1.5/library/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/HistogramAdviceUtil.java @@ -13,6 +13,7 @@ import io.opentelemetry.api.metrics.DoubleHistogramBuilder; import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder; import java.util.ArrayList; import java.util.List; +import java.util.NavigableSet; import java.util.concurrent.TimeUnit; import javax.annotation.Nullable; @@ -27,22 +28,23 @@ final class HistogramAdviceUtil { DoubleHistogramBuilder builder, DistributionStatisticConfig config, @Nullable TimeUnit timeUnit) { - double[] buckets = config.getServiceLevelObjectiveBoundaries(); - if (buckets == null || !(builder instanceof ExtendedDoubleHistogramBuilder)) { + if (!(builder instanceof ExtendedDoubleHistogramBuilder)) { return; } + NavigableSet buckets = config.getHistogramBuckets(false); ExtendedDoubleHistogramBuilder extendedBuilder = (ExtendedDoubleHistogramBuilder) builder; extendedBuilder.setAdvice( advice -> advice.setExplicitBucketBoundaries(computeBuckets(buckets, timeUnit))); } - private static List computeBuckets(double[] buckets, @Nullable TimeUnit timeUnit) { - if (buckets.length == 0) { + private static List computeBuckets( + NavigableSet buckets, @Nullable TimeUnit timeUnit) { + if (buckets.isEmpty()) { return emptyList(); } // micrometer Timers always specify buckets in nanoseconds, we need to convert them to base unit double timeUnitMultiplier = timeUnit == null ? 1.0 : TimeUtils.nanosToUnit(1, timeUnit); - List result = new ArrayList<>(buckets.length); + List result = new ArrayList<>(buckets.size()); for (double b : buckets) { result.add(b * timeUnitMultiplier); } diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java index 324adae506..44ec095107 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java @@ -12,17 +12,13 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.attri import io.micrometer.core.instrument.DistributionSummary; import io.micrometer.core.instrument.Metrics; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; -import io.opentelemetry.sdk.metrics.internal.aggregator.ExplicitBucketHistogramUtils; import org.assertj.core.api.AbstractIterableAssert; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public abstract class AbstractDistributionSummaryTest { - static final double[] DEFAULT_BUCKETS = - ExplicitBucketHistogramUtils.DEFAULT_HISTOGRAM_BUCKET_BOUNDARIES.stream() - .mapToDouble(d -> d) - .toArray(); + static final double[] NO_BUCKETS = new double[0]; protected abstract InstrumentationExtension testing(); @@ -65,7 +61,7 @@ public abstract class AbstractDistributionSummaryTest { .hasSum(7) .hasCount(3) .hasAttributes(attributeEntry("tag", "value")) - .hasBucketBoundaries(DEFAULT_BUCKETS))))); + .hasBucketBoundaries(NO_BUCKETS))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java index 50e1264255..de6f29b332 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java @@ -15,7 +15,6 @@ import io.micrometer.core.instrument.Timer; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.sdk.metrics.data.HistogramPointData; -import io.opentelemetry.sdk.metrics.internal.aggregator.ExplicitBucketHistogramUtils; import java.time.Duration; import java.util.concurrent.TimeUnit; import org.assertj.core.api.AbstractIterableAssert; @@ -25,10 +24,7 @@ import org.junit.jupiter.api.Test; @SuppressWarnings("PreferJavaTimeOverload") public abstract class AbstractTimerTest { - static final double[] DEFAULT_BUCKETS = - ExplicitBucketHistogramUtils.DEFAULT_HISTOGRAM_BUCKET_BOUNDARIES.stream() - .mapToDouble(d -> d) - .toArray(); + static final double[] NO_BUCKETS = new double[0]; protected abstract InstrumentationExtension testing(); @@ -63,7 +59,7 @@ public abstract class AbstractTimerTest { .hasSum(42) .hasCount(1) .hasAttributes(attributeEntry("tag", "value")) - .hasBucketBoundaries(DEFAULT_BUCKETS))))); + .hasBucketBoundaries(NO_BUCKETS))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME,