|
3 | 3 | import datadog.trace.api.flare.TracerFlare; |
4 | 4 | import datadog.trace.bootstrap.instrumentation.api.AgentSpan; |
5 | 5 | import datadog.trace.core.DDSpan; |
| 6 | +import datadog.trace.core.PendingTrace; |
6 | 7 | import java.io.IOException; |
7 | 8 | import java.lang.ref.WeakReference; |
8 | | -import java.util.ArrayList; |
9 | | -import java.util.HashMap; |
10 | | -import java.util.List; |
11 | | -import java.util.Map; |
| 9 | +import java.util.HashSet; |
| 10 | +import java.util.Set; |
12 | 11 | import java.util.zip.ZipOutputStream; |
13 | 12 |
|
14 | | -public final class TracerDump { |
15 | | - private static final Map<WeakReference<DDSpan>, List<WeakReference<DDSpan>>> activeSpans = |
16 | | - new HashMap<>(); |
| 13 | +public final class TracerDump implements TracerFlare.Reporter { |
17 | 14 |
|
18 | | - public static void addActiveSpan(final DDSpan span, boolean isRootSpan) { |
19 | | - WeakReference<DDSpan> weakRootSpan = |
20 | | - isRootSpan ? new WeakReference<>(span) : new WeakReference<>(span.getLocalRootSpan()); |
21 | | - if (isRootSpan) { |
22 | | - List<WeakReference<DDSpan>> childSpans = new ArrayList<>(); |
23 | | - activeSpans.put(weakRootSpan, childSpans); |
24 | | - } |
25 | | - WeakReference<DDSpan> childSpan = new WeakReference<>(span); |
26 | | - activeSpans.get(weakRootSpan).add(childSpan); |
| 15 | + private static final TracerDump INSTANCE = new TracerDump(); |
| 16 | + |
| 17 | + public static void register() { |
| 18 | + TracerFlare.addReporter(INSTANCE); |
| 19 | + } |
| 20 | + |
| 21 | + private static final Set<WeakReference<DDSpan>> rootSpans = new HashSet<>(); |
| 22 | + |
| 23 | + public static void addActiveSpan(final AgentSpan rootSpan) { |
| 24 | + DDSpan rootDDSpan = (DDSpan) rootSpan; |
| 25 | + WeakReference<DDSpan> weakRootSpan = new WeakReference<>(rootDDSpan); |
| 26 | + rootSpans.add(weakRootSpan); |
27 | 27 | } |
28 | 28 |
|
29 | | - public static void suspendSpansFromRootSpan(AgentSpan rootSpan) { |
| 29 | + public static void suspendRootSpan(final AgentSpan rootSpan) { |
30 | 30 | DDSpan rootDDSpan = (DDSpan) rootSpan; |
31 | 31 | WeakReference<DDSpan> weakRootSpan = new WeakReference<>(rootDDSpan); |
32 | | - activeSpans.remove(weakRootSpan); |
| 32 | + rootSpans.remove(weakRootSpan); |
33 | 33 | } |
34 | 34 |
|
35 | | - public static void dumpTrace(ZipOutputStream zip) throws IOException { |
36 | | - for (List<WeakReference<DDSpan>> spans : activeSpans.values()) { |
37 | | - for (WeakReference<DDSpan> weakSpan : spans) { |
38 | | - DDSpan span = weakSpan.get(); |
39 | | - if (span != null) { |
40 | | - TracerFlare.addText(zip, "trace_dump.txt", span.toString()); |
| 35 | + @Override |
| 36 | + public void addReportToFlare(ZipOutputStream zip) throws IOException { |
| 37 | + for (WeakReference<DDSpan> weakRootSpan : rootSpans) { |
| 38 | + DDSpan rootSpan = weakRootSpan.get(); |
| 39 | + if (rootSpan != null) { |
| 40 | + PendingTrace trace = (PendingTrace) rootSpan.context().getTraceCollector(); |
| 41 | + if (trace != null) { |
| 42 | + for (DDSpan span : trace.getSpans()) { |
| 43 | + TracerFlare.addText(zip, "trace_dump.txt", span.toString()); |
| 44 | + } |
41 | 45 | } |
42 | 46 | } |
43 | 47 | } |
|
0 commit comments