Fixes #3392 - Metric benchmark no longer throws NPE, and add 'realistic' histogram benchmark for comparison against prototype. (#3393)
This commit is contained in:
parent
ae4bb364cd
commit
45b73debe8
|
|
@ -82,6 +82,28 @@ public enum MetricsTestOperationBuilder {
|
||||||
metric.record(5.0d, labels);
|
metric.record(5.0d, labels);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void performBound() {
|
||||||
|
boundMetric.record(5.0d);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
DoubleHistogramRecorderRecord(
|
||||||
|
meter -> {
|
||||||
|
return new Operation() {
|
||||||
|
final DoubleValueRecorder metric =
|
||||||
|
meter.doubleValueRecorderBuilder("double_histogram_recorder").build();
|
||||||
|
final BoundDoubleValueRecorder boundMetric =
|
||||||
|
meter
|
||||||
|
.doubleValueRecorderBuilder("bound_double_histogram_recorder")
|
||||||
|
.build()
|
||||||
|
.bind(Labels.of("KEY", "VALUE"));
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void perform(Labels labels) {
|
||||||
|
metric.record(5.0d, labels);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void performBound() {
|
public void performBound() {
|
||||||
boundMetric.record(5.0d);
|
boundMetric.record(5.0d);
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,13 @@ package io.opentelemetry.sdk.metrics;
|
||||||
import io.opentelemetry.api.metrics.Meter;
|
import io.opentelemetry.api.metrics.Meter;
|
||||||
import io.opentelemetry.api.metrics.MeterProvider;
|
import io.opentelemetry.api.metrics.MeterProvider;
|
||||||
import io.opentelemetry.sdk.common.Clock;
|
import io.opentelemetry.sdk.common.Clock;
|
||||||
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
|
import io.opentelemetry.sdk.metrics.aggregator.AggregatorFactory;
|
||||||
import io.opentelemetry.sdk.metrics.common.InstrumentType;
|
import io.opentelemetry.sdk.metrics.common.InstrumentType;
|
||||||
|
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
|
||||||
|
import io.opentelemetry.sdk.metrics.view.InstrumentSelector;
|
||||||
import io.opentelemetry.sdk.metrics.view.View;
|
import io.opentelemetry.sdk.metrics.view.View;
|
||||||
import io.opentelemetry.sdk.resources.Resource;
|
import io.opentelemetry.sdk.resources.Resource;
|
||||||
import java.util.EnumMap;
|
import java.util.Arrays;
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
@SuppressWarnings("ImmutableEnumChecker")
|
@SuppressWarnings("ImmutableEnumChecker")
|
||||||
public enum TestSdk {
|
public enum TestSdk {
|
||||||
|
|
@ -29,17 +29,25 @@ public enum TestSdk {
|
||||||
new SdkBuilder() {
|
new SdkBuilder() {
|
||||||
@Override
|
@Override
|
||||||
Meter build() {
|
Meter build() {
|
||||||
MeterProviderSharedState meterProviderSharedState =
|
return SdkMeterProvider.builder()
|
||||||
MeterProviderSharedState.create(
|
.setClock(Clock.getDefault())
|
||||||
Clock.getDefault(),
|
.setResource(Resource.empty())
|
||||||
Resource.empty(),
|
.registerView(
|
||||||
new ViewRegistry(
|
InstrumentSelector.builder()
|
||||||
new EnumMap<InstrumentType, LinkedHashMap<Pattern, View>>(
|
.setInstrumentNameRegex(".*histogram_recorder")
|
||||||
InstrumentType.class)));
|
.setInstrumentType(InstrumentType.VALUE_RECORDER)
|
||||||
InstrumentationLibraryInfo instrumentationLibraryInfo =
|
.build(),
|
||||||
InstrumentationLibraryInfo.create("io.opentelemetry.sdk.metrics", null);
|
// Histogram buckets the same as the metrics prototype/prometheus.
|
||||||
|
View.builder()
|
||||||
return new SdkMeter(meterProviderSharedState, instrumentationLibraryInfo);
|
.setAggregatorFactory(
|
||||||
|
AggregatorFactory.histogram(
|
||||||
|
Arrays.<Double>asList(
|
||||||
|
5d, 10d, 25d, 50d, 75d, 100d, 250d, 500d, 750d, 1_000d, 2_500d,
|
||||||
|
5_000d, 7_500d, 10_000d),
|
||||||
|
AggregationTemporality.CUMULATIVE))
|
||||||
|
.build())
|
||||||
|
.build()
|
||||||
|
.get("io.opentelemetry.sdk.metrics");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue