Skip to content

Commit 97e5021

Browse files
authored
[Traces] Support named options in AspNetCore instrumentation (#3661)
* Support named options in aspnetcore instrumentation. * CHANGELOG update.
1 parent ef46e82 commit 97e5021

File tree

5 files changed

+47
-13
lines changed

5 files changed

+47
-13
lines changed

src/OpenTelemetry.Instrumentation.AspNetCore/.publicApi/net6.0/PublicAPI.Unshipped.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ OpenTelemetry.Instrumentation.AspNetCore.AspNetCoreInstrumentationOptions.Record
1111
OpenTelemetry.Metrics.MeterProviderBuilderExtensions
1212
OpenTelemetry.Trace.TracerProviderBuilderExtensions
1313
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.AddAspNetCoreInstrumentation(this OpenTelemetry.Metrics.MeterProviderBuilder builder) -> OpenTelemetry.Metrics.MeterProviderBuilder
14-
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddAspNetCoreInstrumentation(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action<OpenTelemetry.Instrumentation.AspNetCore.AspNetCoreInstrumentationOptions> configureAspNetCoreInstrumentationOptions = null) -> OpenTelemetry.Trace.TracerProviderBuilder
14+
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddAspNetCoreInstrumentation(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder
15+
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddAspNetCoreInstrumentation(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action<OpenTelemetry.Instrumentation.AspNetCore.AspNetCoreInstrumentationOptions> configureAspNetCoreInstrumentationOptions) -> OpenTelemetry.Trace.TracerProviderBuilder
16+
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddAspNetCoreInstrumentation(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action<OpenTelemetry.Instrumentation.AspNetCore.AspNetCoreInstrumentationOptions> configureAspNetCoreInstrumentationOptions) -> OpenTelemetry.Trace.TracerProviderBuilder

src/OpenTelemetry.Instrumentation.AspNetCore/.publicApi/net7.0/PublicAPI.Unshipped.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ OpenTelemetry.Instrumentation.AspNetCore.AspNetCoreInstrumentationOptions.Record
1111
OpenTelemetry.Metrics.MeterProviderBuilderExtensions
1212
OpenTelemetry.Trace.TracerProviderBuilderExtensions
1313
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.AddAspNetCoreInstrumentation(this OpenTelemetry.Metrics.MeterProviderBuilder builder) -> OpenTelemetry.Metrics.MeterProviderBuilder
14-
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddAspNetCoreInstrumentation(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action<OpenTelemetry.Instrumentation.AspNetCore.AspNetCoreInstrumentationOptions> configureAspNetCoreInstrumentationOptions = null) -> OpenTelemetry.Trace.TracerProviderBuilder
14+
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddAspNetCoreInstrumentation(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder
15+
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddAspNetCoreInstrumentation(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action<OpenTelemetry.Instrumentation.AspNetCore.AspNetCoreInstrumentationOptions> configureAspNetCoreInstrumentationOptions) -> OpenTelemetry.Trace.TracerProviderBuilder
16+
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddAspNetCoreInstrumentation(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action<OpenTelemetry.Instrumentation.AspNetCore.AspNetCoreInstrumentationOptions> configureAspNetCoreInstrumentationOptions) -> OpenTelemetry.Trace.TracerProviderBuilder

src/OpenTelemetry.Instrumentation.AspNetCore/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
wouldn't be collected.
77
([#3475](https://github.com/open-telemetry/opentelemetry-dotnet/pull/3475))
88

9+
* Added overloads which accept a name to the `TracerProviderBuilder`
10+
`AddAspNetCoreInstrumentation` extension to allow for more fine-grained
11+
options management
12+
([#3661](https://github.com/open-telemetry/opentelemetry-dotnet/pull/3661))
13+
914
## 1.0.0-rc9.6
1015

1116
Released 2022-Aug-18

src/OpenTelemetry.Instrumentation.AspNetCore/TracerProviderBuilderExtensions.cs

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,45 @@ public static class TracerProviderBuilderExtensions
3535
/// Enables the incoming requests automatic data collection for ASP.NET Core.
3636
/// </summary>
3737
/// <param name="builder"><see cref="TracerProviderBuilder"/> being configured.</param>
38-
/// <param name="configureAspNetCoreInstrumentationOptions">ASP.NET Core Request configuration options.</param>
38+
/// <returns>The instance of <see cref="TracerProviderBuilder"/> to chain the calls.</returns>
39+
public static TracerProviderBuilder AddAspNetCoreInstrumentation(this TracerProviderBuilder builder)
40+
=> AddAspNetCoreInstrumentation(builder, name: null, configureAspNetCoreInstrumentationOptions: null);
41+
42+
/// <summary>
43+
/// Enables the incoming requests automatic data collection for ASP.NET Core.
44+
/// </summary>
45+
/// <param name="builder"><see cref="TracerProviderBuilder"/> being configured.</param>
46+
/// <param name="configureAspNetCoreInstrumentationOptions">Callback action for configuring <see cref="AspNetCoreInstrumentationOptions"/>.</param>
3947
/// <returns>The instance of <see cref="TracerProviderBuilder"/> to chain the calls.</returns>
4048
public static TracerProviderBuilder AddAspNetCoreInstrumentation(
4149
this TracerProviderBuilder builder,
42-
Action<AspNetCoreInstrumentationOptions> configureAspNetCoreInstrumentationOptions = null)
50+
Action<AspNetCoreInstrumentationOptions> configureAspNetCoreInstrumentationOptions)
51+
=> AddAspNetCoreInstrumentation(builder, name: null, configureAspNetCoreInstrumentationOptions);
52+
53+
/// <summary>
54+
/// Enables the incoming requests automatic data collection for ASP.NET Core.
55+
/// </summary>
56+
/// <param name="builder"><see cref="TracerProviderBuilder"/> being configured.</param>
57+
/// <param name="name">Name which is used when retrieving options.</param>
58+
/// <param name="configureAspNetCoreInstrumentationOptions">Callback action for configuring <see cref="AspNetCoreInstrumentationOptions"/>.</param>
59+
/// <returns>The instance of <see cref="TracerProviderBuilder"/> to chain the calls.</returns>
60+
public static TracerProviderBuilder AddAspNetCoreInstrumentation(
61+
this TracerProviderBuilder builder,
62+
string name,
63+
Action<AspNetCoreInstrumentationOptions> configureAspNetCoreInstrumentationOptions)
4364
{
4465
Guard.ThrowIfNull(builder);
4566

67+
name ??= Options.DefaultName;
68+
4669
if (configureAspNetCoreInstrumentationOptions != null)
4770
{
48-
builder.ConfigureServices(services => services.Configure(configureAspNetCoreInstrumentationOptions));
71+
builder.ConfigureServices(services => services.Configure(name, configureAspNetCoreInstrumentationOptions));
4972
}
5073

5174
return builder.ConfigureBuilder((sp, builder) =>
5275
{
53-
var options = sp.GetRequiredService<IOptions<AspNetCoreInstrumentationOptions>>().Value;
76+
var options = sp.GetRequiredService<IOptionsMonitor<AspNetCoreInstrumentationOptions>>().Get(name);
5477

5578
AddAspNetCoreInstrumentation(builder, new AspNetCoreInstrumentation(new HttpInListener(options)), sp);
5679
});

test/OpenTelemetry.Instrumentation.AspNetCore.Tests/DependencyInjectionConfigTests.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using Microsoft.AspNetCore.Mvc.Testing;
1818
using Microsoft.AspNetCore.TestHost;
1919
using Microsoft.Extensions.DependencyInjection;
20+
using Microsoft.Extensions.Options;
2021
using OpenTelemetry.Trace;
2122
using Xunit;
2223

@@ -32,19 +33,20 @@ public DependencyInjectionConfigTests(WebApplicationFactory<Program> factory)
3233
this.factory = factory;
3334
}
3435

35-
[Fact]
36-
public void TestDIConfig()
36+
[Theory]
37+
[InlineData(null)]
38+
[InlineData("CustomName")]
39+
public void TestDIConfig(string name)
3740
{
41+
name ??= Options.DefaultName;
42+
3843
bool optionsPickedFromDI = false;
3944
void ConfigureTestServices(IServiceCollection services)
4045
{
4146
services.AddOpenTelemetryTracing(
42-
builder =>
43-
{
44-
builder.AddAspNetCoreInstrumentation();
45-
});
47+
builder => builder.AddAspNetCoreInstrumentation(name, configureAspNetCoreInstrumentationOptions: null));
4648

47-
services.Configure<AspNetCoreInstrumentationOptions>(options =>
49+
services.Configure<AspNetCoreInstrumentationOptions>(name, options =>
4850
{
4951
optionsPickedFromDI = true;
5052
});

0 commit comments

Comments
 (0)