Fixes #3392 - Metric benchmark no longer throws NPE, and add 'realistic' histogram benchmark for comparison against prototype. (#3393)

This commit is contained in:
Josh Suereth 2021-07-12 11:18:16 -04:00 committed by GitHub
parent ae4bb364cd
commit 45b73debe8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 15 deletions

View File

@ -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);

View File

@ -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");
}
});