blob: 3a46d94f2b6dde2419a800c43021921b18a84261 (
plain) (
tree)
|
|
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(): Unit
}
object ActiveSpan {
final class Default(wrappedSpan: Span, restoreOnDeactivate: ActiveSpan, tl: ThreadLocal[ActiveSpan])
extends ActiveSpan {
override def deactivate(): Unit =
tl.set(restoreOnDeactivate)
//
// 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 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(): Unit =
wrappedSpan.finish()
override def finish(finishMicros: Long): Unit =
wrappedSpan.finish(finishMicros)
override def capture(): Continuation =
wrappedSpan.capture()
}
object Default {
def apply(wrappedSpan: Span, restoreOnDeactivate: ActiveSpan, tl: ThreadLocal[ActiveSpan]): Default =
new Default(wrappedSpan, restoreOnDeactivate, tl)
}
}
|