diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2014-05-18 21:38:55 -0300 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2014-05-18 21:38:55 -0300 |
commit | ace4d9d09097aa9b7e032d5bfbe154dcf73f74ed (patch) | |
tree | 48c18351b3ecd2b28b1c54be0906d0568559a4f8 /kamon-core/src/main/scala/kamon | |
parent | b0f0b611a55d27e7e1149ff028c26c19cc0d9e1c (diff) | |
download | Kamon-ace4d9d09097aa9b7e032d5bfbe154dcf73f74ed.tar.gz Kamon-ace4d9d09097aa9b7e032d5bfbe154dcf73f74ed.tar.bz2 Kamon-ace4d9d09097aa9b7e032d5bfbe154dcf73f74ed.zip |
= core: move the scheduling of gauge recordings to MetricsExtension and load interval for recordings from config
Diffstat (limited to 'kamon-core/src/main/scala/kamon')
3 files changed, 23 insertions, 6 deletions
diff --git a/kamon-core/src/main/scala/kamon/metrics/ActorMetrics.scala b/kamon-core/src/main/scala/kamon/metrics/ActorMetrics.scala index c703d589..44dd84b0 100644 --- a/kamon-core/src/main/scala/kamon/metrics/ActorMetrics.scala +++ b/kamon-core/src/main/scala/kamon/metrics/ActorMetrics.scala @@ -54,7 +54,7 @@ object ActorMetrics extends MetricGroupCategory { type GroupRecorder = ActorMetricRecorder def create(config: Config): ActorMetricRecorder = { - val settings = config.getConfig("kamon.metrics.precision.actor") + val settings = config.getConfig("precision.actor") val processingTimeConfig = extractPrecisionConfig(settings.getConfig("processing-time")) val mailboxSizeConfig = extractPrecisionConfig(settings.getConfig("mailbox-size")) diff --git a/kamon-core/src/main/scala/kamon/metrics/MetricsExtension.scala b/kamon-core/src/main/scala/kamon/metrics/MetricsExtension.scala index 9a08da71..78a82d96 100644 --- a/kamon-core/src/main/scala/kamon/metrics/MetricsExtension.scala +++ b/kamon-core/src/main/scala/kamon/metrics/MetricsExtension.scala @@ -24,16 +24,25 @@ import kamon.Kamon import akka.actor import kamon.metrics.Metrics.MetricGroupFilter import kamon.metrics.Subscriptions.Subscribe +import java.util.concurrent.TimeUnit class MetricsExtension(system: ExtendedActorSystem) extends Kamon.Extension { - val config = system.settings.config + val metricsExtConfig = system.settings.config.getConfig("kamon.metrics") + + /** Configured Dispatchers */ + val metricSubscriptionsDispatcher = system.dispatchers.lookup(metricsExtConfig.getString("dispatchers.metric-subscriptions")) + val gaugeRecordingsDispatcher = system.dispatchers.lookup(metricsExtConfig.getString("dispatchers.gauge-recordings")) + + /** Configuration Settings */ + val gaugeRecordingInterval = metricsExtConfig.getDuration("gauge-recording-interval", TimeUnit.MILLISECONDS) + val storage = TrieMap[MetricGroupIdentity, MetricGroupRecorder]() - val filters = loadFilters(config) + val filters = loadFilters(metricsExtConfig) lazy val subscriptions = system.actorOf(Props[Subscriptions], "kamon-metrics-subscriptions") def register(identity: MetricGroupIdentity, factory: MetricGroupFactory): Option[factory.GroupRecorder] = { if (shouldTrack(identity)) - Some(storage.getOrElseUpdate(identity, factory.create(config)).asInstanceOf[factory.GroupRecorder]) + Some(storage.getOrElseUpdate(identity, factory.create(metricsExtConfig)).asInstanceOf[factory.GroupRecorder]) else None } @@ -50,6 +59,14 @@ class MetricsExtension(system: ExtendedActorSystem) extends Kamon.Extension { (for ((identity, recorder) ← storage) yield (identity, recorder.collect)).toMap } + def scheduleGaugeRecorder(body: ⇒ Unit): Cancellable = { + import scala.concurrent.duration._ + + system.scheduler.schedule(gaugeRecordingInterval milliseconds, gaugeRecordingInterval milliseconds) { + body + }(gaugeRecordingsDispatcher) + } + private def shouldTrack(identity: MetricGroupIdentity): Boolean = { filters.get(identity.category.name).map(filter ⇒ filter.accept(identity.name)).getOrElse(false) } @@ -57,7 +74,7 @@ class MetricsExtension(system: ExtendedActorSystem) extends Kamon.Extension { def loadFilters(config: Config): Map[String, MetricGroupFilter] = { import scala.collection.JavaConverters._ - val filters = config.getObjectList("kamon.metrics.filters").asScala + val filters = config.getObjectList("filters").asScala val allFilters = for ( diff --git a/kamon-core/src/main/scala/kamon/metrics/TraceMetrics.scala b/kamon-core/src/main/scala/kamon/metrics/TraceMetrics.scala index 7c197166..5454edf5 100644 --- a/kamon-core/src/main/scala/kamon/metrics/TraceMetrics.scala +++ b/kamon-core/src/main/scala/kamon/metrics/TraceMetrics.scala @@ -53,7 +53,7 @@ object TraceMetrics extends MetricGroupCategory { def create(config: Config): TraceMetricRecorder = { - val settings = config.getConfig("kamon.metrics.precision.trace") + val settings = config.getConfig("precision.trace") val elapsedTimeConfig = extractPrecisionConfig(settings.getConfig("elapsed-time")) val segmentConfig = extractPrecisionConfig(settings.getConfig("segment")) |