Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/enrichment/Examples.Enrichment/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ public static void Main()
.AddSource("MyCompany.MyProduct.MyLibrary")

// Register an enricher class.
// Important: AddTraceEnricher() must be called before any exporters.
.AddTraceEnricher<MyTraceEnricher>()
// Important: TryAddTraceEnricher() must be called before any exporters.
.TryAddTraceEnricher<MyTraceEnricher>()

// Add Console exporter to see the output of this example.
.AddConsoleExporter()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ OpenTelemetry.Extensions.Enrichment.TraceEnrichmentBag.Add(string! key, object?
OpenTelemetry.Extensions.Enrichment.TraceEnrichmentBag.TraceEnrichmentBag() -> void
OpenTelemetry.Extensions.Enrichment.TraceEnrichmentBag.TraceEnrichmentBag(System.Diagnostics.Activity! activity) -> void
OpenTelemetry.Extensions.Enrichment.TraceEnrichmentProviderBuilderExtensions
static Microsoft.Extensions.DependencyInjection.TraceEnrichmentServiceCollectionExtensions.AddTraceEnricher(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, OpenTelemetry.Extensions.Enrichment.TraceEnricher! enricher) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
static Microsoft.Extensions.DependencyInjection.TraceEnrichmentServiceCollectionExtensions.TryAddTraceEnricher(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, OpenTelemetry.Extensions.Enrichment.TraceEnricher! enricher) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
static Microsoft.Extensions.DependencyInjection.TraceEnrichmentServiceCollectionExtensions.AddTraceEnricher(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action<OpenTelemetry.Extensions.Enrichment.TraceEnrichmentBag>! enrichmentAction) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
static Microsoft.Extensions.DependencyInjection.TraceEnrichmentServiceCollectionExtensions.AddTraceEnricher(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Func<System.IServiceProvider!, OpenTelemetry.Extensions.Enrichment.TraceEnricher!>! enricherImplementationFactory) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
static Microsoft.Extensions.DependencyInjection.TraceEnrichmentServiceCollectionExtensions.AddTraceEnricher<T>(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
static OpenTelemetry.Extensions.Enrichment.TraceEnrichmentProviderBuilderExtensions.AddTraceEnricher(this OpenTelemetry.Trace.TracerProviderBuilder! builder, OpenTelemetry.Extensions.Enrichment.TraceEnricher! enricher) -> OpenTelemetry.Trace.TracerProviderBuilder!
static Microsoft.Extensions.DependencyInjection.TraceEnrichmentServiceCollectionExtensions.TryAddTraceEnricher<T>(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
static OpenTelemetry.Extensions.Enrichment.TraceEnrichmentProviderBuilderExtensions.TryAddTraceEnricher(this OpenTelemetry.Trace.TracerProviderBuilder! builder, OpenTelemetry.Extensions.Enrichment.TraceEnricher! enricher) -> OpenTelemetry.Trace.TracerProviderBuilder!
static OpenTelemetry.Extensions.Enrichment.TraceEnrichmentProviderBuilderExtensions.AddTraceEnricher(this OpenTelemetry.Trace.TracerProviderBuilder! builder, System.Action<OpenTelemetry.Extensions.Enrichment.TraceEnrichmentBag>! enrichmentAction) -> OpenTelemetry.Trace.TracerProviderBuilder!
static OpenTelemetry.Extensions.Enrichment.TraceEnrichmentProviderBuilderExtensions.AddTraceEnricher(this OpenTelemetry.Trace.TracerProviderBuilder! builder, System.Func<System.IServiceProvider!, OpenTelemetry.Extensions.Enrichment.TraceEnricher!>! enricherImplementationFactory) -> OpenTelemetry.Trace.TracerProviderBuilder!
static OpenTelemetry.Extensions.Enrichment.TraceEnrichmentProviderBuilderExtensions.AddTraceEnricher<T>(this OpenTelemetry.Trace.TracerProviderBuilder! builder) -> OpenTelemetry.Trace.TracerProviderBuilder!
static OpenTelemetry.Extensions.Enrichment.TraceEnrichmentProviderBuilderExtensions.TryAddTraceEnricher<T>(this OpenTelemetry.Trace.TracerProviderBuilder! builder) -> OpenTelemetry.Trace.TracerProviderBuilder!
virtual OpenTelemetry.Extensions.Enrichment.TraceEnricher.EnrichOnActivityStart(in OpenTelemetry.Extensions.Enrichment.TraceEnrichmentBag bag) -> void
5 changes: 5 additions & 0 deletions src/OpenTelemetry.Extensions.Enrichment/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

## Unreleased

* **Breaking change**: Renamed some extension methods from `AddTraceEnricher*()`
to `TryAddTraceEnricer*()` pattern to more accurately reflect their behavior of
only adding the enricher if it hasn't already been added.
([#3085](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3085))

## 1.12.0-alpha.1

Released 2025-Aug-18
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@

<ItemGroup>
<Compile Include="$(RepoRoot)\src\Shared\Guard.cs" Link="Includes\Guard.cs" />
<Compile Include="$(RepoRoot)\src\Shared\IsExternalInit.cs" Link="Includes\IsExternalInit.cs" />
</ItemGroup>

</Project>
14 changes: 7 additions & 7 deletions src/OpenTelemetry.Extensions.Enrichment/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,15 +79,15 @@ in your application.
### Step 3: Register enricher class

Add your custom enricher class to the `TracerProviderBuilder` by calling the
`AddTraceEnricher<T>()` method. Configure other services via
`TryAddTraceEnricher<T>()` method. Configure other services via
`ConfigureServices()`, add `ActivitySource` and an exporter as usual:

```csharp
using var MyActivitySource = new ActivitySource("MyCompany.MyProduct.MyLibrary");
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.ConfigureServices(services => services.AddSingleton<IMyService, MyService>())
.AddSource("MyCompany.MyProduct.MyLibrary")
.AddTraceEnricher<MyTraceEnricher>()
.TryAddTraceEnricher<MyTraceEnricher>()
.AddConsoleExporter()
.Build();
```
Expand All @@ -103,7 +103,7 @@ public void ConfigureServices(IServiceCollection services)
services.AddSingleton<IMyService, MyService>();
services.AddOpenTelemetry().WithTracing((builder) => builder
.AddSource("MyCompany.MyProduct.MyLibrary")
.AddTraceEnricher<MyTraceEnricher>()
.TryAddTraceEnricher<MyTraceEnricher>()
.AddConsoleExporter());
}
```
Expand Down Expand Up @@ -155,16 +155,16 @@ enricher class. In this case, the enricher class will be created for you by
Dependency Injection:

```csharp
public static AddTraceEnricher<T>(this IServiceCollection services)
public static AddTraceEnricher<T>(this TracerProviderBuilder builder)
public static TryAddTraceEnricher<T>(this IServiceCollection services)
public static TryAddTraceEnricher<T>(this TracerProviderBuilder builder)
```

If you prefer to instantiate your enricher class on your own, you may use one of
these methods which allow for the usage of pre-existing enricher objects:

```csharp
public static AddTraceEnricher(this IServiceCollection services, TraceEnricher enricher)
public static AddTraceEnricher(this TracerProviderBuilder builder, TraceEnricher enricher)
public static TryAddTraceEnricher(this IServiceCollection services, TraceEnricher enricher)
public static TryAddTraceEnricher(this TracerProviderBuilder builder, TraceEnricher enricher)
```

If you only need to enrich a small amount of data, it may not be necessary to create
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace OpenTelemetry.Extensions.Enrichment;
public static class TraceEnrichmentProviderBuilderExtensions
{
/// <summary>
/// Adds trace enricher.
/// Adds a <see cref="TraceEnricher"/> implementation of type <typeparamref name="T"/> as a Singleton to the specified <see cref="TracerProviderBuilder"/> if one has not already been registered.
/// </summary>
/// <param name="builder"><see cref="TracerProviderBuilder"/> being configured.</param>
/// <typeparam name="T">Enricher object type.</typeparam>
Expand All @@ -26,20 +26,20 @@ public static class TraceEnrichmentProviderBuilderExtensions
/// Add this enricher *before* exporter related Activity processors.
/// </remarks>
#if NET
public static TracerProviderBuilder AddTraceEnricher<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T>(this TracerProviderBuilder builder)
public static TracerProviderBuilder TryAddTraceEnricher<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T>(this TracerProviderBuilder builder)
#else
public static TracerProviderBuilder AddTraceEnricher<T>(this TracerProviderBuilder builder)
public static TracerProviderBuilder TryAddTraceEnricher<T>(this TracerProviderBuilder builder)
#endif
where T : TraceEnricher
{
Guard.ThrowIfNull(builder);

return builder
.ConfigureServices(services => services.AddTraceEnricher<T>());
.ConfigureServices(services => services.TryAddTraceEnricher<T>());
}

/// <summary>
/// Adds trace enricher.
/// Adds a <see cref="TraceEnricher"/> implementation of type <paramref name="enricher"/> as a Singleton to the specified <see cref="TracerProviderBuilder"/> if one has not already been registered.
/// </summary>
/// <param name="builder"><see cref="TracerProviderBuilder"/> being configured.</param>
/// <param name="enricher">The <see cref="TraceEnricher"/> object being added.</param>
Expand All @@ -48,17 +48,17 @@ public static TracerProviderBuilder AddTraceEnricher<T>(this TracerProviderBuild
/// <remarks>
/// Add this enricher *before* exporter related Activity processors.
/// </remarks>
public static TracerProviderBuilder AddTraceEnricher(this TracerProviderBuilder builder, TraceEnricher enricher)
public static TracerProviderBuilder TryAddTraceEnricher(this TracerProviderBuilder builder, TraceEnricher enricher)
{
Guard.ThrowIfNull(builder);
Guard.ThrowIfNull(enricher);

return builder
.ConfigureServices(services => services.AddTraceEnricher(enricher));
.ConfigureServices(services => services.TryAddTraceEnricher(enricher));
}

/// <summary>
/// Adds trace enricher.
/// Adds a trace enricher delegate to the specified <see cref="TracerProviderBuilder"/>.
/// </summary>
/// <param name="builder"><see cref="TracerProviderBuilder"/> being configured.</param>
/// <param name="enrichmentAction">The <see cref="TraceEnrichmentBag"/> delegate to enrich traces.</param>
Expand All @@ -77,7 +77,7 @@ public static TracerProviderBuilder AddTraceEnricher(this TracerProviderBuilder
}

/// <summary>
/// Adds trace enricher.
/// Adds a trace enricher factory to the specified <see cref="TracerProviderBuilder"/>.
/// </summary>
/// <param name="builder"><see cref="TracerProviderBuilder"/> being configured.</param>
/// <param name="enricherImplementationFactory">The <see cref="TraceEnricher"/> object being added using implementation factory.</param>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace Microsoft.Extensions.DependencyInjection;
public static class TraceEnrichmentServiceCollectionExtensions
{
/// <summary>
/// Adds trace enricher.
/// Adds a <see cref="TraceEnricher"/> implementation of type <typeparamref name="T"/> as a Singleton to the specified <see cref="IServiceCollection"/> if one has not already been registered.
/// </summary>
/// <param name="services"><see cref="IServiceCollection"/> being configured.</param>
/// <typeparam name="T">Enricher object type.</typeparam>
Expand All @@ -27,21 +27,21 @@ public static class TraceEnrichmentServiceCollectionExtensions
/// Add this enricher *before* exporter related Activity processors.
/// </remarks>
#if NET
public static IServiceCollection AddTraceEnricher<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T>(this IServiceCollection services)
public static IServiceCollection TryAddTraceEnricher<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T>(this IServiceCollection services)
#else
public static IServiceCollection AddTraceEnricher<T>(this IServiceCollection services)
public static IServiceCollection TryAddTraceEnricher<T>(this IServiceCollection services)
#endif
where T : TraceEnricher
{
Guard.ThrowIfNull(services);

return services
.TryAddEnrichment()
.AddSingleton<TraceEnricher, T>();
services.TryAddEnumerable(ServiceDescriptor.Singleton<TraceEnricher, T>());

return services.TryAddEnrichment();
}

/// <summary>
/// Adds trace enricher.
/// Adds a <see cref="TraceEnricher"/> implementation of type <paramref name="enricher"/> as a Singleton to the specified <see cref="IServiceCollection"/> if one has not already been registered.
/// </summary>
/// <param name="services"><see cref="IServiceCollection"/> being configured.</param>
/// <param name="enricher">The <see cref="TraceEnricher"/> object being added.</param>
Expand All @@ -50,18 +50,18 @@ public static IServiceCollection AddTraceEnricher<T>(this IServiceCollection ser
/// <remarks>
/// Add this enricher *before* exporter related Activity processors.
/// </remarks>
public static IServiceCollection AddTraceEnricher(this IServiceCollection services, TraceEnricher enricher)
public static IServiceCollection TryAddTraceEnricher(this IServiceCollection services, TraceEnricher enricher)
{
Guard.ThrowIfNull(services);
Guard.ThrowIfNull(enricher);

return services
.TryAddEnrichment()
.AddSingleton(enricher);
services.TryAddEnumerable(ServiceDescriptor.Singleton(enricher));

return services.TryAddEnrichment();
}

/// <summary>
/// Adds trace enricher.
/// Adds a trace enricher delegate to the specified <see cref="IServiceCollection"/>.
/// </summary>
/// <param name="services"><see cref="IServiceCollection"/> being configured.</param>
/// <param name="enrichmentAction">The <see cref="TraceEnrichmentBag"/> delegate to enrich traces.</param>
Expand All @@ -83,7 +83,7 @@ public static IServiceCollection AddTraceEnricher(this IServiceCollection servic
}

/// <summary>
/// Adds trace enricher.
/// Adds a trace enricher factory to the specified <see cref="IServiceCollection"/>.
/// </summary>
/// <param name="services"><see cref="IServiceCollection"/> being configured.</param>
/// <param name="enricherImplementationFactory">The <see cref="TraceEnricher"/> object being added using implementation factory.</param>
Expand All @@ -99,7 +99,7 @@ public static IServiceCollection AddTraceEnricher(this IServiceCollection servic

return services
.TryAddEnrichment()
.AddSingleton((serviceProvider) => enricherImplementationFactory(serviceProvider));
.AddSingleton(enricherImplementationFactory);
}

private static IServiceCollection TryAddEnrichment(this IServiceCollection services)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ public sealed class OpenTelemetryEnrichmentProviderBuilderExtensions
private const string SourceName = nameof(OpenTelemetryEnrichmentProviderBuilderExtensions);

[Fact]
public void AddTraceEnricherOfTRegistersEnricher()
public void GenericMethod_RegistersEnricher()
{
var exportedItems = new List<Activity>();

using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource(SourceName)
.AddTraceEnricher<MyTraceEnricher>()
.AddTraceEnricher<MyTraceEnricher2>()
.TryAddTraceEnricher<MyTraceEnricher>()
.TryAddTraceEnricher<MyTraceEnricher2>()
.AddInMemoryExporter(exportedItems)
.Build();

Expand All @@ -41,14 +41,14 @@ public void AddTraceEnricherOfTRegistersEnricher()
}

[Fact]
public void AddTraceEnricherRegistersEnricher()
public void InstanceMethod_RegistersEnricher()
{
var exportedItems = new List<Activity>();

using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource(SourceName)
.AddTraceEnricher(new MyTraceEnricher())
.AddTraceEnricher(new MyTraceEnricher2())
.TryAddTraceEnricher(new MyTraceEnricher())
.TryAddTraceEnricher(new MyTraceEnricher2())
.AddInMemoryExporter(exportedItems)
.Build();

Expand All @@ -71,7 +71,7 @@ public void AddTraceEnricherRegistersEnricher()
}

[Fact]
public void AddTraceEnricherActionRegistersEnricher()
public void DelegateMethod_RegistersEnricher()
{
var exportedItems = new List<Activity>();

Expand Down Expand Up @@ -106,7 +106,7 @@ public void AddTraceEnricherActionRegistersEnricher()
}

[Fact]
public void AddTraceEnricherFactoryRegistersEnricher()
public void FactoryMethod_RegistersEnricher()
{
var exportedItems = new List<Activity>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public sealed class OpenTelemetryEnrichmentServiceCollectionExtensionsTests
private const string SourceName = nameof(OpenTelemetryEnrichmentServiceCollectionExtensionsTests);

[Fact]
public async Task AddTraceEnricherOfTRegistersEnricher()
public async Task GenericMethod_TRegistersEnricher()
{
var exportedItems = new List<Activity>();

Expand All @@ -25,8 +25,8 @@ public async Task AddTraceEnricherOfTRegistersEnricher()
.AddSource(SourceName)
.AddInMemoryExporter(exportedItems))
.Services
.AddTraceEnricher<MyTraceEnricher>()
.AddTraceEnricher<MyTraceEnricher2>())
.TryAddTraceEnricher<MyTraceEnricher>()
.TryAddTraceEnricher<MyTraceEnricher2>())
.Build();

await host.StartAsync();
Expand Down Expand Up @@ -62,7 +62,7 @@ public async Task AddTraceEnricherOfTRegistersEnricher()
}

[Fact]
public async Task AddTraceEnricherRegistersEnricher()
public async Task InstanceMethod_RegistersEnricher()
{
var exportedItems = new List<Activity>();

Expand All @@ -73,8 +73,8 @@ public async Task AddTraceEnricherRegistersEnricher()
.AddSource(SourceName)
.AddInMemoryExporter(exportedItems))
.Services
.AddTraceEnricher(new MyTraceEnricher())
.AddTraceEnricher(new MyTraceEnricher2()))
.TryAddTraceEnricher(new MyTraceEnricher())
.TryAddTraceEnricher(new MyTraceEnricher2()))
.Build();

await host.StartAsync();
Expand Down Expand Up @@ -103,7 +103,7 @@ public async Task AddTraceEnricherRegistersEnricher()
}

[Fact]
public async Task AddTraceEnricherActionRegistersEnricher()
public async Task DelegateMethod_RegistersEnricher()
{
var exportedItems = new List<Activity>();

Expand Down Expand Up @@ -144,7 +144,7 @@ public async Task AddTraceEnricherActionRegistersEnricher()
}

[Fact]
public async Task AddTraceEnricherFactoryRegistersEnricher()
public async Task FactoryMethod_RegistersEnricher()
{
var exportedItems = new List<Activity>();

Expand Down
Loading