diff options
Diffstat (limited to 'kamon-core/src/main/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 + + } } } |