aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/trace/SpanContext.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace/SpanContext.scala')
-rw-r--r--kamon-core/src/main/scala/kamon/trace/SpanContext.scala57
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