diff --git a/src/OpenTelemetry/.publicApi/Stable/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/Stable/PublicAPI.Unshipped.txt index d58a0903257..66cf734c848 100644 --- a/src/OpenTelemetry/.publicApi/Stable/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/Stable/PublicAPI.Unshipped.txt @@ -1,4 +1,10 @@ OpenTelemetry.OpenTelemetryBuilderSdkExtensions +OpenTelemetry.Trace.ActivityExportProcessorOptions +OpenTelemetry.Trace.ActivityExportProcessorOptions.ActivityExportProcessorOptions() -> void +OpenTelemetry.Trace.ActivityExportProcessorOptions.BatchExportProcessorOptions.get -> OpenTelemetry.Trace.BatchExportActivityProcessorOptions! +OpenTelemetry.Trace.ActivityExportProcessorOptions.BatchExportProcessorOptions.set -> void +OpenTelemetry.Trace.ActivityExportProcessorOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType +OpenTelemetry.Trace.ActivityExportProcessorOptions.ExportProcessorType.set -> void static OpenTelemetry.OpenTelemetryBuilderSdkExtensions.ConfigureResource(this OpenTelemetry.IOpenTelemetryBuilder! builder, System.Action! configure) -> OpenTelemetry.IOpenTelemetryBuilder! static OpenTelemetry.OpenTelemetryBuilderSdkExtensions.WithMetrics(this OpenTelemetry.IOpenTelemetryBuilder! builder) -> OpenTelemetry.IOpenTelemetryBuilder! static OpenTelemetry.OpenTelemetryBuilderSdkExtensions.WithMetrics(this OpenTelemetry.IOpenTelemetryBuilder! builder, System.Action! configure) -> OpenTelemetry.IOpenTelemetryBuilder! diff --git a/src/OpenTelemetry/Internal/Builder/ProviderBuilderServiceCollectionExtensions.cs b/src/OpenTelemetry/Internal/Builder/ProviderBuilderServiceCollectionExtensions.cs index 1666291bb52..0e6091a3f65 100644 --- a/src/OpenTelemetry/Internal/Builder/ProviderBuilderServiceCollectionExtensions.cs +++ b/src/OpenTelemetry/Internal/Builder/ProviderBuilderServiceCollectionExtensions.cs @@ -21,13 +21,6 @@ public static IServiceCollection AddOpenTelemetryLoggerProviderBuilderServices(t services!.TryAddSingleton(); services!.RegisterOptionsFactory(configuration => new BatchExportLogRecordProcessorOptions(configuration)); - - // Note: This registers a factory so that when - // sp.GetRequiredService>().Get(name))) - // is executed the SDK internal - // BatchExportLogRecordProcessorOptions(IConfiguration) ctor is used - // correctly which allows users to control the OTEL_BLRP_* keys using - // IConfiguration (envvars, appSettings, cli, etc.). services!.RegisterOptionsFactory( (sp, configuration, name) => new LogRecordExportProcessorOptions( sp.GetRequiredService>().Get(name))); @@ -40,7 +33,10 @@ public static IServiceCollection AddOpenTelemetryMeterProviderBuilderServices(th Debug.Assert(services != null, "services was null"); services!.TryAddSingleton(); - services!.RegisterOptionsFactory(configuration => new MetricReaderOptions(configuration)); + services!.RegisterOptionsFactory(configuration => new PeriodicExportingMetricReaderOptions(configuration)); + services!.RegisterOptionsFactory( + (sp, configuration, name) => new MetricReaderOptions( + sp.GetRequiredService>().Get(name))); return services!; } @@ -51,6 +47,9 @@ public static IServiceCollection AddOpenTelemetryTracerProviderBuilderServices(t services!.TryAddSingleton(); services!.RegisterOptionsFactory(configuration => new BatchExportActivityProcessorOptions(configuration)); + services!.RegisterOptionsFactory( + (sp, configuration, name) => new ActivityExportProcessorOptions( + sp.GetRequiredService>().Get(name))); return services!; } diff --git a/src/OpenTelemetry/Metrics/MetricReaderOptions.cs b/src/OpenTelemetry/Metrics/MetricReaderOptions.cs index 6123dc2c2cd..59b850e88aa 100644 --- a/src/OpenTelemetry/Metrics/MetricReaderOptions.cs +++ b/src/OpenTelemetry/Metrics/MetricReaderOptions.cs @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -using Microsoft.Extensions.Configuration; +using System.Diagnostics; using OpenTelemetry.Internal; namespace OpenTelemetry.Metrics; @@ -17,13 +17,16 @@ public class MetricReaderOptions /// Initializes a new instance of the class. /// public MetricReaderOptions() - : this(new ConfigurationBuilder().AddEnvironmentVariables().Build()) + : this(new()) { } - internal MetricReaderOptions(IConfiguration configuration) + internal MetricReaderOptions( + PeriodicExportingMetricReaderOptions defaultPeriodicExportingMetricReaderOptions) { - this.periodicExportingMetricReaderOptions = new PeriodicExportingMetricReaderOptions(configuration); + Debug.Assert(defaultPeriodicExportingMetricReaderOptions != null, "defaultPeriodicExportingMetricReaderOptions was null"); + + this.periodicExportingMetricReaderOptions = defaultPeriodicExportingMetricReaderOptions ?? new(); } /// diff --git a/src/OpenTelemetry/Trace/ActivityExportProcessorOptions.cs b/src/OpenTelemetry/Trace/ActivityExportProcessorOptions.cs new file mode 100644 index 00000000000..86acb043015 --- /dev/null +++ b/src/OpenTelemetry/Trace/ActivityExportProcessorOptions.cs @@ -0,0 +1,49 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +using System.Diagnostics; +using OpenTelemetry.Internal; + +namespace OpenTelemetry.Trace; + +/// +/// Options for configuring either a or . +/// +public class ActivityExportProcessorOptions +{ + private BatchExportActivityProcessorOptions batchExportProcessorOptions; + + /// + /// Initializes a new instance of the class. + /// + public ActivityExportProcessorOptions() + : this(new()) + { + } + + internal ActivityExportProcessorOptions( + BatchExportActivityProcessorOptions defaultBatchExportActivityProcessorOptions) + { + Debug.Assert(defaultBatchExportActivityProcessorOptions != null, "defaultBatchExportActivityProcessorOptions was null"); + + this.batchExportProcessorOptions = defaultBatchExportActivityProcessorOptions ?? new(); + } + + /// + /// Gets or sets the export processor type to be used. The default value is . + /// + public ExportProcessorType ExportProcessorType { get; set; } = ExportProcessorType.Batch; + + /// + /// Gets or sets the batch export options. Ignored unless is . + /// + public BatchExportActivityProcessorOptions BatchExportProcessorOptions + { + get => this.batchExportProcessorOptions; + set + { + Guard.ThrowIfNull(value); + this.batchExportProcessorOptions = value; + } + } +} diff --git a/test/OpenTelemetry.Tests/Internal/PeriodicExportingMetricReaderHelperTests.cs b/test/OpenTelemetry.Tests/Internal/PeriodicExportingMetricReaderHelperTests.cs index 4b8847a17c3..d0da994e018 100644 --- a/test/OpenTelemetry.Tests/Internal/PeriodicExportingMetricReaderHelperTests.cs +++ b/test/OpenTelemetry.Tests/Internal/PeriodicExportingMetricReaderHelperTests.cs @@ -109,10 +109,10 @@ public void CreatePeriodicExportingMetricReader_FromIConfiguration() .AddInMemoryCollection(values) .Build(); - var options = new MetricReaderOptions(configuration); + var options = new PeriodicExportingMetricReaderOptions(configuration); - Assert.Equal(18, options.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds); - Assert.Equal(19, options.PeriodicExportingMetricReaderOptions.ExportTimeoutMilliseconds); + Assert.Equal(18, options.ExportIntervalMilliseconds); + Assert.Equal(19, options.ExportTimeoutMilliseconds); } [Fact]