Skip to content

Commit 334085b

Browse files
committed
only decorate spans with code origin information if that span doesn't already have those tags
1 parent 59a70e1 commit 334085b

File tree

1 file changed

+24
-35
lines changed

1 file changed

+24
-35
lines changed

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/probe/CodeOriginProbe.java

Lines changed: 24 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import static datadog.trace.api.DDTags.DD_CODE_ORIGIN_TYPE;
66
import static java.lang.String.format;
77
import static java.util.Arrays.asList;
8-
import static java.util.Collections.emptyList;
98
import static java.util.Collections.singletonList;
109

1110
import com.datadog.debugger.agent.DebuggerAgent;
@@ -68,63 +67,53 @@ public void commit(
6867
LOGGER.debug("Could not find the span for probeId {}", id);
6968
return;
7069
}
71-
String snapshotId = null;
70+
List<AgentSpan> agentSpans = applyCodeOriginTags(span);
71+
7272
DebuggerSink sink = DebuggerAgent.getSink();
7373
if (isDebuggerEnabled(span) && sink != null) {
7474
Snapshot snapshot = createSnapshot();
7575
if (fillSnapshot(entryContext, exitContext, caughtExceptions, snapshot)) {
76-
snapshotId = snapshot.getId();
76+
String snapshotId = snapshot.getId();
7777
LOGGER.debug("committing code origin probe id={}, snapshot id={}", id, snapshotId);
7878
commitSnapshot(snapshot, sink);
79+
80+
for (AgentSpan agentSpan : agentSpans) {
81+
if (agentSpan.getTag(format(DD_CODE_ORIGIN_FRAME, 0, "snapshot_id")) == null) {
82+
agentSpan.setTag(format(DD_CODE_ORIGIN_FRAME, 0, "snapshot_id"), snapshotId);
83+
}
84+
}
7985
}
8086
}
81-
applySpanOriginTags(span, snapshotId);
8287
if (sink != null) {
8388
sink.getProbeStatusSink().addEmitting(probeId);
8489
}
8590
span.getLocalRootSpan().setTag(getId(), (String) null); // clear possible span reference
8691
}
8792

88-
private List<StackTraceElement> findLocation() {
89-
if (entrySpanProbe && stackTraceElements == null) {
90-
ProbeLocation probeLocation = getLocation();
91-
List<String> lines = probeLocation.getLines();
92-
int line = lines == null ? -1 : Integer.parseInt(lines.get(0));
93-
stackTraceElements =
94-
singletonList(
95-
new StackTraceElement(
96-
probeLocation.getType(),
97-
probeLocation.getMethod(),
98-
probeLocation.getFile(),
99-
line));
100-
}
101-
return stackTraceElements != null ? stackTraceElements : emptyList();
102-
}
103-
104-
private void applySpanOriginTags(AgentSpan span, String snapshotId) {
93+
private List<AgentSpan> applyCodeOriginTags(AgentSpan span) {
10594
List<StackTraceElement> entries =
10695
stackTraceElements != null ? stackTraceElements : getUserStackFrames();
10796
List<AgentSpan> agentSpans =
10897
entrySpanProbe ? asList(span, span.getLocalRootSpan()) : singletonList(span);
10998

11099
for (AgentSpan s : agentSpans) {
111-
s.setTag(DD_CODE_ORIGIN_TYPE, entrySpanProbe ? "entry" : "exit");
112-
113-
for (int i = 0; i < entries.size(); i++) {
114-
StackTraceElement info = entries.get(i);
115-
String fileName = info.getFileName();
116-
s.setTag(format(DD_CODE_ORIGIN_FRAME, i, "file"), fileName);
117-
s.setTag(format(DD_CODE_ORIGIN_FRAME, i, "method"), info.getMethodName());
118-
s.setTag(format(DD_CODE_ORIGIN_FRAME, i, "line"), info.getLineNumber());
119-
s.setTag(format(DD_CODE_ORIGIN_FRAME, i, "type"), info.getClassName());
120-
if (i == 0 && entrySpanProbe) {
121-
s.setTag(format(DD_CODE_ORIGIN_FRAME, i, "signature"), where.getSignature());
122-
}
123-
if (i == 0 && snapshotId != null) {
124-
s.setTag(format(DD_CODE_ORIGIN_FRAME, i, "snapshot_id"), snapshotId);
100+
if (s.getTag(DD_CODE_ORIGIN_TYPE) == null) {
101+
s.setTag(DD_CODE_ORIGIN_TYPE, entrySpanProbe ? "entry" : "exit");
102+
103+
for (int i = 0; i < entries.size(); i++) {
104+
StackTraceElement info = entries.get(i);
105+
String fileName = info.getFileName();
106+
s.setTag(format(DD_CODE_ORIGIN_FRAME, i, "file"), fileName);
107+
s.setTag(format(DD_CODE_ORIGIN_FRAME, i, "method"), info.getMethodName());
108+
s.setTag(format(DD_CODE_ORIGIN_FRAME, i, "line"), info.getLineNumber());
109+
s.setTag(format(DD_CODE_ORIGIN_FRAME, i, "type"), info.getClassName());
110+
if (i == 0 && entrySpanProbe) {
111+
s.setTag(format(DD_CODE_ORIGIN_FRAME, i, "signature"), where.getSignature());
112+
}
125113
}
126114
}
127115
}
116+
return agentSpans;
128117
}
129118

130119
public boolean entrySpanProbe() {

0 commit comments

Comments
 (0)