aboutsummaryrefslogtreecommitdiff
path: root/kamon-newrelic/src
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2014-07-29 02:17:21 -0300
committerIvan Topolnjak <ivantopo@gmail.com>2014-07-29 02:17:21 -0300
commit409843750c596d31ce48b606677b1d5224be3880 (patch)
treeb0d9eaec5f62acc223910ad5deafbac23125700a /kamon-newrelic/src
parent4d336a1d2bd42a84a21e8770d8e0c401f8871aa7 (diff)
parente83babb5f88e91661bec2f1013fcb6b03612bea9 (diff)
downloadKamon-409843750c596d31ce48b606677b1d5224be3880.tar.gz
Kamon-409843750c596d31ce48b606677b1d5224be3880.tar.bz2
Kamon-409843750c596d31ce48b606677b1d5224be3880.zip
Merge branch 'master' into release-0.2
Conflicts: kamon-core/src/main/scala/kamon/metrics/Subscriptions.scala kamon-core/src/test/scala/kamon/instrumentation/akka/ActorCellInstrumentationSpec.scala kamon-datadog/src/main/scala/kamon/datadog/Datadog.scala kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala kamon-play/src/test/scala/kamon/play/RequestInstrumentationSpec.scala kamon-play/src/test/scala/kamon/play/WSInstrumentationSpec.scala kamon-playground/src/main/scala/test/SimpleRequestProcessor.scala kamon-statsd/src/main/scala/kamon/statsd/StatsD.scala project/Projects.scala version.sbt
Diffstat (limited to 'kamon-newrelic/src')
-rw-r--r--kamon-newrelic/src/main/resources/reference.conf2
-rw-r--r--kamon-newrelic/src/main/scala/kamon/newrelic/CustomMetrics.scala6
-rw-r--r--kamon-newrelic/src/main/scala/kamon/newrelic/MetricTranslator.scala2
-rw-r--r--kamon-newrelic/src/main/scala/kamon/newrelic/NewRelic.scala10
-rw-r--r--kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala20
-rw-r--r--kamon-newrelic/src/main/scala/kamon/newrelic/package.scala32
6 files changed, 40 insertions, 32 deletions
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/CustomMetrics.scala b/kamon-newrelic/src/main/scala/kamon/newrelic/CustomMetrics.scala
index 08e0add3..44d9c605 100644
--- a/kamon-newrelic/src/main/scala/kamon/newrelic/CustomMetrics.scala
+++ b/kamon-newrelic/src/main/scala/kamon/newrelic/CustomMetrics.scala
@@ -17,16 +17,16 @@
package kamon.newrelic
import akka.actor.Actor
-import kamon.metrics._
+import kamon.metric._
trait CustomMetrics {
self: Actor ⇒
def collectCustomMetrics(metrics: Map[MetricGroupIdentity, MetricGroupSnapshot]): Seq[NewRelic.Metric] = {
metrics.collect {
- case (CustomMetric(name), groupSnapshot) ⇒
+ case (UserMetrics, groupSnapshot) ⇒
groupSnapshot.metrics collect {
- case (_, snapshot) ⇒ toNewRelicMetric(Scale.Unit)(s"Custom/$name", None, snapshot)
+ case (name, snapshot) ⇒ toNewRelicMetric(Scale.Unit)(s"Custom/$name", None, snapshot)
}
}.flatten.toSeq
}
diff --git a/kamon-newrelic/src/main/scala/kamon/newrelic/MetricTranslator.scala b/kamon-newrelic/src/main/scala/kamon/newrelic/MetricTranslator.scala
index 46e22571..a3bb6311 100644
--- a/kamon-newrelic/src/main/scala/kamon/newrelic/MetricTranslator.scala
+++ b/kamon-newrelic/src/main/scala/kamon/newrelic/MetricTranslator.scala
@@ -17,7 +17,7 @@
package kamon.newrelic
import akka.actor.{ Props, ActorRef, Actor }
-import kamon.metrics.Subscriptions.TickMetricSnapshot
+import kamon.metric.Subscriptions.TickMetricSnapshot
import kamon.newrelic.MetricTranslator.TimeSliceMetrics
class MetricTranslator(receiver: ActorRef) extends Actor
diff --git a/kamon-newrelic/src/main/scala/kamon/newrelic/NewRelic.scala b/kamon-newrelic/src/main/scala/kamon/newrelic/NewRelic.scala
index 63aa147b..01b32595 100644
--- a/kamon-newrelic/src/main/scala/kamon/newrelic/NewRelic.scala
+++ b/kamon-newrelic/src/main/scala/kamon/newrelic/NewRelic.scala
@@ -18,18 +18,19 @@ package kamon.newrelic
import akka.actor._
import scala.concurrent.duration._
import kamon.Kamon
-import kamon.metrics.{ CustomMetric, TickMetricSnapshotBuffer, TraceMetrics, Metrics }
-import kamon.metrics.Subscriptions.TickMetricSnapshot
+import kamon.metric.{ UserMetrics, TickMetricSnapshotBuffer, TraceMetrics, Metrics }
+import kamon.metric.Subscriptions.TickMetricSnapshot
import akka.actor
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.getMilliseconds("apdexT") / 1E3 // scale to seconds.
Kamon(Metrics)(system).subscribe(TraceMetrics, "*", metricsListener, permanently = true)
- Kamon(Metrics)(system).subscribe(CustomMetric, "*", metricsListener, permanently = true)
+ Kamon(Metrics)(system).subscribe(UserMetrics.category, "*", metricsListener, permanently = true)
}
class NewRelicMetricsListener extends Actor with ActorLogging {
@@ -49,7 +50,7 @@ object NewRelic extends ExtensionId[NewRelicExtension] with ExtensionIdProvider
def createExtension(system: ExtendedActorSystem): NewRelicExtension = new NewRelicExtension(system)
case class Metric(name: String, scope: Option[String], callCount: Long, total: Double, totalExclusive: Double,
- min: Double, max: Double, sumOfSquares: Double) {
+ min: Double, max: Double, sumOfSquares: Double) {
def merge(that: Metric): Metric = {
Metric(name, scope,
@@ -60,6 +61,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 90f1e8a5..a8c54684 100644
--- a/kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala
+++ b/kamon-newrelic/src/main/scala/kamon/newrelic/WebTransactionMetrics.scala
@@ -16,28 +16,32 @@
package kamon.newrelic
-import kamon.metrics._
-import kamon.metrics.TraceMetrics.ElapsedTime
+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)
}
diff --git a/kamon-newrelic/src/main/scala/kamon/newrelic/package.scala b/kamon-newrelic/src/main/scala/kamon/newrelic/package.scala
index f6e377c7..89a8b15b 100644
--- a/kamon-newrelic/src/main/scala/kamon/newrelic/package.scala
+++ b/kamon-newrelic/src/main/scala/kamon/newrelic/package.scala
@@ -16,26 +16,30 @@
package kamon
-import kamon.metrics.{ Scale, MetricSnapshotLike }
+import kamon.metric.instrument.{ Counter, Histogram }
+import kamon.metric.{ MetricSnapshot, Scale }
package object newrelic {
- def toNewRelicMetric(scale: Scale)(name: String, scope: Option[String], snapshot: MetricSnapshotLike): NewRelic.Metric = {
- var total: Double = 0D
- var sumOfSquares: Double = 0D
+ def toNewRelicMetric(scale: Scale)(name: String, scope: Option[String], snapshot: MetricSnapshot): NewRelic.Metric = {
+ snapshot match {
+ case hs: Histogram.Snapshot ⇒
+ var total: Double = 0D
+ var sumOfSquares: Double = 0D
+ val scaledMin = Scale.convert(hs.scale, scale, hs.min)
+ val scaledMax = Scale.convert(hs.scale, scale, hs.max)
- val measurementLevels = snapshot.measurements.iterator
- while (measurementLevels.hasNext) {
- val level = measurementLevels.next()
- val scaledValue = Scale.convert(snapshot.scale, scale, level.value)
+ hs.recordsIterator.foreach { record ⇒
+ val scaledValue = Scale.convert(hs.scale, scale, record.level)
- total += scaledValue * level.count
- sumOfSquares += (scaledValue * scaledValue) * level.count
- }
+ total += scaledValue * record.count
+ sumOfSquares += (scaledValue * scaledValue) * record.count
+ }
- val scaledMin = Scale.convert(snapshot.scale, scale, snapshot.min)
- val scaledMax = Scale.convert(snapshot.scale, scale, snapshot.max)
+ NewRelic.Metric(name, scope, hs.numberOfMeasurements, total, total, scaledMin, scaledMax, sumOfSquares)
- NewRelic.Metric(name, scope, snapshot.numberOfMeasurements, total, total, scaledMin, scaledMax, sumOfSquares)
+ case cs: Counter.Snapshot ⇒
+ NewRelic.Metric(name, scope, cs.count, cs.count, cs.count, 0, cs.count, cs.count * cs.count)
+ }
}
}