aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/metric/EntityRecorder.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-core/src/main/scala/kamon/metric/EntityRecorder.scala')
-rw-r--r--kamon-core/src/main/scala/kamon/metric/EntityRecorder.scala90
1 files changed, 0 insertions, 90 deletions
diff --git a/kamon-core/src/main/scala/kamon/metric/EntityRecorder.scala b/kamon-core/src/main/scala/kamon/metric/EntityRecorder.scala
deleted file mode 100644
index ccdb463e..00000000
--- a/kamon-core/src/main/scala/kamon/metric/EntityRecorder.scala
+++ /dev/null
@@ -1,90 +0,0 @@
-package kamon.metric
-
-import java.time.Duration
-import java.util.concurrent.{ScheduledExecutorService, ScheduledFuture, TimeUnit}
-
-import kamon.metric.instrument._
-import kamon.util.MeasurementUnit
-
-import scala.collection.concurrent.TrieMap
-import scala.util.Try
-
-trait EntityRecorder {
- def histogram(name: String): Histogram
- def histogram(name: String, measurementUnit: MeasurementUnit, dynamicRange: DynamicRange): Histogram
-
- def minMaxCounter(name: String): MinMaxCounter
- def minMaxCounter(name: String, measurementUnit: MeasurementUnit, dynamicRange: DynamicRange, sampleFrequency: Duration): MinMaxCounter
-
- def gauge(name: String): Gauge
- def gauge(name: String, measurementUnit: MeasurementUnit): Gauge
-
- def counter(name: String): Counter
- def counter(name: String, measurementUnit: MeasurementUnit): Counter
-}
-
-trait EntitySnapshotProducer {
- def snapshot(): EntitySnapshot
-}
-
-class DefaultEntityRecorder(entity: Entity, instrumentFactory: InstrumentFactory, scheduler: ScheduledExecutorService)
- extends EntityRecorder with EntitySnapshotProducer {
-
- private val histograms = TrieMap.empty[String, Histogram with DistributionSnapshotInstrument]
- private val minMaxCounters = TrieMap.empty[String, MinMaxCounterEntry]
- private val counters = TrieMap.empty[String, Counter with SingleValueSnapshotInstrument]
- private val gauges = TrieMap.empty[String, Gauge with SingleValueSnapshotInstrument]
-
- def histogram(name: String): Histogram =
- histograms.atomicGetOrElseUpdate(name, instrumentFactory.buildHistogram(entity, name))
-
- def histogram(name: String, measurementUnit: MeasurementUnit, dynamicRange: DynamicRange): Histogram =
- histograms.atomicGetOrElseUpdate(name, instrumentFactory.buildHistogram(entity, name, dynamicRange, measurementUnit))
-
- def minMaxCounter(name: String): MinMaxCounter =
- minMaxCounters.atomicGetOrElseUpdate(name,
- createMMCounterEntry(instrumentFactory.buildMinMaxCounter(entity, name))
- ).mmCounter
-
- def minMaxCounter(name: String, measurementUnit: MeasurementUnit, dynamicRange: DynamicRange, sampleFrequency: Duration): MinMaxCounter =
- minMaxCounters.atomicGetOrElseUpdate(name,
- createMMCounterEntry(instrumentFactory.buildMinMaxCounter(entity, name, dynamicRange, sampleFrequency, measurementUnit))
- ).mmCounter
-
- def gauge(name: String): Gauge =
- gauges.atomicGetOrElseUpdate(name, instrumentFactory.buildGauge(entity, name))
-
- def gauge(name: String, measurementUnit: MeasurementUnit): Gauge =
- gauges.atomicGetOrElseUpdate(name, instrumentFactory.buildGauge(entity, name, measurementUnit))
-
- def counter(name: String): Counter =
- counters.atomicGetOrElseUpdate(name, instrumentFactory.buildCounter(entity, name))
-
- def counter(name: String, measurementUnit: MeasurementUnit): Counter =
- counters.atomicGetOrElseUpdate(name, instrumentFactory.buildCounter(entity, name, measurementUnit))
-
- def snapshot(): EntitySnapshot =
- new EntitySnapshot(
- entity,
- histograms = histograms.values.map(_.snapshot()).toSeq,
- minMaxCounters = minMaxCounters.values.map(_.mmCounter.snapshot()).toSeq,
- gauges = gauges.values.map(_.snapshot()).toSeq,
- counters = counters.values.map(_.snapshot()).toSeq
- )
-
- def cleanup(): Unit = {
- minMaxCounters.values.foreach { mmCounter =>
- Try(mmCounter.refreshFuture.cancel(true))
- }
- }
-
- private case class MinMaxCounterEntry(mmCounter: MinMaxCounter with DistributionSnapshotInstrument, refreshFuture: ScheduledFuture[_])
-
- private def createMMCounterEntry(mmCounter: MinMaxCounter with DistributionSnapshotInstrument): MinMaxCounterEntry = {
- val refreshFuture = scheduler.schedule(new Runnable {
- override def run(): Unit = mmCounter.sample()
- }, mmCounter.sampleInterval.toMillis, TimeUnit.MILLISECONDS)
-
- MinMaxCounterEntry(mmCounter, refreshFuture)
- }
-} \ No newline at end of file