diff options
Diffstat (limited to 'kamon-core/src/main/scala/kamon/metric/RecorderRegistry.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/metric/RecorderRegistry.scala | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/kamon-core/src/main/scala/kamon/metric/RecorderRegistry.scala b/kamon-core/src/main/scala/kamon/metric/RecorderRegistry.scala index 99974032..8b84ab6a 100644 --- a/kamon-core/src/main/scala/kamon/metric/RecorderRegistry.scala +++ b/kamon-core/src/main/scala/kamon/metric/RecorderRegistry.scala @@ -1,6 +1,8 @@ package kamon package metric +import java.util.concurrent.atomic.AtomicReference + import com.typesafe.config.Config import kamon.metric.instrument.InstrumentFactory @@ -15,12 +17,14 @@ trait RecorderRegistry { def removeRecorder(name: String, category: String, tags: Map[String, String]): Boolean } -class RecorderRegistryImpl(config: Config) extends RecorderRegistry { - private val instrumentFactory = InstrumentFactory(config.getConfig("kamon.metric.instrument-factory")) +class RecorderRegistryImpl(initialConfig: Config) extends RecorderRegistry { + private val instrumentFactory = new AtomicReference[InstrumentFactory]() private val entities = TrieMap.empty[Entity, EntityRecorder with EntitySnapshotProducer] + reconfigure(initialConfig) + override def getRecorder(entity: Entity): EntityRecorder = { - entities.atomicGetOrElseUpdate(entity, new DefaultEntityRecorder(entity, instrumentFactory)) + entities.atomicGetOrElseUpdate(entity, new DefaultEntityRecorder(entity, instrumentFactory.get())) } override def getRecorder(name: String, category: String, tags: Map[String, String]): EntityRecorder = ??? @@ -29,6 +33,10 @@ class RecorderRegistryImpl(config: Config) extends RecorderRegistry { override def removeRecorder(name: String, category: String, tags: Map[String, String]): Boolean = ??? + private[kamon] def reconfigure(config: Config): Unit = { + instrumentFactory.set(InstrumentFactory(config.getConfig("kamon.metric.instrument-factory"))) + } + private[kamon] def snapshot(): Seq[EntitySnapshot] = { entities.values.map(_.snapshot()).toSeq } |