55import static datadog .trace .api .DDTags .DD_CODE_ORIGIN_TYPE ;
66import static java .lang .String .format ;
77import static java .util .Arrays .asList ;
8- import static java .util .Collections .emptyList ;
98import static java .util .Collections .singletonList ;
109
1110import com .datadog .debugger .agent .DebuggerAgent ;
@@ -54,6 +53,13 @@ public void evaluate(
5453 }
5554
5655 super .evaluate (context , status , methodLocation );
56+ AgentSpan span = findSpan (AgentTracer .activeSpan ());
57+
58+ if (span == null ) {
59+ LOGGER .debug ("Could not find the span for probeId {}" , id );
60+ return ;
61+ }
62+ applyCodeOriginTags (span );
5763 }
5864
5965 @ Override
@@ -68,63 +74,53 @@ public void commit(
6874 LOGGER .debug ("Could not find the span for probeId {}" , id );
6975 return ;
7076 }
71- String snapshotId = null ;
7277 DebuggerSink sink = DebuggerAgent .getSink ();
7378 if (isDebuggerEnabled (span ) && sink != null ) {
7479 Snapshot snapshot = createSnapshot ();
7580 if (fillSnapshot (entryContext , exitContext , caughtExceptions , snapshot )) {
76- snapshotId = snapshot .getId ();
81+ String snapshotId = snapshot .getId ();
7782 LOGGER .debug ("committing code origin probe id={}, snapshot id={}" , id , snapshotId );
7883 commitSnapshot (snapshot , sink );
84+
85+ List <AgentSpan > agentSpans =
86+ entrySpanProbe ? asList (span , span .getLocalRootSpan ()) : singletonList (span );
87+ for (AgentSpan agentSpan : agentSpans ) {
88+ if (agentSpan .getTag (format (DD_CODE_ORIGIN_FRAME , 0 , "snapshot_id" )) == null ) {
89+ agentSpan .setTag (format (DD_CODE_ORIGIN_FRAME , 0 , "snapshot_id" ), snapshotId );
90+ }
91+ }
7992 }
8093 }
81- applySpanOriginTags (span , snapshotId );
8294 if (sink != null ) {
8395 sink .getProbeStatusSink ().addEmitting (probeId );
8496 }
8597 span .getLocalRootSpan ().setTag (getId (), (String ) null ); // clear possible span reference
8698 }
8799
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 ) {
100+ private List <AgentSpan > applyCodeOriginTags (AgentSpan span ) {
105101 List <StackTraceElement > entries =
106102 stackTraceElements != null ? stackTraceElements : getUserStackFrames ();
107103 List <AgentSpan > agentSpans =
108104 entrySpanProbe ? asList (span , span .getLocalRootSpan ()) : singletonList (span );
109105
110106 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 );
107+ if (s .getTag (DD_CODE_ORIGIN_TYPE ) == null ) {
108+ s .setTag (DD_CODE_ORIGIN_TYPE , entrySpanProbe ? "entry" : "exit" );
109+
110+ for (int i = 0 ; i < entries .size (); i ++) {
111+ StackTraceElement info = entries .get (i );
112+ String fileName = info .getFileName ();
113+ s .setTag (format (DD_CODE_ORIGIN_FRAME , i , "file" ), fileName );
114+ s .setTag (format (DD_CODE_ORIGIN_FRAME , i , "method" ), info .getMethodName ());
115+ s .setTag (format (DD_CODE_ORIGIN_FRAME , i , "line" ), info .getLineNumber ());
116+ s .setTag (format (DD_CODE_ORIGIN_FRAME , i , "type" ), info .getClassName ());
117+ if (i == 0 && entrySpanProbe ) {
118+ s .setTag (format (DD_CODE_ORIGIN_FRAME , i , "signature" ), where .getSignature ());
119+ }
125120 }
126121 }
127122 }
123+ return agentSpans ;
128124 }
129125
130126 public boolean entrySpanProbe () {
0 commit comments