Skip to content

Commit

Permalink
Change to always link, optionally parent/child
Browse files Browse the repository at this point in the history
  • Loading branch information
meum committed Jan 29, 2025
1 parent 542d785 commit 13ed57d
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 28 deletions.
14 changes: 6 additions & 8 deletions projects/RabbitMQ.Client/Impl/RabbitMQActivitySource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -116,10 +116,9 @@ public static class RabbitMQActivitySource
}

// Extract the PropagationContext of the upstream parent from the message headers.
ActivityContext linkedContext = LinkType == OpenTelemetryLinkType.AlwaysLink
? ContextExtractor(readOnlyBasicProperties) : default;
ActivityContext parentContext = LinkType == OpenTelemetryLinkType.AlwaysParentChild
? ContextExtractor(readOnlyBasicProperties) : default;
ActivityContext linkedContext = ContextExtractor(readOnlyBasicProperties);
ActivityContext parentContext = LinkType == OpenTelemetryLinkType.AlwaysParentChildAndLink
? linkedContext : default;

Activity? activity = s_subscriberSource.StartLinkedRabbitMQActivity(
UseRoutingKeyAsOperationName ? $"{MessagingOperationNameBasicGet} {routingKey}" : MessagingOperationNameBasicGet, ActivityKind.Consumer,
Expand All @@ -144,10 +143,9 @@ public static class RabbitMQActivitySource
}

// Extract the PropagationContext of the upstream parent from the message headers.
ActivityContext linkedContext = LinkType == OpenTelemetryLinkType.AlwaysLink
? ContextExtractor(readOnlyBasicProperties) : default;
ActivityContext parentContext = LinkType == OpenTelemetryLinkType.AlwaysParentChild
? ContextExtractor(readOnlyBasicProperties) : default;
ActivityContext linkedContext = ContextExtractor(readOnlyBasicProperties);
ActivityContext parentContext = LinkType == OpenTelemetryLinkType.AlwaysParentChildAndLink
? linkedContext : default;

Activity? activity = s_subscriberSource.StartLinkedRabbitMQActivity(
UseRoutingKeyAsOperationName ? $"{MessagingOperationNameBasicDeliver} {routingKey}" : MessagingOperationNameBasicDeliver,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
public enum OpenTelemetryLinkType
{
AlwaysLink,
AlwaysParentChild
AlwaysParentChildAndLink
}

public class RabbitMQOpenTelemetryOptions
Expand Down
2 changes: 1 addition & 1 deletion projects/RabbitMQ.Client/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
RabbitMQ.Client.OpenTelemetryLinkType
RabbitMQ.Client.OpenTelemetryLinkType.AlwaysLink = 0 -> RabbitMQ.Client.OpenTelemetryLinkType
RabbitMQ.Client.OpenTelemetryLinkType.AlwaysParentChild = 1 -> RabbitMQ.Client.OpenTelemetryLinkType
RabbitMQ.Client.OpenTelemetryLinkType.AlwaysParentChildAndLink = 1 -> RabbitMQ.Client.OpenTelemetryLinkType
RabbitMQ.Client.RabbitMQOpenTelemetryOptions
RabbitMQ.Client.RabbitMQOpenTelemetryOptions.LinkType.get -> RabbitMQ.Client.OpenTelemetryLinkType
RabbitMQ.Client.RabbitMQOpenTelemetryOptions.LinkType.set -> void
Expand Down
21 changes: 10 additions & 11 deletions projects/Test/SequentialIntegration/TestActivitySource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ void AssertIntTagGreaterThanZero(Activity activity, string name)
public async Task TestPublisherAndConsumerActivityTags(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
{
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
var _activities = new List<Activity>();
using ActivityListener activityListener = StartActivityListener(_activities);
await Task.Delay(500);
Expand Down Expand Up @@ -120,7 +120,7 @@ public async Task TestPublisherAndConsumerActivityTags(bool useRoutingKeyAsOpera
public async Task TestPublisherWithCachedStringsAndConsumerActivityTags(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
{
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
var _activities = new List<Activity>();
using ActivityListener activityListener = StartActivityListener(_activities);
await Task.Delay(500);
Expand Down Expand Up @@ -159,7 +159,7 @@ public async Task TestPublisherWithCachedStringsAndConsumerActivityTags(bool use
public async Task TestPublisherWithPublicationAddressAndConsumerActivityTags(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
{
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
var _activities = new List<Activity>();
using ActivityListener activityListener = StartActivityListener(_activities);
await Task.Delay(500);
Expand Down Expand Up @@ -197,7 +197,7 @@ public async Task TestPublisherWithPublicationAddressAndConsumerActivityTags(boo
public async Task TestPublisherAndConsumerActivityTagsAsync(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
{
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
var activities = new List<Activity>();
using ActivityListener activityListener = StartActivityListener(activities);
await Task.Delay(500);
Expand Down Expand Up @@ -235,7 +235,7 @@ public async Task TestPublisherAndConsumerActivityTagsAsync(bool useRoutingKeyAs
public async Task TestPublisherWithCachedStringsAndConsumerActivityTagsAsync(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
{
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
var activities = new List<Activity>();
using ActivityListener activityListener = StartActivityListener(activities);
await Task.Delay(500);
Expand Down Expand Up @@ -275,7 +275,7 @@ public async Task TestPublisherWithCachedStringsAndConsumerActivityTagsAsync(boo
public async Task TestPublisherWithPublicationAddressAndConsumerActivityTagsAsync(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
{
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
var activities = new List<Activity>();
using ActivityListener activityListener = StartActivityListener(activities);
await Task.Delay(500);
Expand Down Expand Up @@ -314,7 +314,7 @@ public async Task TestPublisherWithPublicationAddressAndConsumerActivityTagsAsyn
public async Task TestPublisherAndBasicGetActivityTags(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
{
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
var activities = new List<Activity>();
using ActivityListener activityListener = StartActivityListener(activities);
await Task.Delay(500);
Expand Down Expand Up @@ -348,7 +348,7 @@ public async Task TestPublisherAndBasicGetActivityTags(bool useRoutingKeyAsOpera
public async Task TestPublisherWithCachedStringsAndBasicGetActivityTags(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
{
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
var activities = new List<Activity>();
using ActivityListener activityListener = StartActivityListener(activities);
await Task.Delay(500);
Expand Down Expand Up @@ -384,7 +384,7 @@ public async Task TestPublisherWithCachedStringsAndBasicGetActivityTags(bool use
public async Task TestPublisherWithPublicationAddressAndBasicGetActivityTags(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
{
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
var activities = new List<Activity>();
using ActivityListener activityListener = StartActivityListener(activities);
await Task.Delay(500);
Expand Down Expand Up @@ -452,15 +452,14 @@ private void AssertActivityData(bool useRoutingKeyAsOperationName, bool useParen
x.OperationName == (useRoutingKeyAsOperationName ? $"{childName} {queueName}" : childName));
Assert.Equal(ActivityKind.Producer, sendActivity.Kind);
Assert.Equal(ActivityKind.Consumer, receiveActivity.Kind);
Assert.Equal(sendActivity.TraceId, receiveActivity.Links.Single().Context.TraceId);
if (useParentChildLinking)
{
Assert.Empty(receiveActivity.Links);
Assert.Equal(sendActivity.Id, receiveActivity.ParentId);
Assert.Equal(sendActivity.TraceId, receiveActivity.TraceId);
}
else
{
Assert.Equal(sendActivity.TraceId, receiveActivity.Links.Single().Context.TraceId);
Assert.Null(receiveActivity.ParentId);
Assert.NotEqual(sendActivity.TraceId, receiveActivity.TraceId);
}
Expand Down
13 changes: 6 additions & 7 deletions projects/Test/SequentialIntegration/TestOpenTelemetry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public async Task TestPublisherAndConsumerActivityTags(bool useRoutingKeyAsOpera
.AddRabbitMQInstrumentation(options =>
{
options.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
})
.AddInMemoryExporter(exportedItems)
.Build();
Expand Down Expand Up @@ -152,7 +152,7 @@ public async Task TestPublisherAndConsumerActivityTagsAsync(bool useRoutingKeyAs
.AddRabbitMQInstrumentation(options =>
{
options.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
})
.AddInMemoryExporter(exportedItems)
.Build();
Expand Down Expand Up @@ -211,7 +211,7 @@ public async Task TestPublisherWithPublicationAddressAndConsumerActivityTagsAsyn
.AddRabbitMQInstrumentation(options =>
{
options.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
})
.AddInMemoryExporter(exportedItems)
.Build();
Expand Down Expand Up @@ -271,7 +271,7 @@ public async Task TestPublisherWithCachedStringsAndConsumerActivityTagsAsync(boo
.AddRabbitMQInstrumentation(options =>
{
options.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
})
.AddInMemoryExporter(exportedItems)
.Build();
Expand Down Expand Up @@ -332,7 +332,7 @@ public async Task TestPublisherAndBasicGetActivityTags(bool useRoutingKeyAsOpera
.AddRabbitMQInstrumentation(options =>
{
options.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
})
.AddInMemoryExporter(exportedItems)
.Build();
Expand Down Expand Up @@ -387,15 +387,14 @@ private void AssertActivityData(bool useRoutingKeyAsOperationName, bool useParen
x.OperationName == (useRoutingKeyAsOperationName ? $"{childName} {queueName}" : childName));
Assert.Equal(ActivityKind.Producer, sendActivity.Kind);
Assert.Equal(ActivityKind.Consumer, receiveActivity.Kind);
Assert.Equal(sendActivity.TraceId, receiveActivity.Links.Single().Context.TraceId);
if (useParentChildLinking)
{
Assert.Empty(receiveActivity.Links);
Assert.Equal(sendActivity.Id, receiveActivity.ParentId);
Assert.Equal(sendActivity.TraceId, receiveActivity.TraceId);
}
else
{
Assert.Equal(sendActivity.TraceId, receiveActivity.Links.Single().Context.TraceId);
Assert.Null(receiveActivity.ParentId);
Assert.NotEqual(sendActivity.TraceId, receiveActivity.TraceId);
}
Expand Down

0 comments on commit 13ed57d

Please sign in to comment.