diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2017-08-14 23:08:14 +0200 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2017-08-14 23:08:35 +0200 |
commit | 407d74e89acdd4dff5a887c1ae5793d63e9e7a2e (patch) | |
tree | 677f0a573dfe028f31826748609e315a4bfa36dd /kamon-core/src/main/scala | |
parent | 3a8c0fa25f12230b27e943d1fffe07f814c650fe (diff) | |
download | Kamon-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')
-rw-r--r-- | kamon-core/src/main/scala/kamon/Kamon.scala | 4 | ||||
-rw-r--r-- | kamon-core/src/main/scala/kamon/context/Codec.scala | 30 | ||||
-rw-r--r-- | kamon-core/src/main/scala/kamon/trace/IdentityProvider.scala | 10 | ||||
-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.scala | 48 | ||||
-rw-r--r-- | kamon-core/src/main/scala/kamon/trace/Tracer.scala | 14 |
6 files changed, 51 insertions, 75 deletions
diff --git a/kamon-core/src/main/scala/kamon/Kamon.scala b/kamon-core/src/main/scala/kamon/Kamon.scala index 5c33b3b5..b1490e32 100644 --- a/kamon-core/src/main/scala/kamon/Kamon.scala +++ b/kamon-core/src/main/scala/kamon/Kamon.scala @@ -94,6 +94,10 @@ object Kamon extends MetricLookup with ReporterRegistry with Tracer { override def buildSpan(operationName: String): Tracer.SpanBuilder = _tracer.buildSpan(operationName) + + override def identityProvider: IdentityProvider = + _tracer.identityProvider + def currentContext(): Context = _contextStorage.current() diff --git a/kamon-core/src/main/scala/kamon/context/Codec.scala b/kamon-core/src/main/scala/kamon/context/Codec.scala index 957c3e26..50b7e93d 100644 --- a/kamon-core/src/main/scala/kamon/context/Codec.scala +++ b/kamon-core/src/main/scala/kamon/context/Codec.scala @@ -2,11 +2,13 @@ package kamon package context import com.typesafe.config.Config +import kamon.trace.IdentityProvider import kamon.util.DynamicAccess import org.slf4j.LoggerFactory + import scala.collection.mutable -class Codec(initialConfig: Config) { +class Codec(identityProvider: IdentityProvider, initialConfig: Config) { private val log = LoggerFactory.getLogger(classOf[Codec]) @volatile private var httpHeaders: Codec.ForContext[TextMap] = new Codec.HttpHeaders(Map.empty) @@ -19,14 +21,6 @@ class Codec(initialConfig: Config) { def reconfigure(config: Config): Unit = { httpHeaders = new Codec.HttpHeaders(readEntryCodecs("kamon.context.encoding.http-headers", config)) - - - // Kamon.contextCodec.httpHeaderExport(current) - // Kamon.exportContext(HTTP, context) - // Kamon.importContext(HTTP, textMap) - // Kamon.currentContext() - // Kamon.storeContext(context) - } private def readEntryCodecs[T](rootKey: String, config: Config): Map[String, Codec.ForEntry[T]] = { @@ -101,11 +95,11 @@ object Codec { context } } - } trait TextMap { + def get(key: String): Option[String] def put(key: String, value: String): Unit @@ -116,17 +110,21 @@ trait TextMap { object TextMap { class Default extends TextMap { - private val storage = mutable.Map.empty[String, String] + private val storage = + mutable.Map.empty[String, String] - override def get(key: String): Option[String] = storage.get(key) + override def get(key: String): Option[String] = + storage.get(key) - override def put(key: String, value: String): Unit = storage.put(key, value) + override def put(key: String, value: String): Unit = + storage.put(key, value) - override def values: Iterator[(String, String)] = storage.toIterator + override def values: Iterator[(String, String)] = + storage.toIterator } object Default { - def apply(): Default = new Default() + def apply(): Default = + new Default() } - }
\ No newline at end of file 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 ) |