aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Parra <dparra@despegar.com>2013-05-15 17:31:03 -0300
committerIvan Topolnak <ivantopo@gmail.com>2013-05-16 16:42:17 -0300
commit6cada822134a7460d7a18338cab1db3ee788ab66 (patch)
tree76b5f426351da86020ce01aa6416917299e4f218
parent2845f65ba86dadea614083174e9307dc577f4583 (diff)
downloadKamon-6cada822134a7460d7a18338cab1db3ee788ab66.tar.gz
Kamon-6cada822134a7460d7a18338cab1db3ee788ab66.tar.bz2
Kamon-6cada822134a7460d7a18338cab1db3ee788ab66.zip
refactor MetricsSenders
-rw-r--r--src/main/scala/akka/MailboxMetrics.scala21
-rw-r--r--src/main/scala/akka/PoolMetrics.scala7
-rw-r--r--src/main/scala/akka/Tracer.scala31
3 files changed, 17 insertions, 42 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 c58983e0..3b301247 100644
--- a/src/main/scala/akka/Tracer.scala
+++ b/src/main/scala/akka/Tracer.scala
@@ -1,45 +1,24 @@
package akka
-import actor.{Props, ActorSystemImpl}
+import actor.ActorSystemImpl
import scala.concurrent.forkjoin.ForkJoinPool
import scala.concurrent.duration._
-import com.newrelic.api.agent.NewRelic
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