Skip to content

Commit b44ed04

Browse files
committed
WIP DO NOT MERGE
in progress DSM support for jms
1 parent a081948 commit b44ed04

5 files changed

Lines changed: 63 additions & 12 deletions

File tree

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,19 @@ public final class MessageConsumerState {
99
private final SessionState sessionState;
1010
private final CharSequence brokerResourceName;
1111
private final String brokerServiceName;
12+
private final CharSequence consumerBaseResourceName;
1213
private final CharSequence consumerResourceName;
1314
private final boolean propagationDisabled;
1415

1516
public MessageConsumerState(
1617
SessionState sessionState,
1718
CharSequence brokerResourceName,
19+
CharSequence consumerBaseResourceName,
1820
CharSequence consumerResourceName,
1921
boolean propagationDisabled) {
2022
this.sessionState = sessionState;
2123
this.brokerResourceName = brokerResourceName;
24+
this.consumerBaseResourceName = consumerBaseResourceName;
2225
this.consumerResourceName = consumerResourceName;
2326
this.propagationDisabled = propagationDisabled;
2427

@@ -47,6 +50,10 @@ public String getBrokerServiceName() {
4750
return brokerServiceName;
4851
}
4952

53+
public CharSequence getConsumerBaseResourceName() {
54+
return consumerBaseResourceName;
55+
}
56+
5057
public CharSequence getConsumerResourceName() {
5158
return consumerResourceName;
5259
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,12 @@ public void onProduce(AgentSpan span, CharSequence resourceName) {
159159
if (null != resourceName) {
160160
span.setResourceName(resourceName);
161161
}
162+
// span.setTag("roisinlhtest", 123);
163+
// DataStreamsTags tags = create("jms", OUTBOUND, "jms-" + resourceName.toString());
164+
// DataStreamsContext dsmContext = DataStreamsContext.fromTags(tags);
165+
// AgentTracer.get()
166+
// .getDataStreamsMonitoring()
167+
// .setCheckpoint(span, dsmContext);
162168
}
163169

164170
public static boolean canInject(Message message) {

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.hasInterface;
44
import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface;
55
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
6+
import static datadog.trace.api.datastreams.DataStreamsTags.Direction.INBOUND;
7+
import static datadog.trace.api.datastreams.DataStreamsTags.create;
68
import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.extractContextAndGetSpanContext;
79
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateNext;
810
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious;
@@ -20,10 +22,13 @@
2022
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
2123

2224
import datadog.trace.agent.tooling.Instrumenter;
25+
import datadog.trace.api.datastreams.DataStreamsContext;
26+
import datadog.trace.api.datastreams.DataStreamsTags;
2327
import datadog.trace.bootstrap.CallDepthThreadLocalMap;
2428
import datadog.trace.bootstrap.InstrumentationContext;
2529
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
2630
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
31+
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
2732
import datadog.trace.bootstrap.instrumentation.jms.MessageConsumerState;
2833
import datadog.trace.bootstrap.instrumentation.jms.SessionState;
2934
import javax.jms.Message;
@@ -143,6 +148,13 @@ public static void afterReceive(
143148

144149
CONSUMER_DECORATE.afterStart(span);
145150
CONSUMER_DECORATE.onConsume(span, message, consumerState.getConsumerResourceName());
151+
152+
span.setTag("messageClass", message.getClass().getName());
153+
DataStreamsTags tags =
154+
create("jms", INBOUND, consumerState.getConsumerBaseResourceName().toString());
155+
DataStreamsContext dsmContext = DataStreamsContext.fromTags(tags);
156+
AgentTracer.get().getDataStreamsMonitoring().setCheckpoint(span, dsmContext);
157+
146158
CONSUMER_DECORATE.onError(span, throwable);
147159

148160
activateNext(span); // scope is left open until next message or it times out

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

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.hasInterface;
55
import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.implementsInterface;
66
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
7+
import static datadog.trace.api.datastreams.DataStreamsTags.Direction.OUTBOUND;
8+
import static datadog.trace.api.datastreams.DataStreamsTags.create;
79
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
810
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
911
import static datadog.trace.instrumentation.jms.JMSDecorator.JMS_PRODUCE;
@@ -15,10 +17,13 @@
1517

1618
import datadog.trace.agent.tooling.Instrumenter;
1719
import datadog.trace.api.Config;
20+
import datadog.trace.api.datastreams.DataStreamsContext;
21+
import datadog.trace.api.datastreams.DataStreamsTags;
1822
import datadog.trace.bootstrap.CallDepthThreadLocalMap;
1923
import datadog.trace.bootstrap.InstrumentationContext;
2024
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
2125
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
26+
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
2227
import datadog.trace.bootstrap.instrumentation.jms.MessageProducerState;
2328
import javax.jms.Destination;
2429
import javax.jms.Message;
@@ -73,24 +78,32 @@ public static AgentScope beforeSend(
7378
.get(producer);
7479

7580
CharSequence resourceName;
76-
77-
if (null != producerState) {
78-
resourceName = producerState.getResourceName();
79-
} else {
80-
try {
81-
// fall-back when producer wasn't created via standard Session.createProducer API
82-
Destination destination = producer.getDestination();
83-
boolean isQueue = PRODUCER_DECORATE.isQueue(destination);
84-
String destinationName = PRODUCER_DECORATE.getDestinationName(destination);
81+
String destinationName;
82+
try {
83+
// fall-back when producer wasn't created via standard Session.createProducer API
84+
Destination destination = producer.getDestination();
85+
boolean isQueue = PRODUCER_DECORATE.isQueue(destination);
86+
destinationName = PRODUCER_DECORATE.getDestinationName(destination);
87+
if (null != producerState) {
88+
resourceName = producerState.getResourceName();
89+
} else {
8590
resourceName = PRODUCER_DECORATE.toResourceName(destinationName, isQueue);
86-
} catch (Exception ignored) {
87-
resourceName = "Unknown Destination";
8891
}
92+
} catch (Exception ignored) {
93+
resourceName = "Unknown Destination";
94+
destinationName = "";
8995
}
9096

9197
final AgentSpan span = startSpan(JMS_PRODUCE);
9298
PRODUCER_DECORATE.afterStart(span);
9399
PRODUCER_DECORATE.onProduce(span, resourceName);
100+
span.setTag("messageClass", message.getClass().getName());
101+
if (!destinationName.isEmpty()) {
102+
DataStreamsTags tags = create("jms", OUTBOUND, destinationName);
103+
DataStreamsContext dsmContext = DataStreamsContext.fromTags(tags);
104+
AgentTracer.get().getDataStreamsMonitoring().setCheckpoint(span, dsmContext);
105+
}
106+
94107
if (JMSDecorator.canInject(message)) {
95108
if (Config.get().isJmsPropagationEnabled()
96109
&& (null == producerState || !producerState.isPropagationDisabled())) {
@@ -138,10 +151,19 @@ public static AgentScope beforeSend(
138151
final AgentSpan span = startSpan(JMS_PRODUCE);
139152
PRODUCER_DECORATE.afterStart(span);
140153
PRODUCER_DECORATE.onProduce(span, resourceName);
154+
155+
span.setTag("messageClass", message.getClass().getName());
156+
if (!destinationName.isEmpty()) {
157+
DataStreamsTags tags = create("jms", OUTBOUND, destinationName);
158+
DataStreamsContext dsmContext = DataStreamsContext.fromTags(tags);
159+
AgentTracer.get().getDataStreamsMonitoring().setCheckpoint(span, dsmContext);
160+
}
161+
141162
if (JMSDecorator.canInject(message)) {
142163
if (Config.get().isJmsPropagationEnabled()
143164
&& !Config.get().isJmsPropagationDisabledForDestination(destinationName))
144165
defaultPropagator().inject(span, message, SETTER);
166+
145167
if (TIME_IN_QUEUE_ENABLED) {
146168
MessageProducerState producerState =
147169
InstrumentationContext.get(MessageProducer.class, MessageProducerState.class)

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,11 @@ public static void bindConsumerState(
176176
consumerStateStore.put(
177177
consumer,
178178
new MessageConsumerState(
179-
sessionState, brokerResourceName, consumerResourceName, propagationDisabled));
179+
sessionState,
180+
brokerResourceName,
181+
destinationName,
182+
consumerResourceName,
183+
propagationDisabled));
180184
}
181185
}
182186
}

0 commit comments

Comments
 (0)