aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2014-04-06 02:28:45 -0300
committerIvan Topolnjak <ivantopo@gmail.com>2014-04-06 02:28:45 -0300
commited4676be2ae7d1c7cce30931d2bbd8289406acef (patch)
treebfd89c6fc6533b19abc31c03e1cf1c5aab193c4d
parentc60189cb528b98b1ea6dc2ed32ed28eacb9e00c6 (diff)
downloadKamon-ed4676be2ae7d1c7cce30931d2bbd8289406acef.tar.gz
Kamon-ed4676be2ae7d1c7cce30931d2bbd8289406acef.tar.bz2
Kamon-ed4676be2ae7d1c7cce30931d2bbd8289406acef.zip
! core: add the notion of instrument types to metric snapshots
-rw-r--r--kamon-core/src/main/scala/kamon/metrics/Metrics.scala14
-rw-r--r--kamon-core/src/main/scala/kamon/metrics/instruments/HdrRecorder.scala4
-rw-r--r--kamon-core/src/test/scala/kamon/metrics/MetricSnapshotSpec.scala6
-rw-r--r--kamon-core/src/test/scala/kamon/metrics/TickMetricSnapshotBufferSpec.scala4
-rw-r--r--kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala2
5 files changed, 20 insertions, 10 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))))))))
}
diff --git a/kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala b/kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala
index 0bbc3dcc..90f1e8a5 100644
--- a/kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala
+++ b/kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala
@@ -28,7 +28,7 @@ trait WebTransactionMetrics {
val apdexBuilder = new ApdexBuilder("Apdex", None, Kamon(NewRelic)(context.system).apdexT)
// Trace metrics are recorded in nanoseconds.
- var accumulatedHttpDispatcher: MetricSnapshotLike = MetricSnapshot(0, Scale.Nano, Vector.empty)
+ var accumulatedHttpDispatcher: MetricSnapshotLike = MetricSnapshot(InstrumentTypes.Histogram, 0, Scale.Nano, Vector.empty)
val webTransactionMetrics = metrics.collect {
case (TraceMetrics(name), groupSnapshot) ⇒