diff options
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace/SpanContext.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/trace/SpanContext.scala | 57 |
1 files changed, 41 insertions, 16 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/SpanContext.scala b/kamon-core/src/main/scala/kamon/trace/SpanContext.scala index b37e208b..4d013881 100644 --- a/kamon-core/src/main/scala/kamon/trace/SpanContext.scala +++ b/kamon-core/src/main/scala/kamon/trace/SpanContext.scala @@ -15,26 +15,51 @@ package kamon.trace -import java.lang -import java.util.{Map => JavaMap} +import kamon.trace.IdentityProvider.Identifier +import kamon.trace.SpanContext.SamplingDecision -import scala.collection.JavaConverters._ +/** + * + * @param traceID + * @param spanID + * @param parentID + * @param samplingDecision + */ +case class SpanContext(traceID: Identifier, spanID: Identifier, parentID: Identifier, samplingDecision: SamplingDecision) { -class SpanContext(val traceID: Long, val spanID: Long, val parentID: Long, val sampled: Boolean, - private var baggage: Map[String, String]) extends io.opentracing.SpanContext { + def createChild(childSpanID: Identifier, samplingDecision: SamplingDecision): SpanContext = + this.copy(parentID = this.spanID, spanID = childSpanID) +} - private[kamon] def addBaggageItem(key: String, value: String): Unit = synchronized { - baggage = baggage + (key -> value) - } +object SpanContext { - private[kamon] def getBaggage(key: String): String = synchronized { - baggage.get(key).getOrElse(null) - } + val EmptySpanContext = SpanContext( + traceID = IdentityProvider.NoIdentifier, + spanID = IdentityProvider.NoIdentifier, + parentID = IdentityProvider.NoIdentifier, + samplingDecision = SamplingDecision.DoNotSample + ) + + + sealed trait SamplingDecision - private[kamon] def baggageMap: Map[String, String] = - baggage + object SamplingDecision { + + /** + * The Trace is sampled, all child Spans should be sampled as well. + */ + case object Sample extends SamplingDecision + + /** + * The Trace is not sampled, none of the child Spans should be sampled. + */ + case object DoNotSample extends SamplingDecision + + /** + * The sampling decision has not been taken yet, the Tracer is free to decide when creating a Span. + */ + case object Unknown extends SamplingDecision - override def baggageItems(): lang.Iterable[JavaMap.Entry[String, String]] = synchronized { - baggage.asJava.entrySet() } -} + +}
\ No newline at end of file |