diff options
Diffstat (limited to 'src/main/scala/kamon/metric/Metrics.scala')
-rw-r--r-- | src/main/scala/kamon/metric/Metrics.scala | 57 |
1 files changed, 28 insertions, 29 deletions
diff --git a/src/main/scala/kamon/metric/Metrics.scala b/src/main/scala/kamon/metric/Metrics.scala index 352c51a0..b0dc8ec5 100644 --- a/src/main/scala/kamon/metric/Metrics.scala +++ b/src/main/scala/kamon/metric/Metrics.scala @@ -1,19 +1,12 @@ package kamon.metric import java.util.concurrent.{ConcurrentHashMap, ConcurrentSkipListSet, TimeUnit} -import com.codahale.metrics._ import akka.actor.ActorRef -import java.util.concurrent.atomic.AtomicReference import com.codahale.metrics - -trait MetricDepot { - def include(name: String, metric: Metric): Unit - def exclude(name: String): Unit -} +import com.codahale.metrics.{MetricFilter, Metric, ConsoleReporter, MetricRegistry} - -object Metrics extends MetricDepot { +object Metrics { val registry: MetricRegistry = new MetricRegistry val consoleReporter = ConsoleReporter.forRegistry(registry).convertDurationsTo(TimeUnit.NANOSECONDS) @@ -64,48 +57,54 @@ object MetricDirectory { -case class ActorSystemMetrics(actorSystemName: String) { - val dispatchers = new ConcurrentHashMap[String, DispatcherMetrics] - def registerDispatcher(dispatcherName: String): Option[DispatcherMetricCollector] = { - ??? - } -} -case class DispatcherMetricCollector(activeThreadCount: ValueDistributionCollector, poolSize: ValueDistributionCollector, queueSize: ValueDistributionCollector) -trait ValueDistributionCollector { +case class DispatcherMetricCollector(activeThreadCount: Histogram, poolSize: Histogram, queueSize: Histogram) + + + + +trait Histogram { def update(value: Long): Unit - def snapshot: HistogramLike + def snapshot: HistogramSnapshot } -trait HistogramLike { - def median: Long - def max: Long - def min: Long +trait HistogramSnapshot { + def median: Double + def max: Double + def min: Double } -case class CodaHaleValueDistributionCollector extends ValueDistributionCollector { - private[this] val histogram = new Histogram(new metrics.ExponentiallyDecayingReservoir()) - def median: Long = ??? +case class ActorSystemMetrics(actorSystemName: String) { + val dispatchers = new ConcurrentHashMap[String, DispatcherMetricCollector] - def max: Long = ??? + private[this] def createDispatcherCollector: DispatcherMetricCollector = DispatcherMetricCollector(CodahaleHistogram(), CodahaleHistogram(), CodahaleHistogram()) - def min: Long = ??? + def registerDispatcher(dispatcherName: String): Option[DispatcherMetricCollector] = Some(createDispatcherCollector) + +} - def snapshot: HistogramLike = histogram.getSnapshot + +case class CodahaleHistogram() extends Histogram { + private[this] val histogram = new com.codahale.metrics.Histogram(new metrics.ExponentiallyDecayingReservoir()) def update(value: Long) = histogram.update(value) -} + def snapshot: HistogramSnapshot = { + val snapshot = histogram.getSnapshot + CodahaleHistogramSnapshot(snapshot.getMedian, snapshot.getMax, snapshot.getMin) + } +} +case class CodahaleHistogramSnapshot(median: Double, max: Double, min: Double) extends HistogramSnapshot |