diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2016-12-24 03:14:29 +0100 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2016-12-24 03:17:06 +0100 |
commit | becf6cac7142011cc478ab7ab15d51799b190951 (patch) | |
tree | ebfe0193f2cecf46cda386188c474135f01c20df /kamon-core/src/main/scala/kamon/trace | |
parent | 68de5a1bd092fc7dddf2045491dd36a353b72a71 (diff) | |
download | Kamon-becf6cac7142011cc478ab7ab15d51799b190951.tar.gz Kamon-becf6cac7142011cc478ab7ab15d51799b190951.tar.bz2 Kamon-becf6cac7142011cc478ab7ab15d51799b190951.zip |
allow restarting Kamon in the same process.
taking some ideas from #395, this commit removes ConfigProviders and
allows Kamon to be used in "permissive" mode until it gets started.
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace')
-rw-r--r-- | kamon-core/src/main/scala/kamon/trace/TraceSettings.scala | 6 | ||||
-rw-r--r-- | kamon-core/src/main/scala/kamon/trace/TracerModule.scala | 9 |
2 files changed, 8 insertions, 7 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/TraceSettings.scala b/kamon-core/src/main/scala/kamon/trace/TraceSettings.scala index 06677314..c3a83e93 100644 --- a/kamon-core/src/main/scala/kamon/trace/TraceSettings.scala +++ b/kamon-core/src/main/scala/kamon/trace/TraceSettings.scala @@ -20,7 +20,7 @@ import kamon.util.ConfigTools.Syntax import com.typesafe.config.Config import kamon.util.NanoInterval -case class TraceSettings(levelOfDetail: LevelOfDetail, sampler: Sampler, tokenGeneratorFQN: String) +case class TraceSettings(levelOfDetail: LevelOfDetail, sampler: Sampler, tokenGenerator: () ⇒ String) object TraceSettings { def apply(config: Config): TraceSettings = { @@ -42,8 +42,10 @@ object TraceSettings { case "clock" ⇒ new ClockSampler(new NanoInterval(tracerConfig.getFiniteDuration("clock-sampler.pause").toNanos)) } + val dynamic = new akka.actor.ReflectiveDynamicAccess(getClass.getClassLoader) val tokenGeneratorFQN = tracerConfig.getString("token-generator") + val tokenGenerator = dynamic.createInstanceFor[() ⇒ String](tokenGeneratorFQN, Nil).get // let's bubble up any problems. - TraceSettings(detailLevel, sampler, tokenGeneratorFQN) + TraceSettings(detailLevel, sampler, tokenGenerator) } }
\ No newline at end of file diff --git a/kamon-core/src/main/scala/kamon/trace/TracerModule.scala b/kamon-core/src/main/scala/kamon/trace/TracerModule.scala index b7b6c17a..552962eb 100644 --- a/kamon-core/src/main/scala/kamon/trace/TracerModule.scala +++ b/kamon-core/src/main/scala/kamon/trace/TracerModule.scala @@ -117,14 +117,12 @@ object Tracer { } private[kamon] class TracerModuleImpl(metricsExtension: MetricsModule, config: Config) extends TracerModule { - private val _settings = TraceSettings(config) + @volatile private var _settings = TraceSettings(config) private val _subscriptions = new LazyActorRef private val _incubator = new LazyActorRef - private val _dynamic = new akka.actor.ReflectiveDynamicAccess(getClass.getClassLoader) - private val _tokenGenerator = _dynamic.createInstanceFor[() ⇒ String](_settings.tokenGeneratorFQN, Nil).get // let's bubble up any problems. - private def newToken: String = _tokenGenerator() + private def newToken: String = _settings.tokenGenerator() def newContext(name: String): TraceContext = createTraceContext(name, None) @@ -180,7 +178,8 @@ private[kamon] class TracerModuleImpl(metricsExtension: MetricsModule, config: C _incubator.point(_system.actorOf(Incubator.props(subscriptions))) } - def start(system: ActorSystem): Unit = synchronized { + def start(system: ActorSystem, newConfig: Config): Unit = synchronized { + _settings = TraceSettings(newConfig) _system = system _logger = Logging(_system, "TracerModule") _start |