Micrometer bridge: interpret no SLO config as no buckets advice (#8856)
This commit is contained in:
parent
2dc77a2613
commit
d875d997c1
|
@ -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<Double> buckets = config.getHistogramBuckets(false);
|
||||
ExtendedDoubleHistogramBuilder extendedBuilder = (ExtendedDoubleHistogramBuilder) builder;
|
||||
extendedBuilder.setAdvice(
|
||||
advice -> advice.setExplicitBucketBoundaries(computeBuckets(buckets, timeUnit)));
|
||||
}
|
||||
|
||||
private static List<Double> computeBuckets(double[] buckets, @Nullable TimeUnit timeUnit) {
|
||||
if (buckets.length == 0) {
|
||||
private static List<Double> computeBuckets(
|
||||
NavigableSet<Double> 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<Double> result = new ArrayList<>(buckets.length);
|
||||
List<Double> result = new ArrayList<>(buckets.size());
|
||||
for (double b : buckets) {
|
||||
result.add(b * timeUnitMultiplier);
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue