aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/trace
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2017-08-14 23:08:14 +0200
committerIvan Topolnjak <ivantopo@gmail.com>2017-08-14 23:08:35 +0200
commit407d74e89acdd4dff5a887c1ae5793d63e9e7a2e (patch)
tree677f0a573dfe028f31826748609e315a4bfa36dd /kamon-core/src/main/scala/kamon/trace
parent3a8c0fa25f12230b27e943d1fffe07f814c650fe (diff)
downloadKamon-407d74e89acdd4dff5a887c1ae5793d63e9e7a2e.tar.gz
Kamon-407d74e89acdd4dff5a887c1ae5793d63e9e7a2e.tar.bz2
Kamon-407d74e89acdd4dff5a887c1ae5793d63e9e7a2e.zip
expose the identity provider through the Tracer
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace')
-rw-r--r--kamon-core/src/main/scala/kamon/trace/IdentityProvider.scala10
-rw-r--r--kamon-core/src/main/scala/kamon/trace/SpanCodec.scala (renamed from kamon-core/src/main/scala/kamon/trace/SpanContextCodec.scala)20
-rw-r--r--kamon-core/src/main/scala/kamon/trace/SpanContext.scala48
-rw-r--r--kamon-core/src/main/scala/kamon/trace/Tracer.scala14
4 files changed, 33 insertions, 59 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/IdentityProvider.scala b/kamon-core/src/main/scala/kamon/trace/IdentityProvider.scala
index 3f44629e..937200f5 100644
--- a/kamon-core/src/main/scala/kamon/trace/IdentityProvider.scala
+++ b/kamon-core/src/main/scala/kamon/trace/IdentityProvider.scala
@@ -8,8 +8,8 @@ import kamon.util.HexCodec
import scala.util.Try
trait IdentityProvider {
- def traceIdentifierGenerator(): IdentityProvider.Generator
- def spanIdentifierGenerator(): IdentityProvider.Generator
+ def traceIdGenerator(): IdentityProvider.Generator
+ def spanIdGenerator(): IdentityProvider.Generator
}
object IdentityProvider {
@@ -57,8 +57,8 @@ object IdentityProvider {
} getOrElse(IdentityProvider.NoIdentifier)
}
- override def traceIdentifierGenerator(): Generator = longGenerator
- override def spanIdentifierGenerator(): Generator = longGenerator
+ override def traceIdGenerator(): Generator = longGenerator
+ override def spanIdGenerator(): Generator = longGenerator
}
object Default {
@@ -97,7 +97,7 @@ object IdentityProvider {
} getOrElse(IdentityProvider.NoIdentifier)
}
- override def traceIdentifierGenerator(): Generator = doubleLongGenerator
+ override def traceIdGenerator(): Generator = doubleLongGenerator
}
object DoubleSizeTraceID {
diff --git a/kamon-core/src/main/scala/kamon/trace/SpanContextCodec.scala b/kamon-core/src/main/scala/kamon/trace/SpanCodec.scala
index 1db55694..e04ceb03 100644
--- a/kamon-core/src/main/scala/kamon/trace/SpanContextCodec.scala
+++ b/kamon-core/src/main/scala/kamon/trace/SpanCodec.scala
@@ -17,14 +17,15 @@ package kamon.trace
import java.net.{URLDecoder, URLEncoder}
+import kamon.Kamon
import kamon.context.{Codec, Context, TextMap}
import kamon.trace.SpanContext.SamplingDecision
-object SpanContextCodec {
+object SpanCodec {
- class ExtendedB3(identityProvider: IdentityProvider) extends Codec.ForEntry[TextMap] {
- import ExtendedB3.Headers
+ class B3 extends Codec.ForEntry[TextMap] {
+ import B3.Headers
override def encode(context: Context): TextMap = {
val span = context.get(Span.ContextKey)
@@ -45,17 +46,18 @@ object SpanContextCodec {
}
override def decode(carrier: TextMap, context: Context): Context = {
+ val identityProvider = Kamon.tracer.identityProvider
val traceID = carrier.get(Headers.TraceIdentifier)
- .map(id => identityProvider.traceIdentifierGenerator().from(urlDecode(id)))
+ .map(id => identityProvider.traceIdGenerator().from(urlDecode(id)))
.getOrElse(IdentityProvider.NoIdentifier)
val spanID = carrier.get(Headers.SpanIdentifier)
- .map(id => identityProvider.spanIdentifierGenerator().from(urlDecode(id)))
+ .map(id => identityProvider.spanIdGenerator().from(urlDecode(id)))
.getOrElse(IdentityProvider.NoIdentifier)
if(traceID != IdentityProvider.NoIdentifier && spanID != IdentityProvider.NoIdentifier) {
val parentID = carrier.get(Headers.ParentSpanIdentifier)
- .map(id => identityProvider.spanIdentifierGenerator().from(urlDecode(id)))
+ .map(id => identityProvider.spanIdGenerator().from(urlDecode(id)))
.getOrElse(IdentityProvider.NoIdentifier)
val flags = carrier.get(Headers.Flags)
@@ -81,10 +83,10 @@ object SpanContextCodec {
private def urlDecode(s: String): String = URLDecoder.decode(s, "UTF-8")
}
- object ExtendedB3 {
+ object B3 {
- def apply(identityProvider: IdentityProvider): ExtendedB3 =
- new ExtendedB3(identityProvider)
+ def apply(): B3 =
+ new B3()
object Headers {
val TraceIdentifier = "X-B3-TraceId"
diff --git a/kamon-core/src/main/scala/kamon/trace/SpanContext.scala b/kamon-core/src/main/scala/kamon/trace/SpanContext.scala
index e8b239ba..4d013881 100644
--- a/kamon-core/src/main/scala/kamon/trace/SpanContext.scala
+++ b/kamon-core/src/main/scala/kamon/trace/SpanContext.scala
@@ -34,64 +34,32 @@ case class SpanContext(traceID: Identifier, spanID: Identifier, parentID: Identi
object SpanContext {
val EmptySpanContext = SpanContext(
- traceID = IdentityProvider.NoIdentifier,
- spanID = IdentityProvider.NoIdentifier,
- parentID = IdentityProvider.NoIdentifier,
+ traceID = IdentityProvider.NoIdentifier,
+ spanID = IdentityProvider.NoIdentifier,
+ parentID = IdentityProvider.NoIdentifier,
samplingDecision = SamplingDecision.DoNotSample
)
sealed trait SamplingDecision
+
object SamplingDecision {
/**
- * The Trace is sampled, all child Spans should be sampled as well.
+ * 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.
+ * 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.
+ * The sampling decision has not been taken yet, the Tracer is free to decide when creating a Span.
*/
case object Unknown extends SamplingDecision
- }
-
- /**
- *
- */
- sealed trait Baggage {
- def add(key: String, value:String): Unit
- def get(key: String): Option[String]
- def getAll(): Map[String, String]
}
- object Baggage {
- def apply(): Baggage = new DefaultBaggage()
-
- case object EmptyBaggage extends Baggage {
- override def add(key: String, value: String): Unit = {}
- override def get(key: String): Option[String] = None
- override def getAll: Map[String, String] = Map.empty
- }
-
-
- final class DefaultBaggage extends Baggage {
- private var baggage: Map[String, String] = Map.empty
-
- def add(key: String, value: String): Unit = synchronized {
- baggage = baggage + (key -> value)
- }
-
- def get(key: String): Option[String] =
- baggage.get(key)
-
- def getAll: Map[String, String] =
- baggage
- }
- }
-}
+} \ No newline at end of file
diff --git a/kamon-core/src/main/scala/kamon/trace/Tracer.scala b/kamon-core/src/main/scala/kamon/trace/Tracer.scala
index 65307b95..7d8830ca 100644
--- a/kamon-core/src/main/scala/kamon/trace/Tracer.scala
+++ b/kamon-core/src/main/scala/kamon/trace/Tracer.scala
@@ -29,6 +29,7 @@ import scala.util.Try
trait Tracer {
def buildSpan(operationName: String): SpanBuilder
+ def identityProvider: IdentityProvider
}
object Tracer {
@@ -39,13 +40,16 @@ object Tracer {
private[Tracer] val tracerMetrics = new TracerMetrics(metrics)
@volatile private[Tracer] var joinRemoteParentsWithSameSpanID: Boolean = true
@volatile private[Tracer] var configuredSampler: Sampler = Sampler.Never
- @volatile private[Tracer] var identityProvider: IdentityProvider = IdentityProvider.Default()
+ @volatile private[Tracer] var _identityProvider: IdentityProvider = IdentityProvider.Default()
reconfigure(initialConfig)
override def buildSpan(operationName: String): SpanBuilder =
new SpanBuilder(operationName, this, reporterRegistry)
+ override def identityProvider: IdentityProvider =
+ this._identityProvider
+
def sampler: Sampler =
configuredSampler
@@ -69,7 +73,7 @@ object Tracer {
configuredSampler = newSampler
joinRemoteParentsWithSameSpanID = newJoinRemoteParentsWithSameSpanID
- identityProvider = newIdentityProvider
+ _identityProvider = newIdentityProvider
}.failed.foreach {
ex => logger.error("Unable to reconfigure Kamon Tracer", ex)
@@ -150,12 +154,12 @@ object Tracer {
if(parent.isRemote() && tracer.joinRemoteParentsWithSameSpanID)
parent.context().copy(samplingDecision = samplingDecision)
else
- parent.context().createChild(tracer.identityProvider.spanIdentifierGenerator().generate(), samplingDecision)
+ parent.context().createChild(tracer._identityProvider.spanIdGenerator().generate(), samplingDecision)
private def newSpanContext(samplingDecision: SamplingDecision): SpanContext =
SpanContext(
- traceID = tracer.identityProvider.traceIdentifierGenerator().generate(),
- spanID = tracer.identityProvider.spanIdentifierGenerator().generate(),
+ traceID = tracer._identityProvider.traceIdGenerator().generate(),
+ spanID = tracer._identityProvider.spanIdGenerator().generate(),
parentID = IdentityProvider.NoIdentifier,
samplingDecision = samplingDecision
)