Skip to content

Commit 4817ea8

Browse files
committed
Address review comments from copilot-pull-request-reviewer: omit generated RabbitMQ queues from span names
1 parent 4d6c723 commit 4817ea8

6 files changed

Lines changed: 40 additions & 15 deletions

File tree

instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/v2_7/RabbitDeliveryAttributesGetter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableMessagingSemconv;
99
import static io.opentelemetry.javaagent.instrumentation.rabbitmq.v2_7.RabbitInstrumenterHelper.consumerDestinationName;
10+
import static io.opentelemetry.javaagent.instrumentation.rabbitmq.v2_7.RabbitInstrumenterHelper.isGeneratedQueueName;
1011
import static java.util.Collections.emptyList;
1112
import static java.util.Collections.singletonList;
1213

@@ -52,7 +53,7 @@ public boolean isTemporaryDestination(DeliveryRequest request) {
5253

5354
@Override
5455
public boolean isAnonymousDestination(DeliveryRequest request) {
55-
return false;
56+
return isGeneratedQueueName(request.getQueue());
5657
}
5758

5859
@Nullable

instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/v2_7/RabbitInstrumenterHelper.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ public void onPublish(Span span, String exchange, String routingKey) {
3838
if (emitStableMessagingSemconv()) {
3939
String destinationName = producerDestinationName(exchange, routingKey);
4040
span.setAttribute(MESSAGING_DESTINATION_NAME, destinationName);
41-
span.updateName("publish " + destinationName);
41+
span.updateName(
42+
isDefaultExchange(exchange) && isGeneratedQueueName(routingKey)
43+
? "publish"
44+
: "publish " + destinationName);
4245
} else {
4346
span.setAttribute(MESSAGING_DESTINATION_NAME, exchangeName);
4447
span.updateName(exchangeName + " publish");
@@ -66,7 +69,15 @@ public void onProps(Context context, Span span, AMQP.BasicProperties props) {
6669
}
6770

6871
private static String normalizeExchangeName(String exchange) {
69-
return exchange == null || exchange.isEmpty() ? "<default>" : exchange;
72+
return isDefaultExchange(exchange) ? "<default>" : exchange;
73+
}
74+
75+
private static boolean isDefaultExchange(@Nullable String exchange) {
76+
return exchange == null || exchange.isEmpty();
77+
}
78+
79+
static boolean isGeneratedQueueName(@Nullable String queue) {
80+
return queue != null && (queue.startsWith("amq.gen-") || queue.startsWith("spring.gen-"));
7081
}
7182

7283
static String producerDestinationName(String exchange, String routingKey) {

instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/v2_7/RabbitReceiveAttributesGetter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableMessagingSemconv;
99
import static io.opentelemetry.javaagent.instrumentation.rabbitmq.v2_7.RabbitInstrumenterHelper.consumerDestinationName;
10+
import static io.opentelemetry.javaagent.instrumentation.rabbitmq.v2_7.RabbitInstrumenterHelper.isGeneratedQueueName;
1011
import static java.util.Collections.emptyList;
1112
import static java.util.Collections.singletonList;
1213

@@ -57,7 +58,7 @@ public boolean isTemporaryDestination(ReceiveRequest request) {
5758

5859
@Override
5960
public boolean isAnonymousDestination(ReceiveRequest request) {
60-
return false;
61+
return isGeneratedQueueName(request.getQueue());
6162
}
6263

6364
@Nullable

instrumentation/rabbitmq-2.7/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/v2_7/RabbitMqTest.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,9 +639,16 @@ private static void verifySpan(
639639
boolean expectTimestamp) {
640640
String destination = destinationName(exchange, routingKey, operation, resource);
641641
String legacyResource = normalizeQueueName(resource);
642+
boolean anonymousDestination =
643+
emitStableMessagingSemconv()
644+
&& (("publish".equals(operation)
645+
&& "<default>".equals(exchange)
646+
&& RabbitInstrumenterHelper.isGeneratedQueueName(routingKey))
647+
|| (("receive".equals(operation) || "process".equals(operation))
648+
&& RabbitInstrumenterHelper.isGeneratedQueueName(resource)));
642649
String spanName =
643650
emitStableMessagingSemconv() && operation != null
644-
? operation + " " + destination
651+
? anonymousDestination ? operation : operation + " " + destination
645652
: legacyResource + (operation == null ? "" : " " + operation);
646653

647654
span.hasName(spanName);

instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitMessageAttributesGetter.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,11 @@ public boolean isTemporaryDestination(Message message) {
9090

9191
@Override
9292
public boolean isAnonymousDestination(Message message) {
93-
return false;
93+
return isGeneratedQueueName(getConsumerQueue(message.getMessageProperties()));
94+
}
95+
96+
private static boolean isGeneratedQueueName(@Nullable String queue) {
97+
return queue != null && (queue.startsWith("amq.gen-") || queue.startsWith("spring.gen-"));
9498
}
9599

96100
@Override

instrumentation/spring/spring-rabbit-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitMqTest.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -258,18 +258,19 @@ void testAnonymousQueueSpanName() throws Exception {
258258
trace ->
259259
trace.hasSpansSatisfyingExactly(
260260
span ->
261-
span.hasName(
262-
emitStableMessagingSemconv()
263-
? "publish " + anonymousQueueName
264-
: "<default> publish"),
261+
span.hasName(emitStableMessagingSemconv() ? "publish" : "<default> publish")
262+
.hasAttribute(
263+
equalTo(
264+
MESSAGING_DESTINATION_NAME,
265+
emitStableMessagingSemconv() ? anonymousQueueName : "<default>")),
265266
// Verify that a constant span name is used instead of the randomly generated
266267
// anonymous queue name
267268
span ->
268-
span.hasName(
269-
emitStableMessagingSemconv()
270-
? "process " + anonymousQueueName
271-
: "<generated> process")
272-
.hasAttribute(
269+
span.hasName(emitStableMessagingSemconv() ? "process" : "<generated> process")
270+
.hasAttributesSatisfying(
271+
equalTo(
272+
MESSAGING_DESTINATION_NAME,
273+
emitStableMessagingSemconv() ? anonymousQueueName : "<default>"),
273274
equalTo(
274275
MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY, anonymousQueueName))),
275276
trace -> trace.hasSpansSatisfyingExactly(span -> span.hasName("basic.qos")),

0 commit comments

Comments
 (0)