Support named options in the tracer provider builder AddExporter API. (#3659)
This commit is contained in:
parent
d99307da34
commit
3a8f139e8e
|
|
@ -38,6 +38,8 @@ static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.AddInstrumentation<T
|
|||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.AddReader<T>(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.ConfigureBuilder(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, System.Action<System.IServiceProvider!, OpenTelemetry.Metrics.MeterProviderBuilder!>! configure) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.ConfigureServices(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, System.Action<Microsoft.Extensions.DependencyInjection.IServiceCollection!>! configure) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddExporter(this OpenTelemetry.Trace.TracerProviderBuilder! tracerProviderBuilder, OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<System.Diagnostics.Activity!>! exporter, string? name, System.Action<OpenTelemetry.Trace.ExportActivityProcessorOptions!>? configure) -> OpenTelemetry.Trace.TracerProviderBuilder!
|
||||
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddExporter<T>(this OpenTelemetry.Trace.TracerProviderBuilder! tracerProviderBuilder, OpenTelemetry.ExportProcessorType exportProcessorType, string? name, System.Action<OpenTelemetry.Trace.ExportActivityProcessorOptions!>? configure) -> OpenTelemetry.Trace.TracerProviderBuilder!
|
||||
~OpenTelemetry.Trace.SamplingResult.TraceStateString.get -> string
|
||||
~OpenTelemetry.Trace.SamplingResult.SamplingResult(OpenTelemetry.Trace.SamplingDecision decision, string traceStateString) -> void
|
||||
~OpenTelemetry.Trace.SamplingResult.SamplingResult(OpenTelemetry.Trace.SamplingDecision decision, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes, string traceStateString) -> void
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.AddInstrumentation<T
|
|||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.AddReader<T>(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.ConfigureBuilder(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, System.Action<System.IServiceProvider!, OpenTelemetry.Metrics.MeterProviderBuilder!>! configure) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.ConfigureServices(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, System.Action<Microsoft.Extensions.DependencyInjection.IServiceCollection!>! configure) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddExporter(this OpenTelemetry.Trace.TracerProviderBuilder! tracerProviderBuilder, OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<System.Diagnostics.Activity!>! exporter, string? name, System.Action<OpenTelemetry.Trace.ExportActivityProcessorOptions!>? configure) -> OpenTelemetry.Trace.TracerProviderBuilder!
|
||||
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddExporter<T>(this OpenTelemetry.Trace.TracerProviderBuilder! tracerProviderBuilder, OpenTelemetry.ExportProcessorType exportProcessorType, string? name, System.Action<OpenTelemetry.Trace.ExportActivityProcessorOptions!>? configure) -> OpenTelemetry.Trace.TracerProviderBuilder!
|
||||
~OpenTelemetry.Trace.SamplingResult.TraceStateString.get -> string
|
||||
~OpenTelemetry.Trace.SamplingResult.SamplingResult(OpenTelemetry.Trace.SamplingDecision decision, string traceStateString) -> void
|
||||
~OpenTelemetry.Trace.SamplingResult.SamplingResult(OpenTelemetry.Trace.SamplingDecision decision, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes, string traceStateString) -> void
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.AddInstrumentation<T
|
|||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.AddReader<T>(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.ConfigureBuilder(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, System.Action<System.IServiceProvider!, OpenTelemetry.Metrics.MeterProviderBuilder!>! configure) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.ConfigureServices(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, System.Action<Microsoft.Extensions.DependencyInjection.IServiceCollection!>! configure) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddExporter(this OpenTelemetry.Trace.TracerProviderBuilder! tracerProviderBuilder, OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<System.Diagnostics.Activity!>! exporter, string? name, System.Action<OpenTelemetry.Trace.ExportActivityProcessorOptions!>? configure) -> OpenTelemetry.Trace.TracerProviderBuilder!
|
||||
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddExporter<T>(this OpenTelemetry.Trace.TracerProviderBuilder! tracerProviderBuilder, OpenTelemetry.ExportProcessorType exportProcessorType, string? name, System.Action<OpenTelemetry.Trace.ExportActivityProcessorOptions!>? configure) -> OpenTelemetry.Trace.TracerProviderBuilder!
|
||||
~OpenTelemetry.Trace.SamplingResult.TraceStateString.get -> string
|
||||
~OpenTelemetry.Trace.SamplingResult.SamplingResult(OpenTelemetry.Trace.SamplingDecision decision, string traceStateString) -> void
|
||||
~OpenTelemetry.Trace.SamplingResult.SamplingResult(OpenTelemetry.Trace.SamplingDecision decision, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes, string traceStateString) -> void
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.AddInstrumentation<T
|
|||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.AddReader<T>(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.ConfigureBuilder(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, System.Action<System.IServiceProvider!, OpenTelemetry.Metrics.MeterProviderBuilder!>! configure) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.ConfigureServices(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, System.Action<Microsoft.Extensions.DependencyInjection.IServiceCollection!>! configure) -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddExporter(this OpenTelemetry.Trace.TracerProviderBuilder! tracerProviderBuilder, OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<System.Diagnostics.Activity!>! exporter, string? name, System.Action<OpenTelemetry.Trace.ExportActivityProcessorOptions!>? configure) -> OpenTelemetry.Trace.TracerProviderBuilder!
|
||||
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddExporter<T>(this OpenTelemetry.Trace.TracerProviderBuilder! tracerProviderBuilder, OpenTelemetry.ExportProcessorType exportProcessorType, string? name, System.Action<OpenTelemetry.Trace.ExportActivityProcessorOptions!>? configure) -> OpenTelemetry.Trace.TracerProviderBuilder!
|
||||
~OpenTelemetry.Trace.SamplingResult.TraceStateString.get -> string
|
||||
~OpenTelemetry.Trace.SamplingResult.SamplingResult(OpenTelemetry.Trace.SamplingDecision decision, string traceStateString) -> void
|
||||
~OpenTelemetry.Trace.SamplingResult.SamplingResult(OpenTelemetry.Trace.SamplingDecision decision, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes, string traceStateString) -> void
|
||||
|
|
|
|||
|
|
@ -115,27 +115,24 @@ namespace OpenTelemetry.Trace
|
|||
return this;
|
||||
}
|
||||
|
||||
internal TracerProviderBuilder AddExporter<T>(ExportProcessorType exportProcessorType, Action<ExportActivityProcessorOptions> configure)
|
||||
internal TracerProviderBuilder AddExporter<T>(ExportProcessorType exportProcessorType, string? name, Action<ExportActivityProcessorOptions>? configure)
|
||||
where T : BaseExporter<Activity>
|
||||
{
|
||||
Guard.ThrowIfNull(configure);
|
||||
|
||||
this.TryAddSingleton<T>();
|
||||
this.ConfigureState((sp, state)
|
||||
=> state.AddProcessor(
|
||||
BuildExportProcessor(state.ServiceProvider, exportProcessorType, sp.GetRequiredService<T>(), configure)));
|
||||
BuildExportProcessor(state.ServiceProvider, exportProcessorType, sp.GetRequiredService<T>(), name, configure)));
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
internal TracerProviderBuilder AddExporter(ExportProcessorType exportProcessorType, BaseExporter<Activity> exporter, Action<ExportActivityProcessorOptions> configure)
|
||||
internal TracerProviderBuilder AddExporter(ExportProcessorType exportProcessorType, BaseExporter<Activity> exporter, string? name, Action<ExportActivityProcessorOptions>? configure)
|
||||
{
|
||||
Guard.ThrowIfNull(exporter);
|
||||
Guard.ThrowIfNull(configure);
|
||||
|
||||
this.ConfigureState((sp, state)
|
||||
=> state.AddProcessor(
|
||||
BuildExportProcessor(state.ServiceProvider, exportProcessorType, exporter, configure)));
|
||||
BuildExportProcessor(state.ServiceProvider, exportProcessorType, exporter, name, configure)));
|
||||
|
||||
return this;
|
||||
}
|
||||
|
|
@ -271,8 +268,11 @@ namespace OpenTelemetry.Trace
|
|||
IServiceProvider serviceProvider,
|
||||
ExportProcessorType exportProcessorType,
|
||||
BaseExporter<Activity> exporter,
|
||||
Action<ExportActivityProcessorOptions> configure)
|
||||
string? name,
|
||||
Action<ExportActivityProcessorOptions>? configure)
|
||||
{
|
||||
name ??= Options.DefaultName;
|
||||
|
||||
switch (exportProcessorType)
|
||||
{
|
||||
case ExportProcessorType.Simple:
|
||||
|
|
@ -281,10 +281,10 @@ namespace OpenTelemetry.Trace
|
|||
var options = new ExportActivityProcessorOptions
|
||||
{
|
||||
ExportProcessorType = ExportProcessorType.Batch,
|
||||
BatchExportProcessorOptions = serviceProvider.GetRequiredService<IOptions<BatchExportActivityProcessorOptions>>().Value,
|
||||
BatchExportProcessorOptions = serviceProvider.GetRequiredService<IOptionsSnapshot<BatchExportActivityProcessorOptions>>().Get(name),
|
||||
};
|
||||
|
||||
configure(options);
|
||||
configure?.Invoke(options);
|
||||
|
||||
var batchOptions = options.BatchExportProcessorOptions;
|
||||
|
||||
|
|
@ -332,10 +332,7 @@ namespace OpenTelemetry.Trace
|
|||
{
|
||||
var services = this.services;
|
||||
|
||||
if (services != null)
|
||||
{
|
||||
services.TryAddSingleton<T>();
|
||||
}
|
||||
services?.TryAddSingleton<T>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ namespace OpenTelemetry.Trace
|
|||
this TracerProviderBuilder tracerProviderBuilder,
|
||||
ExportProcessorType exportProcessorType,
|
||||
BaseExporter<Activity> exporter)
|
||||
=> AddExporter(tracerProviderBuilder, exportProcessorType, exporter, o => { });
|
||||
=> AddExporter(tracerProviderBuilder, exportProcessorType, exporter, name: null, configure: null);
|
||||
|
||||
/// <summary>
|
||||
/// Adds an exporter to the provider.
|
||||
|
|
@ -184,10 +184,30 @@ namespace OpenTelemetry.Trace
|
|||
ExportProcessorType exportProcessorType,
|
||||
BaseExporter<Activity> exporter,
|
||||
Action<ExportActivityProcessorOptions> configure)
|
||||
=> AddExporter(tracerProviderBuilder, exportProcessorType, exporter, name: null, configure);
|
||||
|
||||
/// <summary>
|
||||
/// Adds an exporter to the provider.
|
||||
/// </summary>
|
||||
/// <param name="tracerProviderBuilder"><see cref="TracerProviderBuilder"/>.</param>
|
||||
/// <param name="exportProcessorType"><see cref="ExportProcessorType"/>.</param>
|
||||
/// <param name="exporter">Activity exporter to add.</param>
|
||||
/// <param name="name">Name which is used when retrieving options.</param>
|
||||
/// <param name="configure">Callback action to configure <see
|
||||
/// cref="ExportActivityProcessorOptions"/>. Only invoked when <paramref
|
||||
/// name="exportProcessorType"/> is <see
|
||||
/// cref="ExportProcessorType.Batch"/>.</param>
|
||||
/// <returns>Returns <see cref="TracerProviderBuilder"/> for chaining.</returns>
|
||||
public static TracerProviderBuilder AddExporter(
|
||||
this TracerProviderBuilder tracerProviderBuilder,
|
||||
ExportProcessorType exportProcessorType,
|
||||
BaseExporter<Activity> exporter,
|
||||
string? name,
|
||||
Action<ExportActivityProcessorOptions>? configure)
|
||||
{
|
||||
if (tracerProviderBuilder is TracerProviderBuilderBase tracerProviderBuilderBase)
|
||||
{
|
||||
tracerProviderBuilderBase.AddExporter(exportProcessorType, exporter, configure);
|
||||
tracerProviderBuilderBase.AddExporter(exportProcessorType, exporter, name, configure);
|
||||
}
|
||||
|
||||
return tracerProviderBuilder;
|
||||
|
|
@ -208,7 +228,7 @@ namespace OpenTelemetry.Trace
|
|||
this TracerProviderBuilder tracerProviderBuilder,
|
||||
ExportProcessorType exportProcessorType)
|
||||
where T : BaseExporter<Activity>
|
||||
=> AddExporter<T>(tracerProviderBuilder, exportProcessorType, o => { });
|
||||
=> AddExporter<T>(tracerProviderBuilder, exportProcessorType, name: null, configure: null);
|
||||
|
||||
/// <summary>
|
||||
/// Adds an exporter to the provider which will be retrieved using dependency injection.
|
||||
|
|
@ -230,10 +250,34 @@ namespace OpenTelemetry.Trace
|
|||
ExportProcessorType exportProcessorType,
|
||||
Action<ExportActivityProcessorOptions> configure)
|
||||
where T : BaseExporter<Activity>
|
||||
=> AddExporter<T>(tracerProviderBuilder, exportProcessorType, name: null, configure);
|
||||
|
||||
/// <summary>
|
||||
/// Adds an exporter to the provider which will be retrieved using dependency injection.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Note: The type specified by <typeparamref name="T"/> will be
|
||||
/// registered as a singleton service into application services.
|
||||
/// </remarks>
|
||||
/// <typeparam name="T">Exporter type.</typeparam>
|
||||
/// <param name="tracerProviderBuilder"><see cref="TracerProviderBuilder"/>.</param>
|
||||
/// <param name="exportProcessorType"><see cref="ExportProcessorType"/>.</param>
|
||||
/// <param name="name">Name which is used when retrieving options.</param>
|
||||
/// <param name="configure">Callback action to configure <see
|
||||
/// cref="ExportActivityProcessorOptions"/>. Only invoked when <paramref
|
||||
/// name="exportProcessorType"/> is <see
|
||||
/// cref="ExportProcessorType.Batch"/>.</param>
|
||||
/// <returns>The supplied <see cref="TracerProviderBuilder"/> for chaining.</returns>
|
||||
public static TracerProviderBuilder AddExporter<T>(
|
||||
this TracerProviderBuilder tracerProviderBuilder,
|
||||
ExportProcessorType exportProcessorType,
|
||||
string? name,
|
||||
Action<ExportActivityProcessorOptions>? configure)
|
||||
where T : BaseExporter<Activity>
|
||||
{
|
||||
if (tracerProviderBuilder is TracerProviderBuilderBase tracerProviderBuilderBase)
|
||||
{
|
||||
tracerProviderBuilderBase.AddExporter<T>(exportProcessorType, configure);
|
||||
tracerProviderBuilderBase.AddExporter<T>(exportProcessorType, name, configure);
|
||||
}
|
||||
|
||||
return tracerProviderBuilder;
|
||||
|
|
|
|||
|
|
@ -365,6 +365,34 @@ namespace OpenTelemetry.Trace.Tests
|
|||
&& batchProcessor.MaxExportBatchSize == 100);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AddExporterNamedOptionsTest()
|
||||
{
|
||||
var builder = Sdk.CreateTracerProviderBuilder();
|
||||
|
||||
int defaultOptionsConfigureInvocations = 0;
|
||||
int namedOptionsConfigureInvocations = 0;
|
||||
|
||||
builder.ConfigureServices(services =>
|
||||
{
|
||||
services.Configure<BatchExportActivityProcessorOptions>(o => defaultOptionsConfigureInvocations++);
|
||||
|
||||
services.Configure<BatchExportActivityProcessorOptions>("Exporter2", o => namedOptionsConfigureInvocations++);
|
||||
});
|
||||
|
||||
builder.AddExporter(ExportProcessorType.Batch, new MyExporter());
|
||||
builder.AddExporter(ExportProcessorType.Batch, new MyExporter(), name: "Exporter2", configure: null);
|
||||
builder.AddExporter<MyExporter>(ExportProcessorType.Batch);
|
||||
builder.AddExporter<MyExporter>(ExportProcessorType.Batch, name: "Exporter2", configure: null);
|
||||
|
||||
using var provider = builder.Build() as TracerProviderSdk;
|
||||
|
||||
Assert.NotNull(provider);
|
||||
|
||||
Assert.Equal(1, defaultOptionsConfigureInvocations);
|
||||
Assert.Equal(1, namedOptionsConfigureInvocations);
|
||||
}
|
||||
|
||||
private static void RunBuilderServiceLifecycleTest(
|
||||
TracerProviderBuilder builder,
|
||||
Func<TracerProviderSdk> buildFunc,
|
||||
|
|
|
|||
Loading…
Reference in New Issue