aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/trace
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2017-07-18 11:26:54 +0200
committerIvan Topolnjak <ivantopo@gmail.com>2017-07-18 11:26:54 +0200
commita2d54a72b806ebd60f19011559a6c186d2d9640b (patch)
tree49aeedd2cb3292156dcf16561fe6ff46b47c773f /kamon-core/src/main/scala/kamon/trace
parentec01aa2661df31d58b0b894dcae81c982012e3a7 (diff)
downloadKamon-a2d54a72b806ebd60f19011559a6c186d2d9640b.tar.gz
Kamon-a2d54a72b806ebd60f19011559a6c186d2d9640b.tar.bz2
Kamon-a2d54a72b806ebd60f19011559a6c186d2d9640b.zip
make the SpanContextCodecs configurable
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace')
-rw-r--r--kamon-core/src/main/scala/kamon/trace/Tracer.scala49
1 files changed, 40 insertions, 9 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/Tracer.scala b/kamon-core/src/main/scala/kamon/trace/Tracer.scala
index d7ca5609..f95a8cef 100644
--- a/kamon-core/src/main/scala/kamon/trace/Tracer.scala
+++ b/kamon-core/src/main/scala/kamon/trace/Tracer.scala
@@ -24,9 +24,12 @@ import kamon.metric.MetricLookup
import kamon.trace.Span.TagValue
import kamon.trace.SpanContext.{SamplingDecision, Source}
import kamon.trace.Tracer.SpanBuilder
-import kamon.util.Clock
+import kamon.util.{Clock, DynamicAccess}
import org.slf4j.LoggerFactory
+import scala.collection.immutable
+import scala.util.Try
+
trait ActiveSpanSource {
def activeSpan(): ActiveSpan
@@ -94,16 +97,44 @@ object Tracer {
configuredSampler
private[kamon] def reconfigure(config: Config): Unit = synchronized {
- val traceConfig = config.getConfig("kamon.trace")
+ Try {
+ val dynamic = new DynamicAccess(classOf[Tracer].getClassLoader)
+ val traceConfig = config.getConfig("kamon.trace")
- configuredSampler = traceConfig.getString("sampler") match {
- case "always" => Sampler.Always
- case "never" => Sampler.Never
- case "random" => Sampler.random(traceConfig.getDouble("random-sampler.probability"))
- case other => sys.error(s"Unexpected sampler name $other.")
- }
+ val newSampler = traceConfig.getString("sampler") match {
+ case "always" => Sampler.Always
+ case "never" => Sampler.Never
+ case "random" => Sampler.random(traceConfig.getDouble("random-sampler.probability"))
+ case other => sys.error(s"Unexpected sampler name $other.")
+ }
+
+ val newJoinRemoteParentsWithSameSpanID = traceConfig.getBoolean("join-remote-parents-with-same-span-id")
+
+ val newIdentityProvider = dynamic.createInstanceFor[IdentityProvider](
+ traceConfig.getString("identity-provider"), immutable.Seq.empty[(Class[_], AnyRef)]
+ ).get
+
+ val spanContextCodecs = traceConfig.getConfig("span-context-codec")
+ val newTextMapSpanContextCodec = dynamic.createInstanceFor[SpanContextCodec[TextMap]](
+ spanContextCodecs.getString("text-map"), immutable.Seq((classOf[IdentityProvider], newIdentityProvider))
+ ).get
- joinRemoteParentsWithSameSpanID = traceConfig.getBoolean("join-remote-parents-with-same-span-id")
+ val newHttpHeadersSpanContextCodec = dynamic.createInstanceFor[SpanContextCodec[TextMap]](
+ spanContextCodecs.getString("http-headers"), immutable.Seq((classOf[IdentityProvider], newIdentityProvider))
+ ).get
+
+// val newBinarySpanContextCodec = dynamic.createInstanceFor[SpanContextCodec[TextMap]](
+// spanContextCodecs.getString("binary"), immutable.Seq((classOf[IdentityProvider], newIdentityProvider))
+// ).get // TODO: Make it happen!
+
+
+ configuredSampler = newSampler
+ joinRemoteParentsWithSameSpanID = newJoinRemoteParentsWithSameSpanID
+ identityProvider = newIdentityProvider
+ textMapSpanContextCodec = newTextMapSpanContextCodec
+ httpHeaderSpanContextCodec = newHttpHeadersSpanContextCodec
+
+ }
}
}