diff options
author | Diego Parra <dparra@despegar.com> | 2013-05-15 17:31:03 -0300 |
---|---|---|
committer | Diego Parra <dparra@despegar.com> | 2013-05-15 17:31:03 -0300 |
commit | 3ded99207852448a8cac4ad86bd28cb2729988bc (patch) | |
tree | 947256048dc9e8a6289fea57f5860c52ee32f956 /src | |
parent | ee1b12e22a502308a26208f87132f08d356d1e1e (diff) | |
download | Kamon-3ded99207852448a8cac4ad86bd28cb2729988bc.tar.gz Kamon-3ded99207852448a8cac4ad86bd28cb2729988bc.tar.bz2 Kamon-3ded99207852448a8cac4ad86bd28cb2729988bc.zip |
refactor MetricsSenders
Diffstat (limited to 'src')
-rw-r--r-- | src/main/scala/akka/MailboxMetrics.scala | 21 | ||||
-rw-r--r-- | src/main/scala/akka/PoolMetrics.scala | 7 | ||||
-rw-r--r-- | src/main/scala/akka/Tracer.scala | 29 |
3 files changed, 17 insertions, 40 deletions
diff --git a/src/main/scala/akka/MailboxMetrics.scala b/src/main/scala/akka/MailboxMetrics.scala index 27188a8c..6bf65cc7 100644 --- a/src/main/scala/akka/MailboxMetrics.scala +++ b/src/main/scala/akka/MailboxMetrics.scala @@ -1,7 +1,6 @@ package akka import akka.dispatch.Mailbox -import akka.actor.Actor import com.newrelic.api.agent.NewRelic case class MailboxMetrics(mailboxes:Map[String,Mailbox]) @@ -19,18 +18,18 @@ object MailboxMetrics { ) } -class MailboxSenderMetricsActor(mailboxes: List[Mailbox]) extends Actor { - def receive = { - case "SendMailboxMetrics" => { - val mbm = MailboxMetrics(mailboxes) - mbm.mailboxes.map { case(actorName, mb) => { - println(s"Sending metrics to Newrelic MailBoxMonitor -> ${actorName}") - NewRelic.recordMetric(s"${actorName}:Mailbox:NumberOfMessages", mb.numberOfMessages) - NewRelic.recordMetric(s"${actorName}:Mailbox:MailboxDispatcherThroughput", mb.dispatcher.throughput) - NewRelic.recordMetric(s"${actorName}:Mailbox:SuspendCount", mb.suspendCount) - } +class MailboxSenderMetrics(mailboxes:List[Mailbox]) extends Runnable { + def run() { + val mbm = MailboxMetrics(mailboxes) + mbm.mailboxes.map { case(actorName,mb) => { + println(s"Sending metrics to Newrelic MailBoxMonitor for Actor -> ${actorName}") + + MailboxMetrics.toMap(mb).map {case(property, value) => + NewRelic.recordMetric(s"${actorName}:Mailbox:${property}", value) } } } + } } + diff --git a/src/main/scala/akka/PoolMetrics.scala b/src/main/scala/akka/PoolMetrics.scala index 07fbfff7..422e34fd 100644 --- a/src/main/scala/akka/PoolMetrics.scala +++ b/src/main/scala/akka/PoolMetrics.scala @@ -1,7 +1,6 @@ package akka import scala.concurrent.forkjoin.ForkJoinPool -import akka.actor.Actor import com.newrelic.api.agent.NewRelic case class PoolMetrics(poolName:String, data:Map[String,Int]) @@ -20,13 +19,11 @@ object PoolMetrics { ) } -class PoolMetricsActorSender(forkJoinPool:ForkJoinPool) extends Actor { - def receive = { - case "SendPoolMetrics" => { +class PoolMetricsSender(forkJoinPool:ForkJoinPool) extends Runnable { + def run() { val pool = PoolMetrics(forkJoinPool) println(s"Sending Metrics to NewRelic -> ${pool}") pool.data.map{case(k,v) => NewRelic.recordMetric(s"${pool.poolName}:${k}",v)} - } } } diff --git a/src/main/scala/akka/Tracer.scala b/src/main/scala/akka/Tracer.scala index bb290960..3b301247 100644 --- a/src/main/scala/akka/Tracer.scala +++ b/src/main/scala/akka/Tracer.scala @@ -1,43 +1,24 @@ package akka -import actor.{Props, ActorSystemImpl} +import actor.ActorSystemImpl import scala.concurrent.forkjoin.ForkJoinPool import scala.concurrent.duration._ import akka.dispatch.Mailbox import scala._ -import com.newrelic.api.agent.NewRelic object Tracer { - protected[this] var mailboxes:List[Mailbox] = List.empty + protected[this] var mailboxes:List[Mailbox] = Nil protected[this] var tracerActorSystem: ActorSystemImpl = _ protected[this] var forkJoinPool:ForkJoinPool = _ def collectPool(pool: ForkJoinPool) = forkJoinPool = pool def collectActorSystem(actorSystem: ActorSystemImpl) = tracerActorSystem = actorSystem - def collectMailbox(mb: akka.dispatch.Mailbox) = mailboxes ::= mb + def collectMailbox(mb: akka.dispatch.Mailbox) = mailboxes ::= mb def start():Unit ={ implicit val dispatcher = tracerActorSystem.dispatcher - val poolMetricsActorSender = tracerActorSystem.actorOf(Props(new PoolMetricsActorSender(forkJoinPool)), "PoolMetricsActorSender") - //val mailboxMetricsActorSender = tracerActorSystem.actorOf(Props(new MailboxSenderMetricsActor(mailboxes)), "MailboxMetricsActorSender") - - tracerActorSystem.scheduler.schedule(10 seconds, 6 second, poolMetricsActorSender, "SendPoolMetrics") - - tracerActorSystem.scheduler.schedule(10 seconds, 6 second, new Runnable { - def run() { - val mbm = MailboxMetrics(mailboxes) - mbm.mailboxes.map { case(actorName,mb) => { - println(s"Sending metrics to Newrelic MailBoxMonitor -> ${actorName}") - NewRelic.recordMetric(s"${actorName}:Mailbox:NumberOfMessages",mb.numberOfMessages) - NewRelic.recordMetric(s"${actorName}:Mailbox:MailboxDispatcherThroughput",mb.dispatcher.throughput) - - NewRelic.addCustomParameter(s"${actorName}:Mailbox:Status", mb.hasMessages.toString) - NewRelic.addCustomParameter(s"${actorName}:Mailbox:HasMessages", mb.hasMessages.toString) - } - } - } - }) + tracerActorSystem.scheduler.schedule(6 seconds, 5 second, new MailboxSenderMetrics(mailboxes)) + tracerActorSystem.scheduler.schedule(7 seconds, 5 second, new PoolMetricsSender(forkJoinPool)) } - //tracerActorSystem.scheduler.schedule(10 seconds, 6 second, mailboxMetricsActorSender, "SendMailboxMetrics") }
\ No newline at end of file |