Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Extensions] Update BaggageActivityProcessor to use baggage key predicate #1816

Open
wants to merge 38 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
c83125b
Update BaggageActivityProcessor to use baggage key predicate
MikeGoldsmith May 20, 2024
5882102
add changelog entry
MikeGoldsmith May 20, 2024
f0197b3
fix readme lint errors
MikeGoldsmith May 20, 2024
faf5890
more linting
MikeGoldsmith May 20, 2024
1d29bde
update extension to take predicate as param
MikeGoldsmith May 20, 2024
e1f0a0c
add regex extension method and example
MikeGoldsmith May 21, 2024
cce029b
Merge branch 'main' of github.com:open-telemetry/opentelemetry-dotnet…
MikeGoldsmith May 21, 2024
2823819
Merge branch 'main' into mike/baggage-predicate
MikeGoldsmith May 22, 2024
7d22d69
add tests
MikeGoldsmith May 22, 2024
bb6c60d
Merge branch 'mike/baggage-predicate' of github.com:honeycombio/opent…
MikeGoldsmith May 22, 2024
65d17e4
add stringcompare in tst to resolve warning
MikeGoldsmith May 22, 2024
94932d1
remove regex extension method, move all keys to processor class
MikeGoldsmith Jun 6, 2024
d2d7ab0
wrap baggage key invovationto prevent exceptions leaking
MikeGoldsmith Jun 6, 2024
603a7a0
clean up readme examples
MikeGoldsmith Jun 6, 2024
798c6de
use builder pattern in extention method
MikeGoldsmith Jun 7, 2024
ca4a71b
update all baggage keys name
MikeGoldsmith Jun 7, 2024
20dce83
add baggage activity error to event source
MikeGoldsmith Jun 7, 2024
aa70c90
update public api
MikeGoldsmith Jun 7, 2024
d7d9878
docs cleanup
MikeGoldsmith Jun 7, 2024
7a86096
update changelog
MikeGoldsmith Jun 7, 2024
e834e70
rename test file
MikeGoldsmith Jun 7, 2024
bd28cde
update test names
MikeGoldsmith Jun 7, 2024
21c2c5b
Merge branch 'main' into mike/baggage-predicate
MikeGoldsmith Jun 7, 2024
3ccca82
fix lint errors
MikeGoldsmith Jun 7, 2024
6c114a3
Apply suggestions from code review
MikeGoldsmith Jun 7, 2024
597411d
Merge branch 'main' into mike/baggage-predicate
MikeGoldsmith Jun 11, 2024
8b76412
Apply suggestions from code review
MikeGoldsmith Jun 12, 2024
f147ef9
tweak warning in readme
MikeGoldsmith Jun 12, 2024
bc08c17
update exception message
MikeGoldsmith Jun 12, 2024
6661810
fix linter error
MikeGoldsmith Jun 12, 2024
881e8da
Merge branch 'main' into mike/baggage-predicate
MikeGoldsmith Jun 12, 2024
3239b2e
fix test name
MikeGoldsmith Jun 17, 2024
19fda8c
remove unused TestActivityProcessor in tests
MikeGoldsmith Jun 17, 2024
325f39f
add test to verify only entries that throw are dropped
MikeGoldsmith Jun 17, 2024
87478e0
update baggage key event source message with bagage key
MikeGoldsmith Jun 17, 2024
24ce184
Merge branch 'mike/baggage-predicate' of github.com:honeycombio/opent…
MikeGoldsmith Jun 17, 2024
2d5fc39
Merge branch 'main' of github.com:open-telemetry/opentelemetry-dotnet…
MikeGoldsmith Jun 17, 2024
761f4cf
Merge branch 'main' into mike/baggage-predicate
MikeGoldsmith Jun 18, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ OpenTelemetry.Logs.LogToActivityEventConversionOptions.StateConverter.set -> voi
OpenTelemetry.Trace.TracerProviderBuilderExtensions
static Microsoft.Extensions.Logging.OpenTelemetryLoggingExtensions.AttachLogsToActivityEvent(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action<OpenTelemetry.Logs.LogToActivityEventConversionOptions!>? configure = null) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddAutoFlushActivityProcessor(this OpenTelemetry.Trace.TracerProviderBuilder! builder, System.Func<System.Diagnostics.Activity!, bool>! predicate, int timeoutMilliseconds = 10000) -> OpenTelemetry.Trace.TracerProviderBuilder!
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddBaggageActivityProcessor(this OpenTelemetry.Trace.TracerProviderBuilder! builder) -> OpenTelemetry.Trace.TracerProviderBuilder!
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddBaggageActivityProcessor(this OpenTelemetry.Trace.TracerProviderBuilder! builder, System.Predicate<string!>! baggageKeyPredicate) -> OpenTelemetry.Trace.TracerProviderBuilder!
3 changes: 3 additions & 0 deletions src/OpenTelemetry.Extensions/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

## Unreleased

* Update BaggageActivityProcessor to use baggage key predicate.
([#1816](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/1816))

## 1.0.0-beta.5

Released 2024-May-08
Expand Down
13 changes: 11 additions & 2 deletions src/OpenTelemetry.Extensions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,19 @@ and adds the baggage keys and values to the `Activity` as tags (attributes) on s

Add this activity processor to a tracer provider.

Example of adding BaggageActivityProcessor to `TracerProvider`:
For example, to add all baggage entries to new activities:

```cs
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddBaggageActivityProcessor()
.AddBaggageActivityProcessor(BaggageActivityProcessor.AllowAllBaggageKeys)
.Build();
```

Alternatively, you can provide a custom baggage key predicate to select which
baggage keys you want to copy.

For example, to only copy baggage entries that start with `my-key`:

```cs
new AddBaggageActivityProcessor(baggageKey => baggageKey.StartWith("my-key"))
```
24 changes: 22 additions & 2 deletions src/OpenTelemetry.Extensions/Trace/BaggageActivityProcessor.cs
Original file line number Diff line number Diff line change
@@ -1,21 +1,41 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

using System;
using System.Diagnostics;

namespace OpenTelemetry.Trace;

/// <summary>
/// Activity processor that adds <see cref="Baggage"/> fields to every new span.
/// Activity processor that adds <see cref="Baggage"/> fields to every new activity.
/// </summary>
internal sealed class BaggageActivityProcessor : BaseProcessor<Activity>
{
/// <summary>
/// A predicate that allows all baggage keys.
/// </summary>
public static readonly Predicate<string> AllowAllBaggageKeys = _ => true;

private readonly Predicate<string> baggageKeyPredicate;

/// <summary>
/// Initializes a new instance of the <see cref="BaggageActivityProcessor"/> class.
/// </summary>
/// <param name="baggageKeyPredicate">Predicate to determine which baggage keys should be added to the activity.</param>
public BaggageActivityProcessor(Predicate<string> baggageKeyPredicate)
{
this.baggageKeyPredicate = baggageKeyPredicate ?? throw new ArgumentNullException(nameof(baggageKeyPredicate));
}

/// <inheritdoc />
public override void OnStart(Activity activity)
{
foreach (var entry in Baggage.Current)
{
activity.SetTag(entry.Key, entry.Value);
if (this.baggageKeyPredicate(entry.Key))
MikeGoldsmith marked this conversation as resolved.
Show resolved Hide resolved
{
activity.SetTag(entry.Key, entry.Value);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,16 @@ public static class TracerProviderBuilderExtensions
/// Adds the <see cref="BaggageActivityProcessor"/> to the <see cref="TracerProviderBuilder"/>.
/// </summary>
/// <param name="builder"><see cref="TracerProviderBuilder"/> to add the <see cref="BaggageActivityProcessor"/> to.</param>
/// <param name="baggageKeyPredicate">Predicate to determine which baggage keys should be added to the activity.</param>
/// <returns>The instance of <see cref="TracerProviderBuilder"/> to chain the calls.</returns>
public static TracerProviderBuilder AddBaggageActivityProcessor(
this TracerProviderBuilder builder)
this TracerProviderBuilder builder,
Predicate<string> baggageKeyPredicate)
{
Guard.ThrowIfNull(builder);

#pragma warning disable CA2000 // Dispose objects before losing scope
return builder.AddProcessor(new BaggageActivityProcessor());
return builder.AddProcessor(new BaggageActivityProcessor(baggageKeyPredicate));
MikeGoldsmith marked this conversation as resolved.
Show resolved Hide resolved
#pragma warning restore CA2000 // Dispose objects before losing scope
}
}
Loading