Skip to content

Commit a19f73a

Browse files
authored
Dynamically evaluate service name for message consumers (#8088)
* Dynamically evaluate service name for message consumers * Do complex logic only when the FF is enabled
1 parent 53cf809 commit a19f73a

File tree

16 files changed

+206
-65
lines changed

16 files changed

+206
-65
lines changed

dd-java-agent/instrumentation/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsDecorator.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1111
import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString;
1212
import datadog.trace.bootstrap.instrumentation.decorator.MessagingClientDecorator;
13+
import java.util.function.Supplier;
1314

1415
public class SqsDecorator extends MessagingClientDecorator {
1516
static final CharSequence COMPONENT_NAME = UTF8BytesString.create("java-aws-sdk");
@@ -25,7 +26,7 @@ public class SqsDecorator extends MessagingClientDecorator {
2526
Config.get().isTimeInQueueEnabled(!SQS_LEGACY_TRACING, "sqs");
2627
private final String spanKind;
2728
private final CharSequence spanType;
28-
private final String serviceName;
29+
private final Supplier<String> serviceNameSupplier;
2930

3031
public static final SqsDecorator CONSUMER_DECORATE =
3132
new SqsDecorator(
@@ -42,10 +43,10 @@ public class SqsDecorator extends MessagingClientDecorator {
4243
MESSAGE_BROKER,
4344
SpanNaming.instance().namingSchema().messaging().timeInQueueService("sqs"));
4445

45-
protected SqsDecorator(String spanKind, CharSequence spanType, String serviceName) {
46+
protected SqsDecorator(String spanKind, CharSequence spanType, Supplier<String> serviceName) {
4647
this.spanKind = spanKind;
4748
this.spanType = spanType;
48-
this.serviceName = serviceName;
49+
this.serviceNameSupplier = serviceName;
4950
}
5051

5152
@Override
@@ -60,7 +61,7 @@ protected String[] instrumentationNames() {
6061

6162
@Override
6263
protected String service() {
63-
return serviceName;
64+
return serviceNameSupplier.get();
6465
}
6566

6667
@Override

dd-java-agent/instrumentation/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy

+1-1
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ abstract class SqsClientTest extends VersionedNamingTestBase {
407407
}
408408
trace(1) {
409409
span {
410-
serviceName SpanNaming.instance().namingSchema().messaging().inboundService("jms", Config.get().isJmsLegacyTracingEnabled()) ?: Config.get().getServiceName()
410+
serviceName SpanNaming.instance().namingSchema().messaging().inboundService("jms", Config.get().isJmsLegacyTracingEnabled()).get() ?: Config.get().getServiceName()
411411
operationName SpanNaming.instance().namingSchema().messaging().inboundOperation("jms")
412412
resourceName "Consumed from Queue somequeue"
413413
spanType DDSpanTypes.MESSAGE_CONSUMER

dd-java-agent/instrumentation/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsDecorator.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1111
import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString;
1212
import datadog.trace.bootstrap.instrumentation.decorator.MessagingClientDecorator;
13+
import java.util.function.Supplier;
1314

1415
public class SqsDecorator extends MessagingClientDecorator {
1516
static final CharSequence COMPONENT_NAME = UTF8BytesString.create("java-aws-sdk");
@@ -26,7 +27,7 @@ public class SqsDecorator extends MessagingClientDecorator {
2627
Config.get().isTimeInQueueEnabled(!SQS_LEGACY_TRACING, "sqs");
2728
private final String spanKind;
2829
private final CharSequence spanType;
29-
private final String serviceName;
30+
private final Supplier<String> serviceNameSupplier;
3031

3132
public static final SqsDecorator CONSUMER_DECORATE =
3233
new SqsDecorator(
@@ -43,10 +44,11 @@ public class SqsDecorator extends MessagingClientDecorator {
4344
MESSAGE_BROKER,
4445
SpanNaming.instance().namingSchema().messaging().timeInQueueService("sqs"));
4546

46-
protected SqsDecorator(String spanKind, CharSequence spanType, String serviceName) {
47+
protected SqsDecorator(
48+
String spanKind, CharSequence spanType, Supplier<String> serviceNameSupplier) {
4749
this.spanKind = spanKind;
4850
this.spanType = spanType;
49-
this.serviceName = serviceName;
51+
this.serviceNameSupplier = serviceNameSupplier;
5052
}
5153

5254
@Override
@@ -61,7 +63,7 @@ protected String[] instrumentationNames() {
6163

6264
@Override
6365
protected String service() {
64-
return serviceName;
66+
return serviceNameSupplier.get();
6567
}
6668

6769
@Override

dd-java-agent/instrumentation/aws-java-sqs-2.0/src/test/groovy/SqsClientTest.groovy

+1-1
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ abstract class SqsClientTest extends VersionedNamingTestBase {
419419
}
420420
trace(1) {
421421
span {
422-
serviceName SpanNaming.instance().namingSchema().messaging().inboundService("jms", Config.get().isJmsLegacyTracingEnabled()) ?: Config.get().getServiceName()
422+
serviceName SpanNaming.instance().namingSchema().messaging().inboundService("jms", Config.get().isJmsLegacyTracingEnabled()).get() ?: Config.get().getServiceName()
423423
operationName SpanNaming.instance().namingSchema().messaging().inboundOperation("jms")
424424
resourceName "Consumed from Queue somequeue"
425425
spanType DDSpanTypes.MESSAGE_CONSUMER

dd-java-agent/instrumentation/google-pubsub/src/main/java/datadog/trace/instrumentation/googlepubsub/PubSubDecorator.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import datadog.trace.bootstrap.instrumentation.decorator.MessagingClientDecorator;
2323
import java.util.LinkedHashMap;
2424
import java.util.function.Function;
25+
import java.util.function.Supplier;
2526
import java.util.regex.Matcher;
2627
import java.util.regex.Pattern;
2728

@@ -91,12 +92,13 @@ public CharSequence apply(CharSequence input) {
9192
.inboundService(PUBSUB, Config.get().isGooglePubSubLegacyTracingEnabled()));
9293
private final String spanKind;
9394
private final CharSequence spanType;
94-
private final String serviceName;
95+
private final Supplier<String> serviceNameSupplier;
9596

96-
protected PubSubDecorator(String spanKind, CharSequence spanType, String serviceName) {
97+
protected PubSubDecorator(
98+
String spanKind, CharSequence spanType, Supplier<String> serviceNameSupplier) {
9799
this.spanKind = spanKind;
98100
this.spanType = spanType;
99-
this.serviceName = serviceName;
101+
this.serviceNameSupplier = serviceNameSupplier;
100102
}
101103

102104
@Override
@@ -111,7 +113,7 @@ protected String[] instrumentationNames() {
111113

112114
@Override
113115
protected String service() {
114-
return serviceName;
116+
return serviceNameSupplier.get();
115117
}
116118

117119
@Override

dd-java-agent/instrumentation/jakarta-jms/src/main/java/datadog/trace/instrumentation/jakarta/jms/JMSDecorator.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import jakarta.jms.Topic;
2323
import java.util.concurrent.TimeUnit;
2424
import java.util.function.Function;
25+
import java.util.function.Supplier;
2526
import org.slf4j.Logger;
2627
import org.slf4j.LoggerFactory;
2728

@@ -60,7 +61,7 @@ public final class JMSDecorator extends MessagingClientDecorator {
6061

6162
private final String spanKind;
6263
private final CharSequence spanType;
63-
private final String serviceName;
64+
private final Supplier<String> serviceNameSupplier;
6465

6566
public static final JMSDecorator PRODUCER_DECORATE =
6667
new JMSDecorator(
@@ -89,7 +90,10 @@ public final class JMSDecorator extends MessagingClientDecorator {
8990
SpanNaming.instance().namingSchema().messaging().timeInQueueService(JMS.toString()));
9091

9192
public JMSDecorator(
92-
String resourcePrefix, String spanKind, CharSequence spanType, String serviceName) {
93+
String resourcePrefix,
94+
String spanKind,
95+
CharSequence spanType,
96+
Supplier<String> serviceNameSupplier) {
9397
this.resourcePrefix = resourcePrefix;
9498

9599
this.queueTempResourceName = UTF8BytesString.create(resourcePrefix + "Temporary Queue");
@@ -100,7 +104,7 @@ public JMSDecorator(
100104

101105
this.spanKind = spanKind;
102106
this.spanType = spanType;
103-
this.serviceName = serviceName;
107+
this.serviceNameSupplier = serviceNameSupplier;
104108
}
105109

106110
@Override
@@ -115,7 +119,7 @@ protected CharSequence spanType() {
115119

116120
@Override
117121
protected String service() {
118-
return serviceName;
122+
return serviceNameSupplier.get();
119123
}
120124

121125
@Override

dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSDecorator.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import datadog.trace.bootstrap.instrumentation.decorator.MessagingClientDecorator;
1616
import java.util.concurrent.TimeUnit;
1717
import java.util.function.Function;
18+
import java.util.function.Supplier;
1819
import javax.jms.Destination;
1920
import javax.jms.JMSException;
2021
import javax.jms.Message;
@@ -60,7 +61,7 @@ public final class JMSDecorator extends MessagingClientDecorator {
6061

6162
private final String spanKind;
6263
private final CharSequence spanType;
63-
private final String serviceName;
64+
private final Supplier<String> serviceNameSupplier;
6465

6566
public static final JMSDecorator PRODUCER_DECORATE =
6667
new JMSDecorator(
@@ -90,7 +91,10 @@ public final class JMSDecorator extends MessagingClientDecorator {
9091
SpanNaming.instance().namingSchema().messaging().timeInQueueService(JMS.toString()));
9192

9293
public JMSDecorator(
93-
String resourcePrefix, String spanKind, CharSequence spanType, String serviceName) {
94+
String resourcePrefix,
95+
String spanKind,
96+
CharSequence spanType,
97+
Supplier<String> serviceNameSupplier) {
9498
this.resourcePrefix = resourcePrefix;
9599

96100
this.queueTempResourceName = UTF8BytesString.create(resourcePrefix + "Temporary Queue");
@@ -101,7 +105,7 @@ public JMSDecorator(
101105

102106
this.spanKind = spanKind;
103107
this.spanType = spanType;
104-
this.serviceName = serviceName;
108+
this.serviceNameSupplier = serviceNameSupplier;
105109
}
106110

107111
public static void logJMSException(JMSException ex) {
@@ -122,7 +126,7 @@ protected CharSequence spanType() {
122126

123127
@Override
124128
protected String service() {
125-
return serviceName;
129+
return serviceNameSupplier.get();
126130
}
127131

128132
@Override

dd-java-agent/instrumentation/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaDecorator.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString;
1919
import datadog.trace.bootstrap.instrumentation.decorator.MessagingClientDecorator;
2020
import java.util.function.Function;
21+
import java.util.function.Supplier;
2122
import org.apache.kafka.clients.consumer.ConsumerRecord;
2223
import org.apache.kafka.clients.producer.ProducerConfig;
2324
import org.apache.kafka.clients.producer.ProducerRecord;
@@ -41,7 +42,7 @@ public class KafkaDecorator extends MessagingClientDecorator {
4142
public static final String KAFKA_PRODUCED_KEY = "x_datadog_kafka_produced";
4243
private final String spanKind;
4344
private final CharSequence spanType;
44-
private final String serviceName;
45+
private final Supplier<String> serviceNameSupplier;
4546

4647
private static final DDCache<CharSequence, CharSequence> PRODUCER_RESOURCE_NAME_CACHE =
4748
DDCaches.newFixedSizeCache(32);
@@ -78,10 +79,11 @@ public class KafkaDecorator extends MessagingClientDecorator {
7879
InternalSpanTypes.MESSAGE_BROKER,
7980
SpanNaming.instance().namingSchema().messaging().timeInQueueService(KAFKA));
8081

81-
protected KafkaDecorator(String spanKind, CharSequence spanType, String serviceName) {
82+
protected KafkaDecorator(
83+
String spanKind, CharSequence spanType, Supplier<String> serviceNameSupplier) {
8284
this.spanKind = spanKind;
8385
this.spanType = spanType;
84-
this.serviceName = serviceName;
86+
this.serviceNameSupplier = serviceNameSupplier;
8587
}
8688

8789
@Override
@@ -96,7 +98,7 @@ protected String[] instrumentationNames() {
9698

9799
@Override
98100
protected String service() {
99-
return serviceName;
101+
return serviceNameSupplier.get();
100102
}
101103

102104
@Override

dd-java-agent/instrumentation/kafka-clients-3.8/src/main/java17/datadog/trace/instrumentation/kafka_clients38/KafkaDecorator.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString;
1919
import datadog.trace.bootstrap.instrumentation.decorator.MessagingClientDecorator;
2020
import java.util.function.Function;
21+
import java.util.function.Supplier;
2122
import org.apache.kafka.clients.consumer.ConsumerRecord;
2223
import org.apache.kafka.clients.producer.ProducerConfig;
2324
import org.apache.kafka.clients.producer.ProducerRecord;
@@ -41,7 +42,7 @@ public class KafkaDecorator extends MessagingClientDecorator {
4142
public static final String KAFKA_PRODUCED_KEY = "x_datadog_kafka_produced";
4243
private final String spanKind;
4344
private final CharSequence spanType;
44-
private final String serviceName;
45+
private final Supplier<String> serviceNameSupplier;
4546

4647
private static final DDCache<CharSequence, CharSequence> PRODUCER_RESOURCE_NAME_CACHE =
4748
DDCaches.newFixedSizeCache(32);
@@ -78,10 +79,11 @@ public class KafkaDecorator extends MessagingClientDecorator {
7879
InternalSpanTypes.MESSAGE_BROKER,
7980
SpanNaming.instance().namingSchema().messaging().timeInQueueService(KAFKA));
8081

81-
protected KafkaDecorator(String spanKind, CharSequence spanType, String serviceName) {
82+
protected KafkaDecorator(
83+
String spanKind, CharSequence spanType, Supplier<String> serviceNameSupplier) {
8284
this.spanKind = spanKind;
8385
this.spanType = spanType;
84-
this.serviceName = serviceName;
86+
this.serviceNameSupplier = serviceNameSupplier;
8587
}
8688

8789
@Override
@@ -96,7 +98,7 @@ protected String[] instrumentationNames() {
9698

9799
@Override
98100
protected String service() {
99-
return serviceName;
101+
return serviceNameSupplier.get();
100102
}
101103

102104
@Override

dd-java-agent/instrumentation/kafka-streams-0.11/src/main/java/datadog/trace/instrumentation/kafka_streams/KafkaStreamsDecorator.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import datadog.trace.bootstrap.instrumentation.api.Tags;
1515
import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString;
1616
import datadog.trace.bootstrap.instrumentation.decorator.MessagingClientDecorator;
17+
import java.util.function.Supplier;
1718
import org.apache.kafka.streams.processor.internals.ProcessorNode;
1819
import org.apache.kafka.streams.processor.internals.ProcessorRecordContext;
1920
import org.apache.kafka.streams.processor.internals.StampedRecord;
@@ -33,7 +34,7 @@ public class KafkaStreamsDecorator extends MessagingClientDecorator {
3334

3435
private final String spanKind;
3536
private final CharSequence spanType;
36-
private final String serviceName;
37+
private final Supplier<String> serviceNameSupplier;
3738

3839
private static final DDCache<CharSequence, CharSequence> RESOURCE_NAME_CACHE =
3940
DDCaches.newFixedSizeCache(32);
@@ -54,10 +55,11 @@ public class KafkaStreamsDecorator extends MessagingClientDecorator {
5455
InternalSpanTypes.MESSAGE_BROKER,
5556
SpanNaming.instance().namingSchema().messaging().timeInQueueService(KAFKA));
5657

57-
protected KafkaStreamsDecorator(String spanKind, CharSequence spanType, String serviceName) {
58+
protected KafkaStreamsDecorator(
59+
String spanKind, CharSequence spanType, Supplier<String> serviceNameSupplier) {
5860
this.spanKind = spanKind;
5961
this.spanType = spanType;
60-
this.serviceName = serviceName;
62+
this.serviceNameSupplier = serviceNameSupplier;
6163
}
6264

6365
@Override
@@ -67,7 +69,7 @@ protected String[] instrumentationNames() {
6769

6870
@Override
6971
protected String service() {
70-
return serviceName;
72+
return serviceNameSupplier.get();
7173
}
7274

7375
@Override

dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitDecorator.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.LinkedHashMap;
3131
import java.util.Map;
3232
import java.util.concurrent.TimeUnit;
33+
import java.util.function.Supplier;
3334

3435
public class RabbitDecorator extends MessagingClientDecorator {
3536

@@ -84,12 +85,13 @@ public class RabbitDecorator extends MessagingClientDecorator {
8485

8586
private final String spanKind;
8687
private final CharSequence spanType;
87-
private final String serviceName;
88+
private final Supplier<String> serviceNameSupplier;
8889

89-
public RabbitDecorator(String spanKind, CharSequence spanType, String serviceName) {
90+
public RabbitDecorator(
91+
String spanKind, CharSequence spanType, Supplier<String> serviceNameSupplier) {
9092
this.spanKind = spanKind;
9193
this.spanType = spanType;
92-
this.serviceName = serviceName;
94+
this.serviceNameSupplier = serviceNameSupplier;
9395
}
9496

9597
@Override
@@ -99,7 +101,7 @@ protected String[] instrumentationNames() {
99101

100102
@Override
101103
protected String service() {
102-
return serviceName;
104+
return serviceNameSupplier.get();
103105
}
104106

105107
@Override

0 commit comments

Comments
 (0)