diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2017-07-18 11:26:54 +0200 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2017-07-18 11:26:54 +0200 |
commit | a2d54a72b806ebd60f19011559a6c186d2d9640b (patch) | |
tree | 49aeedd2cb3292156dcf16561fe6ff46b47c773f /kamon-core/src/main/scala/kamon/trace/Tracer.scala | |
parent | ec01aa2661df31d58b0b894dcae81c982012e3a7 (diff) | |
download | Kamon-a2d54a72b806ebd60f19011559a6c186d2d9640b.tar.gz Kamon-a2d54a72b806ebd60f19011559a6c186d2d9640b.tar.bz2 Kamon-a2d54a72b806ebd60f19011559a6c186d2d9640b.zip |
make the SpanContextCodecs configurable
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace/Tracer.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/trace/Tracer.scala | 49 |
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 + + } } } |