aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2014-07-27 20:33:38 -0300
committerIvan Topolnjak <ivantopo@gmail.com>2014-07-27 20:33:38 -0300
commit33390af40b39ca22b83e3bced83c9496f6c556ab (patch)
treedc5ed825c7c51acbd70ff2f2a4e1d13f8796a830
parentdfef9dce52782fb4939556adb926d7ff531d72b3 (diff)
downloadKamon-33390af40b39ca22b83e3bced83c9496f6c556ab.tar.gz
Kamon-33390af40b39ca22b83e3bced83c9496f6c556ab.tar.bz2
Kamon-33390af40b39ca22b83e3bced83c9496f6c556ab.zip
= newrelic: upgrade to the latest metrics scheme, closes #54
-rw-r--r--kamon-core/src/main/scala/kamon/metric/TraceMetrics.scala4
-rw-r--r--kamon-core/src/main/scala/kamon/metric/instrument/Histogram.scala11
-rw-r--r--kamon-newrelic/src/main/resources/reference.conf2
-rw-r--r--kamon-newrelic/src/main/scala/kamon/newrelic/NewRelic.scala4
-rw-r--r--kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala21
-rw-r--r--kamon-playground/src/main/resources/application.conf4
6 files changed, 29 insertions, 17 deletions
diff --git a/kamon-core/src/main/scala/kamon/metric/TraceMetrics.scala b/kamon-core/src/main/scala/kamon/metric/TraceMetrics.scala
index 187eb07d..c506fe81 100644
--- a/kamon-core/src/main/scala/kamon/metric/TraceMetrics.scala
+++ b/kamon-core/src/main/scala/kamon/metric/TraceMetrics.scala
@@ -69,8 +69,8 @@ object TraceMetrics extends MetricGroupCategory {
val segmentConfig = settings.getConfig("segment")
new TraceMetricRecorder(
- Histogram.fromConfig(elapsedTimeConfig),
- () ⇒ Histogram.fromConfig(segmentConfig))
+ Histogram.fromConfig(elapsedTimeConfig, Scale.Nano),
+ () ⇒ Histogram.fromConfig(segmentConfig, Scale.Nano))
}
}
diff --git a/kamon-core/src/main/scala/kamon/metric/instrument/Histogram.scala b/kamon-core/src/main/scala/kamon/metric/instrument/Histogram.scala
index 9ce11f49..7d8022f7 100644
--- a/kamon-core/src/main/scala/kamon/metric/instrument/Histogram.scala
+++ b/kamon-core/src/main/scala/kamon/metric/instrument/Histogram.scala
@@ -78,6 +78,17 @@ object Histogram {
def recordsIterator: Iterator[Record]
def merge(that: Histogram.Snapshot, context: CollectionContext): Histogram.Snapshot
}
+
+ object Snapshot {
+ def empty(targetScale: Scale) = new Snapshot {
+ override def min: Long = 0L
+ override def max: Long = 0L
+ override def recordsIterator: Iterator[Record] = Iterator.empty
+ override def merge(that: Snapshot, context: CollectionContext): Snapshot = that
+ override def scale: Scale = targetScale
+ override def numberOfMeasurements: Long = 0L
+ }
+ }
}
/**
diff --git a/kamon-newrelic/src/main/resources/reference.conf b/kamon-newrelic/src/main/resources/reference.conf
index 24522d63..13aaca2f 100644
--- a/kamon-newrelic/src/main/resources/reference.conf
+++ b/kamon-newrelic/src/main/resources/reference.conf
@@ -7,7 +7,7 @@ kamon {
apdexT = 1 second
app-name = "Kamon[Development]"
- license-key = 2e24765acb032cb9e7207013b5ba3e2ab7d2d75c
+ license-key = e7d350b14228f3d28f35bc3140df2c3e565ea5d5
}
}
diff --git a/kamon-newrelic/src/main/scala/kamon/newrelic/NewRelic.scala b/kamon-newrelic/src/main/scala/kamon/newrelic/NewRelic.scala
index 85861454..d83e0335 100644
--- a/kamon-newrelic/src/main/scala/kamon/newrelic/NewRelic.scala
+++ b/kamon-newrelic/src/main/scala/kamon/newrelic/NewRelic.scala
@@ -26,11 +26,12 @@ import java.util.concurrent.TimeUnit.MILLISECONDS
class NewRelicExtension(system: ExtendedActorSystem) extends Kamon.Extension {
val config = system.settings.config.getConfig("kamon.newrelic")
+ val collectionContext = Kamon(Metrics)(system).buildDefaultCollectionContext
val metricsListener = system.actorOf(Props[NewRelicMetricsListener], "kamon-newrelic")
val apdexT: Double = config.getDuration("apdexT", MILLISECONDS) / 1E3 // scale to seconds.
Kamon(Metrics)(system).subscribe(TraceMetrics, "*", metricsListener, permanently = true)
- //Kamon(Metrics)(system).subscribe(UserMetrics, "*", metricsListener, permanently = true)
+ Kamon(Metrics)(system).subscribe(UserMetrics.category, "*", metricsListener, permanently = true)
}
class NewRelicMetricsListener extends Actor with ActorLogging {
@@ -61,6 +62,5 @@ object NewRelic extends ExtensionId[NewRelicExtension] with ExtensionIdProvider
math.max(max, that.max),
sumOfSquares + that.sumOfSquares)
}
-
}
} \ No newline at end of file
diff --git a/kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala b/kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala
index 38517e10..a8c54684 100644
--- a/kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala
+++ b/kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala
@@ -20,25 +20,28 @@ import kamon.metric._
import kamon.metric.TraceMetrics.ElapsedTime
import akka.actor.Actor
import kamon.Kamon
+import kamon.metric.instrument.Histogram
trait WebTransactionMetrics {
self: Actor ⇒
def collectWebTransactionMetrics(metrics: Map[MetricGroupIdentity, MetricGroupSnapshot]): Seq[NewRelic.Metric] = {
- val apdexBuilder = new ApdexBuilder("Apdex", None, Kamon(NewRelic)(context.system).apdexT)
+ val newRelicExtension = Kamon(NewRelic)(context.system)
+ val apdexBuilder = new ApdexBuilder("Apdex", None, newRelicExtension.apdexT)
+ val collectionContext = newRelicExtension.collectionContext
- /*
// Trace metrics are recorded in nanoseconds.
- var accumulatedHttpDispatcher: MetricSnapshotLike = MetricSnapshot(InstrumentTypes.Histogram, 0, Scale.Nano, Vector.empty)
+ var accumulatedHttpDispatcher: Histogram.Snapshot = Histogram.Snapshot.empty(Scale.Nano)
val webTransactionMetrics = metrics.collect {
case (TraceMetrics(name), groupSnapshot) ⇒
groupSnapshot.metrics collect {
- case (ElapsedTime, snapshot) ⇒
- accumulatedHttpDispatcher = accumulatedHttpDispatcher.merge(snapshot)
- snapshot.measurements.foreach(level ⇒
- apdexBuilder.record(Scale.convert(snapshot.scale, Scale.Unit, level.value), level.count))
+ case (ElapsedTime, snapshot: Histogram.Snapshot) ⇒
+ accumulatedHttpDispatcher = accumulatedHttpDispatcher.merge(snapshot, collectionContext)
+ snapshot.recordsIterator.foreach { record ⇒
+ apdexBuilder.record(Scale.convert(snapshot.scale, Scale.Unit, record.level), record.count)
+ }
toNewRelicMetric(Scale.Unit)(s"WebTransaction/Custom/$name", None, snapshot)
}
@@ -47,9 +50,7 @@ trait WebTransactionMetrics {
val httpDispatcher = toNewRelicMetric(Scale.Unit)("HttpDispatcher", None, accumulatedHttpDispatcher)
val webTransaction = toNewRelicMetric(Scale.Unit)("WebTransaction", None, accumulatedHttpDispatcher)
- Seq(httpDispatcher, webTransaction, apdexBuilder.build) ++ webTransactionMetrics.flatten.toSeq */
-
- ???
+ Seq(httpDispatcher, webTransaction, apdexBuilder.build) ++ webTransactionMetrics.flatten.toSeq
}
}
diff --git a/kamon-playground/src/main/resources/application.conf b/kamon-playground/src/main/resources/application.conf
index d827731a..e9f73954 100644
--- a/kamon-playground/src/main/resources/application.conf
+++ b/kamon-playground/src/main/resources/application.conf
@@ -1,7 +1,7 @@
akka {
loglevel = INFO
- extensions = ["kamon.statsd.StatsD", "kamon.system.SystemMetrics"]
+ extensions = ["kamon.newrelic.NewRelic"]
actor {
debug {
@@ -19,7 +19,7 @@ spray.can {
kamon {
newrelic {
app-name = "SimpleRequestProcessor"
- license-key = 2e24765acb032cb9e7207013b5ba3e2ab7d2d75c
+ license-key = e7d350b14228f3d28f35bc3140df2c3e565ea5d5
}
}