99import static io .opentelemetry .exporter .otlp .internal .OtlpConfigUtil .PROTOCOL_GRPC ;
1010import static io .opentelemetry .exporter .otlp .internal .OtlpConfigUtil .PROTOCOL_HTTP_PROTOBUF ;
1111
12+ import io .opentelemetry .api .metrics .MeterProvider ;
1213import io .opentelemetry .exporter .internal .ExporterBuilderUtil ;
1314import io .opentelemetry .exporter .otlp .http .metrics .OtlpHttpMetricExporter ;
1415import io .opentelemetry .exporter .otlp .http .metrics .OtlpHttpMetricExporterBuilder ;
1516import io .opentelemetry .exporter .otlp .metrics .OtlpGrpcMetricExporter ;
1617import io .opentelemetry .exporter .otlp .metrics .OtlpGrpcMetricExporterBuilder ;
18+ import io .opentelemetry .sdk .OpenTelemetrySdk ;
1719import io .opentelemetry .sdk .autoconfigure .spi .ConfigProperties ;
1820import io .opentelemetry .sdk .autoconfigure .spi .ConfigurationException ;
21+ import io .opentelemetry .sdk .autoconfigure .spi .internal .AutoConfigureListener ;
1922import io .opentelemetry .sdk .autoconfigure .spi .metrics .ConfigurableMetricExporterProvider ;
2023import io .opentelemetry .sdk .metrics .export .MetricExporter ;
24+ import java .util .concurrent .atomic .AtomicReference ;
2125
2226/**
2327 * {@link MetricExporter} SPI implementation for {@link OtlpGrpcMetricExporter} and {@link
2630 * <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
2731 * at any time.
2832 */
29- public class OtlpMetricExporterProvider implements ConfigurableMetricExporterProvider {
33+ public class OtlpMetricExporterProvider implements ConfigurableMetricExporterProvider ,
34+ AutoConfigureListener {
35+
36+ private final AtomicReference <MeterProvider > meterProviderRef =
37+ new AtomicReference <>(MeterProvider .noop ());
3038
3139 @ Override
3240 public MetricExporter createExporter (ConfigProperties config ) {
@@ -51,6 +59,7 @@ public MetricExporter createExporter(ConfigProperties config) {
5159 config , builder ::setAggregationTemporalitySelector );
5260 ExporterBuilderUtil .configureOtlpHistogramDefaultAggregation (
5361 config , builder ::setDefaultAggregationSelector );
62+ builder .setMeterProvider (meterProviderRef ::get );
5463
5564 return builder .build ();
5665 } else if (protocol .equals (PROTOCOL_GRPC )) {
@@ -72,6 +81,7 @@ public MetricExporter createExporter(ConfigProperties config) {
7281 config , builder ::setAggregationTemporalitySelector );
7382 ExporterBuilderUtil .configureOtlpHistogramDefaultAggregation (
7483 config , builder ::setDefaultAggregationSelector );
84+ builder .setMeterProvider (meterProviderRef ::get );
7585
7686 return builder .build ();
7787 }
@@ -92,4 +102,9 @@ OtlpHttpMetricExporterBuilder httpBuilder() {
92102 OtlpGrpcMetricExporterBuilder grpcBuilder () {
93103 return OtlpGrpcMetricExporter .builder ();
94104 }
105+
106+ @ Override
107+ public void afterAutoConfigure (OpenTelemetrySdk sdk ) {
108+ meterProviderRef .set (sdk .getMeterProvider ());
109+ }
95110}
0 commit comments