From 58b5438784219878880252e0b13be9a7ed7c74c0 Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Sun, 6 Apr 2014 02:28:45 -0300 Subject: ! core: add the notion of instrument types to metric snapshots --- kamon-core/src/main/scala/kamon/metrics/Metrics.scala | 14 ++++++++++++-- .../main/scala/kamon/metrics/instruments/HdrRecorder.scala | 4 ++-- .../src/test/scala/kamon/metrics/MetricSnapshotSpec.scala | 6 +++--- .../scala/kamon/metrics/TickMetricSnapshotBufferSpec.scala | 4 ++-- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/kamon-core/src/main/scala/kamon/metrics/Metrics.scala b/kamon-core/src/main/scala/kamon/metrics/Metrics.scala index b82f429f..f07bf38e 100644 --- a/kamon-core/src/main/scala/kamon/metrics/Metrics.scala +++ b/kamon-core/src/main/scala/kamon/metrics/Metrics.scala @@ -19,6 +19,7 @@ package kamon.metrics import annotation.tailrec import com.typesafe.config.Config import kamon.metrics.MetricSnapshot.Measurement +import kamon.metrics.InstrumentTypes.InstrumentType trait MetricGroupCategory { def name: String @@ -49,7 +50,15 @@ trait MetricRecorder { def collect(): MetricSnapshotLike } +object InstrumentTypes { + sealed trait InstrumentType + case object Histogram extends InstrumentType + case object Gauge extends InstrumentType + case object Counter extends InstrumentType +} + trait MetricSnapshotLike { + def instrumentType: InstrumentType def numberOfMeasurements: Long def scale: Scale def measurements: Vector[Measurement] @@ -92,11 +101,12 @@ trait MetricSnapshotLike { } val totalNrOfMeasurements = go(measurements, that.measurements, 0) - MetricSnapshot(totalNrOfMeasurements, scale, mergedMeasurements.result()) + MetricSnapshot(instrumentType, totalNrOfMeasurements, scale, mergedMeasurements.result()) } } -case class MetricSnapshot(numberOfMeasurements: Long, scale: Scale, measurements: Vector[MetricSnapshot.Measurement]) extends MetricSnapshotLike +case class MetricSnapshot(instrumentType: InstrumentType, numberOfMeasurements: Long, scale: Scale, + measurements: Vector[MetricSnapshot.Measurement]) extends MetricSnapshotLike object MetricSnapshot { case class Measurement(value: Long, count: Long) { diff --git a/kamon-core/src/main/scala/kamon/metrics/instruments/HdrRecorder.scala b/kamon-core/src/main/scala/kamon/metrics/instruments/HdrRecorder.scala index 28520030..ce4fd76d 100644 --- a/kamon-core/src/main/scala/kamon/metrics/instruments/HdrRecorder.scala +++ b/kamon-core/src/main/scala/kamon/metrics/instruments/HdrRecorder.scala @@ -18,7 +18,7 @@ package org.HdrHistogram import java.util.concurrent.atomic.AtomicLongFieldUpdater import scala.annotation.tailrec -import kamon.metrics.{ Scale, MetricSnapshot, MetricSnapshotLike, MetricRecorder } +import kamon.metrics._ /** * This implementation aims to be used for real time data collection where data snapshots are taken often over time. @@ -64,7 +64,7 @@ class HdrRecorder(highestTrackableValue: Long, significantValueDigits: Int, scal while (!tryUpdateTotalCount) {} - MetricSnapshot(nrOfRecordings, scale, entries.result()) + MetricSnapshot(InstrumentTypes.Histogram, nrOfRecordings, scale, entries.result()) } } diff --git a/kamon-core/src/test/scala/kamon/metrics/MetricSnapshotSpec.scala b/kamon-core/src/test/scala/kamon/metrics/MetricSnapshotSpec.scala index c273aff1..b4f33ec3 100644 --- a/kamon-core/src/test/scala/kamon/metrics/MetricSnapshotSpec.scala +++ b/kamon-core/src/test/scala/kamon/metrics/MetricSnapshotSpec.scala @@ -49,16 +49,16 @@ class MetricSnapshotSpec extends WordSpec with Matchers { } trait SnapshotFixtures { - val emptySnapshot = MetricSnapshot(0, Scale.Unit, Vector.empty) + val emptySnapshot = MetricSnapshot(InstrumentTypes.Histogram, 0, Scale.Unit, Vector.empty) - val snapshotA = MetricSnapshot(100, Scale.Unit, Vector( + val snapshotA = MetricSnapshot(InstrumentTypes.Histogram, 100, Scale.Unit, Vector( Measurement(1, 3), Measurement(2, 15), Measurement(5, 68), Measurement(7, 13), Measurement(17, 1))) - val snapshotB = MetricSnapshot(100, Scale.Unit, Vector( + val snapshotB = MetricSnapshot(InstrumentTypes.Histogram, 100, Scale.Unit, Vector( Measurement(2, 6), Measurement(4, 48), Measurement(5, 39), diff --git a/kamon-core/src/test/scala/kamon/metrics/TickMetricSnapshotBufferSpec.scala b/kamon-core/src/test/scala/kamon/metrics/TickMetricSnapshotBufferSpec.scala index 33200e2d..d0a0c707 100644 --- a/kamon-core/src/test/scala/kamon/metrics/TickMetricSnapshotBufferSpec.scala +++ b/kamon-core/src/test/scala/kamon/metrics/TickMetricSnapshotBufferSpec.scala @@ -70,10 +70,10 @@ class TickMetricSnapshotBufferSpec extends TestKit(ActorSystem("tick-metric-snap val thirdEmpty = TickMetricSnapshot(3000, 4000, Map.empty) val firstNonEmpty = TickMetricSnapshot(1000, 2000, - Map((CustomMetric("test-metric") -> SimpleGroupSnapshot(Map(CustomMetric.RecordedValues -> MetricSnapshot(20, Scale.Unit, Vector(Measurement(1, 10), Measurement(10, 10)))))))) + Map((CustomMetric("test-metric") -> SimpleGroupSnapshot(Map(CustomMetric.RecordedValues -> MetricSnapshot(InstrumentTypes.Histogram, 20, Scale.Unit, Vector(Measurement(1, 10), Measurement(10, 10)))))))) val secondNonEmpty = TickMetricSnapshot(1000, 2000, - Map((CustomMetric("test-metric") -> SimpleGroupSnapshot(Map(CustomMetric.RecordedValues -> MetricSnapshot(15, Scale.Unit, Vector(Measurement(4, 9), Measurement(10, 6)))))))) + Map((CustomMetric("test-metric") -> SimpleGroupSnapshot(Map(CustomMetric.RecordedValues -> MetricSnapshot(InstrumentTypes.Histogram, 15, Scale.Unit, Vector(Measurement(4, 9), Measurement(10, 6)))))))) } -- cgit v1.2.3