1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
package kamon.trace
/**
* Wraps a [[kamon.trace.Span]] that has been activated in the current Thread. By activated we really mean, it is
* stored in a ThreadLocal value inside the tracer until [[kamon.trace.ActiveSpan#deactivate()]] is called.
*
* When a [[kamon.trace.Span]] is activated it will keep a reference to the previously active Span on the current
* Thread, take it's place as the currently active Span and put the original one once this ActiveSpan gets deactivated.
*
*/
trait ActiveSpan extends Span {
/**
* Sets the currently active Span to whatever Span was active when this Span was activated.
*
*/
def deactivate(): Span
}
object ActiveSpan {
final class Default(wrappedSpan: Span, restoreOnDeactivate: ActiveSpan, tl: ThreadLocal[ActiveSpan])
extends ActiveSpan {
override def deactivate(): Span = {
tl.set(restoreOnDeactivate)
wrappedSpan
}
//
// Forward all other members to the wrapped Span.
//
override def annotate(annotation: Span.Annotation): Span =
wrappedSpan.annotate(annotation)
override def addSpanTag(key: String, value: String): Span =
wrappedSpan.addSpanTag(key, value)
override def addSpanTag(key: String, value: Long): Span =
wrappedSpan.addSpanTag(key, value)
override def addSpanTag(key: String, value: Boolean): Span =
wrappedSpan.addSpanTag(key, value)
override def addMetricTag(key: String, value: String): Span =
wrappedSpan.addMetricTag(key, value)
override def addBaggage(key: String, value: String): Span =
wrappedSpan.addBaggage(key, value)
override def getBaggage(key: String): Option[String] =
wrappedSpan.getBaggage(key)
override def disableMetricsCollection(): Span =
wrappedSpan.disableMetricsCollection()
override def context(): SpanContext =
wrappedSpan.context()
override def setOperationName(operationName: String): Span =
wrappedSpan.setOperationName(operationName)
override def finish(finishMicros: Long): Unit =
wrappedSpan.finish(finishMicros)
override def capture(): Continuation =
wrappedSpan.capture()
override def capture(activeSpanSource: ActiveSpanSource): Continuation =
wrappedSpan.capture(activeSpanSource)
}
object Default {
def apply(wrappedSpan: Span, restoreOnDeactivate: ActiveSpan, tl: ThreadLocal[ActiveSpan]): Default =
new Default(wrappedSpan, restoreOnDeactivate, tl)
}
}
|