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);
|
||||
}
|
||||
|
||||
@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
|
||||
public void performBound() {
|
||||
boundMetric.record(5.0d);
|
||||
|
|
|
|||
|
|
@ -8,13 +8,13 @@ package io.opentelemetry.sdk.metrics;
|
|||
import io.opentelemetry.api.metrics.Meter;
|
||||
import io.opentelemetry.api.metrics.MeterProvider;
|
||||
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.data.AggregationTemporality;
|
||||
import io.opentelemetry.sdk.metrics.view.InstrumentSelector;
|
||||
import io.opentelemetry.sdk.metrics.view.View;
|
||||
import io.opentelemetry.sdk.resources.Resource;
|
||||
import java.util.EnumMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.Arrays;
|
||||
|
||||
@SuppressWarnings("ImmutableEnumChecker")
|
||||
public enum TestSdk {
|
||||
|
|
@ -29,17 +29,25 @@ public enum TestSdk {
|
|||
new SdkBuilder() {
|
||||
@Override
|
||||
Meter build() {
|
||||
MeterProviderSharedState meterProviderSharedState =
|
||||
MeterProviderSharedState.create(
|
||||
Clock.getDefault(),
|
||||
Resource.empty(),
|
||||
new ViewRegistry(
|
||||
new EnumMap<InstrumentType, LinkedHashMap<Pattern, View>>(
|
||||
InstrumentType.class)));
|
||||
InstrumentationLibraryInfo instrumentationLibraryInfo =
|
||||
InstrumentationLibraryInfo.create("io.opentelemetry.sdk.metrics", null);
|
||||
|
||||
return new SdkMeter(meterProviderSharedState, instrumentationLibraryInfo);
|
||||
return SdkMeterProvider.builder()
|
||||
.setClock(Clock.getDefault())
|
||||
.setResource(Resource.empty())
|
||||
.registerView(
|
||||
InstrumentSelector.builder()
|
||||
.setInstrumentNameRegex(".*histogram_recorder")
|
||||
.setInstrumentType(InstrumentType.VALUE_RECORDER)
|
||||
.build(),
|
||||
// Histogram buckets the same as the metrics prototype/prometheus.
|
||||
View.builder()
|
||||
.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