diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java index 9cc697ecaea..1f1152d6c5f 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.incubator.config.DeclarativeConfigException; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper; import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; import java.io.Closeable; @@ -15,12 +16,14 @@ import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; +import javax.annotation.Nullable; /** Declarative configuration context and state carrier. */ class DeclarativeConfigContext { private final SpiHelper spiHelper; private final List closeables = new ArrayList<>(); + @Nullable private MeterProvider meterProvider; DeclarativeConfigContext(SpiHelper spiHelper) { this.spiHelper = spiHelper; @@ -39,6 +42,15 @@ List getCloseables() { return Collections.unmodifiableList(closeables); } + @Nullable + public MeterProvider getMeterProvider() { + return meterProvider; + } + + public void setMeterProvider(MeterProvider meterProvider) { + this.meterProvider = meterProvider; + } + /** * Find a registered {@link ComponentProvider} with {@link ComponentProvider#getType()} matching * {@code type}, {@link ComponentProvider#getName()} matching {@code name}, and call {@link diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordProcessorFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordProcessorFactory.java index 20f271a5568..e898fe6efe9 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordProcessorFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordProcessorFactory.java @@ -5,6 +5,7 @@ package io.opentelemetry.sdk.extension.incubator.fileconfig; +import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchLogRecordProcessorModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporterModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordProcessorModel; @@ -52,6 +53,10 @@ public LogRecordProcessor create( if (batchModel.getScheduleDelay() != null) { builder.setScheduleDelay(Duration.ofMillis(batchModel.getScheduleDelay())); } + MeterProvider meterProvider = context.getMeterProvider(); + if (meterProvider != null) { + builder.setMeterProvider(meterProvider); + } return context.addCloseable(builder.build()); } diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java index 313e5d50b76..1a10d0a49f8 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java @@ -9,6 +9,7 @@ import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.OpenTelemetrySdkBuilder; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel; +import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.resources.Resource; import java.util.Objects; import java.util.regex.Pattern; @@ -53,6 +54,16 @@ public OpenTelemetrySdk create( resource = ResourceFactory.getInstance().create(model.getResource(), context); } + if (model.getMeterProvider() != null) { + SdkMeterProvider meterProvider = + MeterProviderFactory.getInstance() + .create(model.getMeterProvider(), context) + .setResource(resource) + .build(); + context.setMeterProvider(meterProvider); + builder.setMeterProvider(context.addCloseable(meterProvider)); + } + if (model.getLoggerProvider() != null) { builder.setLoggerProvider( context.addCloseable( @@ -77,15 +88,6 @@ public OpenTelemetrySdk create( .build())); } - if (model.getMeterProvider() != null) { - builder.setMeterProvider( - context.addCloseable( - MeterProviderFactory.getInstance() - .create(model.getMeterProvider(), context) - .setResource(resource) - .build())); - } - return context.addCloseable(builder.build()); } } diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanProcessorFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanProcessorFactory.java index 5bfa617f570..d5b2c3970f6 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanProcessorFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanProcessorFactory.java @@ -5,6 +5,7 @@ package io.opentelemetry.sdk.extension.incubator.fileconfig; +import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchSpanProcessorModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SimpleSpanProcessorModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanExporterModel; @@ -47,6 +48,11 @@ public SpanProcessor create(SpanProcessorModel model, DeclarativeConfigContext c if (batchModel.getScheduleDelay() != null) { builder.setScheduleDelay(Duration.ofMillis(batchModel.getScheduleDelay())); } + MeterProvider meterProvider = context.getMeterProvider(); + if (meterProvider != null) { + builder.setMeterProvider(meterProvider); + } + return context.addCloseable(builder.build()); }