Do not register periodic metric reader when exporter is null (#4166)
This commit is contained in:
parent
b9074f1d8b
commit
3f5778e647
|
|
@ -57,6 +57,11 @@ final class MetricExporterConfiguration {
|
||||||
metricExporter = spiExporter;
|
metricExporter = spiExporter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// exporter may be null in otlp case
|
||||||
|
if (metricExporter == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
metricExporter = metricExporterCustomizer.apply(metricExporter, config);
|
metricExporter = metricExporterCustomizer.apply(metricExporter, config);
|
||||||
sdkMeterProviderBuilder.registerMetricReader(
|
sdkMeterProviderBuilder.registerMetricReader(
|
||||||
configurePeriodicMetricReader(config, metricExporter));
|
configurePeriodicMetricReader(config, metricExporter));
|
||||||
|
|
|
||||||
|
|
@ -5,17 +5,27 @@
|
||||||
|
|
||||||
package io.opentelemetry.sdk.autoconfigure;
|
package io.opentelemetry.sdk.autoconfigure;
|
||||||
|
|
||||||
|
import static io.opentelemetry.sdk.autoconfigure.OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF;
|
||||||
|
import static org.assertj.core.api.Assertions.as;
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.Mockito.never;
|
||||||
|
import static org.mockito.Mockito.spy;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
|
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
|
||||||
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
|
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
|
||||||
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
|
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
|
||||||
|
import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
|
||||||
import io.opentelemetry.sdk.metrics.export.MetricExporter;
|
import io.opentelemetry.sdk.metrics.export.MetricExporter;
|
||||||
|
import io.opentelemetry.sdk.metrics.export.MetricReaderFactory;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
import org.assertj.core.api.InstanceOfAssertFactories;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
public class ConfigurableMetricExporterTest {
|
public class ConfigurableMetricExporterTest {
|
||||||
|
|
@ -61,4 +71,36 @@ public class ConfigurableMetricExporterTest {
|
||||||
.isInstanceOf(ConfigurationException.class)
|
.isInstanceOf(ConfigurationException.class)
|
||||||
.hasMessageContaining("catExporter");
|
.hasMessageContaining("catExporter");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void configureExporter_OtlpHttpExporterNotOnClasspath() {
|
||||||
|
// Use the OTLP http/protobuf exporter which is not on the classpath
|
||||||
|
ConfigProperties configProperties =
|
||||||
|
DefaultConfigProperties.createForTest(
|
||||||
|
ImmutableMap.of("otel.exporter.otlp.protocol", PROTOCOL_HTTP_PROTOBUF));
|
||||||
|
SdkMeterProviderBuilder meterProviderBuilder = SdkMeterProvider.builder();
|
||||||
|
BiFunction<? super MetricExporter, ConfigProperties, ? extends MetricExporter>
|
||||||
|
metricCustomizer =
|
||||||
|
spy(
|
||||||
|
new BiFunction<MetricExporter, ConfigProperties, MetricExporter>() {
|
||||||
|
@Override
|
||||||
|
public MetricExporter apply(
|
||||||
|
MetricExporter metricExporter, ConfigProperties configProperties) {
|
||||||
|
return metricExporter;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
MetricExporterConfiguration.configureExporter(
|
||||||
|
"otlp",
|
||||||
|
configProperties,
|
||||||
|
MetricExporterConfiguration.class.getClassLoader(),
|
||||||
|
meterProviderBuilder,
|
||||||
|
metricCustomizer);
|
||||||
|
|
||||||
|
// Should not call customizer or register a metric reader
|
||||||
|
verify(metricCustomizer, never()).apply(any(), any());
|
||||||
|
assertThat(meterProviderBuilder)
|
||||||
|
.extracting("metricReaders", as(InstanceOfAssertFactories.list(MetricReaderFactory.class)))
|
||||||
|
.hasSize(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue