Skip to content

Commit

Permalink
[sdk] Add ActivityExportProcessorOptions and clean up MetricReaderOpt…
Browse files Browse the repository at this point in the history
…ions (#5423)
  • Loading branch information
CodeBlanch committed Mar 7, 2024
1 parent f34fce5 commit 0820101
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 15 deletions.
6 changes: 6 additions & 0 deletions src/OpenTelemetry/.publicApi/Stable/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
@@ -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<OpenTelemetry.Resources.ResourceBuilder!>! configure) -> OpenTelemetry.IOpenTelemetryBuilder!
static OpenTelemetry.OpenTelemetryBuilderSdkExtensions.WithMetrics(this OpenTelemetry.IOpenTelemetryBuilder! builder) -> OpenTelemetry.IOpenTelemetryBuilder!
static OpenTelemetry.OpenTelemetryBuilderSdkExtensions.WithMetrics(this OpenTelemetry.IOpenTelemetryBuilder! builder, System.Action<OpenTelemetry.Metrics.MeterProviderBuilder!>! configure) -> OpenTelemetry.IOpenTelemetryBuilder!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,6 @@ public static IServiceCollection AddOpenTelemetryLoggerProviderBuilderServices(t

services!.TryAddSingleton<LoggerProviderBuilderSdk>();
services!.RegisterOptionsFactory(configuration => new BatchExportLogRecordProcessorOptions(configuration));

// Note: This registers a factory so that when
// sp.GetRequiredService<IOptionsMonitor<LogRecordExportProcessorOptions>>().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<IOptionsMonitor<BatchExportLogRecordProcessorOptions>>().Get(name)));
Expand All @@ -40,7 +33,10 @@ public static IServiceCollection AddOpenTelemetryMeterProviderBuilderServices(th
Debug.Assert(services != null, "services was null");

services!.TryAddSingleton<MeterProviderBuilderSdk>();
services!.RegisterOptionsFactory(configuration => new MetricReaderOptions(configuration));
services!.RegisterOptionsFactory(configuration => new PeriodicExportingMetricReaderOptions(configuration));
services!.RegisterOptionsFactory(
(sp, configuration, name) => new MetricReaderOptions(
sp.GetRequiredService<IOptionsMonitor<PeriodicExportingMetricReaderOptions>>().Get(name)));

return services!;
}
Expand All @@ -51,6 +47,9 @@ public static IServiceCollection AddOpenTelemetryTracerProviderBuilderServices(t

services!.TryAddSingleton<TracerProviderBuilderSdk>();
services!.RegisterOptionsFactory(configuration => new BatchExportActivityProcessorOptions(configuration));
services!.RegisterOptionsFactory(
(sp, configuration, name) => new ActivityExportProcessorOptions(
sp.GetRequiredService<IOptionsMonitor<BatchExportActivityProcessorOptions>>().Get(name)));

return services!;
}
Expand Down
11 changes: 7 additions & 4 deletions src/OpenTelemetry/Metrics/MetricReaderOptions.cs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -17,13 +17,16 @@ public class MetricReaderOptions
/// Initializes a new instance of the <see cref="MetricReaderOptions"/> class.
/// </summary>
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();
}

/// <summary>
Expand Down
49 changes: 49 additions & 0 deletions src/OpenTelemetry/Trace/ActivityExportProcessorOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

using System.Diagnostics;
using OpenTelemetry.Internal;

namespace OpenTelemetry.Trace;

/// <summary>
/// Options for configuring either a <see cref="SimpleActivityExportProcessor"/> or <see cref="BatchActivityExportProcessor"/>.
/// </summary>
public class ActivityExportProcessorOptions
{
private BatchExportActivityProcessorOptions batchExportProcessorOptions;

/// <summary>
/// Initializes a new instance of the <see cref="ActivityExportProcessorOptions"/> class.
/// </summary>
public ActivityExportProcessorOptions()
: this(new())
{
}

internal ActivityExportProcessorOptions(
BatchExportActivityProcessorOptions defaultBatchExportActivityProcessorOptions)
{
Debug.Assert(defaultBatchExportActivityProcessorOptions != null, "defaultBatchExportActivityProcessorOptions was null");

this.batchExportProcessorOptions = defaultBatchExportActivityProcessorOptions ?? new();
}

/// <summary>
/// Gets or sets the export processor type to be used. The default value is <see cref="ExportProcessorType.Batch"/>.
/// </summary>
public ExportProcessorType ExportProcessorType { get; set; } = ExportProcessorType.Batch;

/// <summary>
/// Gets or sets the batch export options. Ignored unless <see cref="ExportProcessorType"/> is <see cref="ExportProcessorType.Batch"/>.
/// </summary>
public BatchExportActivityProcessorOptions BatchExportProcessorOptions
{
get => this.batchExportProcessorOptions;
set
{
Guard.ThrowIfNull(value);
this.batchExportProcessorOptions = value;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down

0 comments on commit 0820101

Please sign in to comment.