From 8f4c649e6082671c416b250589540005d9fe1bf8 Mon Sep 17 00:00:00 2001 From: Diego Parra Date: Fri, 31 May 2013 19:50:16 -0300 Subject: WIP: Metrics 3 --- src/main/scala/kamon/metric/NewRelicReporter.scala | 12 +++++++--- .../instrumentation/ActorInstrumentationSpec.scala | 28 +++++++++++----------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/main/scala/kamon/metric/NewRelicReporter.scala b/src/main/scala/kamon/metric/NewRelicReporter.scala index 76c901f5..56dce913 100644 --- a/src/main/scala/kamon/metric/NewRelicReporter.scala +++ b/src/main/scala/kamon/metric/NewRelicReporter.scala @@ -9,14 +9,20 @@ import scala.collection.JavaConverters._ class NewRelicReporter(registry: MetricRegistry, name: String,filter: MetricFilter, rateUnit: TimeUnit, durationUnit: TimeUnit) extends ScheduledReporter(registry, name, filter, rateUnit, durationUnit) { - def processMeter(name: String, meter: Meter) { - println(s"Logging to NewRelic: ${meter.getCount()}") + private[NewRelicReporter] def processMeter(name: String, meter: Meter) { NewRelic.recordMetric("Custom/Actor/MessagesPerSecond", meter.getMeanRate().toFloat) } + private[NewRelicReporter] def processCounter(name:String, counter:Counter) { + println(s"Logging to NewRelic: ${counter.getCount}") + + } def report(gauges: util.SortedMap[String, Gauge[_]], counters: util.SortedMap[String, Counter], histograms: util.SortedMap[String, Histogram], meters: util.SortedMap[String, Meter], timers: util.SortedMap[String, Timer]) { //Process Meters - meters.asScala.map{case(k,v) => processMeter(k,v)} + meters.asScala.map{case(name, meter) => processMeter(name, meter)} + + //Process Meters + counters.asScala.map{case(name, counter) => processCounter(name, counter)} } } diff --git a/src/test/scala/akka/instrumentation/ActorInstrumentationSpec.scala b/src/test/scala/akka/instrumentation/ActorInstrumentationSpec.scala index 2921824e..4cc15a2f 100644 --- a/src/test/scala/akka/instrumentation/ActorInstrumentationSpec.scala +++ b/src/test/scala/akka/instrumentation/ActorInstrumentationSpec.scala @@ -3,31 +3,31 @@ package akka.instrumentation import org.scalatest.WordSpec import org.scalatest.matchers.{ShouldMatchers, MustMatchers} import akka.actor.{Actor, Props, ActorSystem} -import kamon.metric.Metrics -import com.codahale.metrics.Meter +import kamon.metric.Metrics._ import scala.collection.JavaConverters._ class ActorInstrumentationSpec extends WordSpec with MustMatchers with ShouldMatchers { - import Metrics.metricsRegistry._ val system = ActorSystem() - import system._ + val echoRef = actorOf(Props(new EchoActor), "Echo-Actor") + val meterForEchoActor = "meter-for-akka://default/user/Echo-Actor" + val totalMessages = 1000 + + "an instrumented Actor" should { + "send a message and record a metric on the Metrics Registry with the number of sent messages" in { - "a instrumented Actor" should { - "send a message and record a metric on the Metrics Registry and count messages" in { + (1 to totalMessages).foreach {x:Int => + echoRef ! s"Message ${x}" + } - echoRef ! "Message 1" - echoRef ! "Message 2" - echoRef ! "Message 3" - echoRef ! "Message 4" - echoRef ! "Message 5" - echoRef ! "Message 6" + //to ensure that all messages was received + Thread.sleep(1000) - val meter = getMeters.asScala.filterKeys(_.toLowerCase.contains("Echo-Actor".toLowerCase())).collectFirst{case pair:(String, Meter) => pair._2.getCount}.get + val messages = metricsRegistry.getMeters.asScala.get(meterForEchoActor).get.getCount - meter should equal(6) + messages should equal(totalMessages) } } -- cgit v1.2.3