aboutsummaryrefslogtreecommitdiff
path: root/kamon-newrelic/src/main/scala/kamon/newrelic/Metric.scala
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2015-01-12 01:45:27 +0100
committerIvan Topolnjak <ivantopo@gmail.com>2015-01-24 23:19:01 +0100
commit01a34f67ff75419c440f2e69c0a0db888a670a34 (patch)
tree9c4dee4e9c13c26937356950f9e4927c3f9dfb7d /kamon-newrelic/src/main/scala/kamon/newrelic/Metric.scala
parent4a47e92d23af371f1d50b40af6cbe00a5ffc0105 (diff)
downloadKamon-01a34f67ff75419c440f2e69c0a0db888a670a34.tar.gz
Kamon-01a34f67ff75419c440f2e69c0a0db888a670a34.tar.bz2
Kamon-01a34f67ff75419c440f2e69c0a0db888a670a34.zip
! all: improve the metric recorders infrastructure
Diffstat (limited to 'kamon-newrelic/src/main/scala/kamon/newrelic/Metric.scala')
-rw-r--r--kamon-newrelic/src/main/scala/kamon/newrelic/Metric.scala25
1 files changed, 16 insertions, 9 deletions
diff --git a/kamon-newrelic/src/main/scala/kamon/newrelic/Metric.scala b/kamon-newrelic/src/main/scala/kamon/newrelic/Metric.scala
index 52d21f31..20204b79 100644
--- a/kamon-newrelic/src/main/scala/kamon/newrelic/Metric.scala
+++ b/kamon-newrelic/src/main/scala/kamon/newrelic/Metric.scala
@@ -1,8 +1,8 @@
package kamon.newrelic
-import kamon.Timestamp
-import kamon.metric.instrument.{ Counter, Histogram }
-import kamon.metric.{ MetricSnapshot, Scale }
+import kamon.metric.instrument._
+import kamon.metric.MetricKey
+import kamon.util.{ MapMerge, Timestamp }
case class MetricID(name: String, scope: Option[String])
case class MetricData(callCount: Long, total: Double, totalExclusive: Double, min: Double, max: Double, sumOfSquares: Double) {
@@ -18,16 +18,23 @@ case class MetricData(callCount: Long, total: Double, totalExclusive: Double, mi
object Metric {
- def fromKamonMetricSnapshot(snapshot: MetricSnapshot, name: String, scope: Option[String], targetScale: Scale): Metric = {
+ def scaleFunction(uom: UnitOfMeasurement): Long ⇒ Double = uom match {
+ case time: Time ⇒ time.scale(Time.Seconds)
+ case other ⇒ _.toDouble
+ }
+
+ def apply(snapshot: InstrumentSnapshot, snapshotUnit: UnitOfMeasurement, name: String, scope: Option[String]): Metric = {
snapshot match {
case hs: Histogram.Snapshot ⇒
var total: Double = 0D
var sumOfSquares: Double = 0D
- val scaledMin = Scale.convert(hs.scale, targetScale, hs.min)
- val scaledMax = Scale.convert(hs.scale, targetScale, hs.max)
+ val scaler = scaleFunction(snapshotUnit)
+
+ val scaledMin = scaler(hs.min)
+ val scaledMax = scaler(hs.max)
hs.recordsIterator.foreach { record ⇒
- val scaledValue = Scale.convert(hs.scale, targetScale, record.level)
+ val scaledValue = scaler(record.level)
total += scaledValue * record.count
sumOfSquares += (scaledValue * scaledValue) * record.count
@@ -42,12 +49,12 @@ object Metric {
}
case class TimeSliceMetrics(from: Timestamp, to: Timestamp, metrics: Map[MetricID, MetricData]) {
- import kamon.metric.combineMaps
+ import MapMerge.Syntax
def merge(that: TimeSliceMetrics): TimeSliceMetrics = {
val mergedFrom = Timestamp.earlier(from, that.from)
val mergedTo = Timestamp.later(to, that.to)
- val mergedMetrics = combineMaps(metrics, that.metrics)((l, r) ⇒ l.merge(r))
+ val mergedMetrics = metrics.merge(that.metrics, (l, r) ⇒ l.merge(r))
TimeSliceMetrics(mergedFrom, mergedTo, mergedMetrics)
}