aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDiego Parra <dparra@despegar.com>2013-05-10 17:45:02 -0300
committerDiego Parra <dparra@despegar.com>2013-05-10 17:45:02 -0300
commitb73b591aeedcf24706a2cbd048adf909399d1cca (patch)
tree809251b3dadeef41e46304b9b8a5c68907f92815 /src
parent588f9820601aa4f48962009ab346b8696e93c7f6 (diff)
downloadKamon-b73b591aeedcf24706a2cbd048adf909399d1cca.tar.gz
Kamon-b73b591aeedcf24706a2cbd048adf909399d1cca.tar.bz2
Kamon-b73b591aeedcf24706a2cbd048adf909399d1cca.zip
Mailboxs metrics
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/akka/MailboxAspect.scala2
-rw-r--r--src/main/scala/akka/Tracer.scala49
2 files changed, 27 insertions, 24 deletions
diff --git a/src/main/scala/akka/MailboxAspect.scala b/src/main/scala/akka/MailboxAspect.scala
index 781ba055..5ca6d6ab 100644
--- a/src/main/scala/akka/MailboxAspect.scala
+++ b/src/main/scala/akka/MailboxAspect.scala
@@ -11,6 +11,6 @@ class MailboxAspect {
@After("mailboxMonitor() && this(mb)")
def afterInitialization(mb: akka.dispatch.Mailbox) : Unit = {
- Tracer.collectMailBox(mb)
+ Tracer.collectMailbox(mb)
}
} \ No newline at end of file
diff --git a/src/main/scala/akka/Tracer.scala b/src/main/scala/akka/Tracer.scala
index 4b2542b7..60906dae 100644
--- a/src/main/scala/akka/Tracer.scala
+++ b/src/main/scala/akka/Tracer.scala
@@ -1,33 +1,34 @@
package akka
import actor.{Props, Actor, ActorSystemImpl}
-import concurrent.forkjoin.ForkJoinPool
+import scala.concurrent.forkjoin.ForkJoinPool
import scala.concurrent.duration._
import com.newrelic.api.agent.NewRelic
import akka.dispatch.Mailbox
+import scala._
object Tracer {
- var system: ActorSystemImpl = _
- var forkJoinPool:ForkJoinPool = _
- var mailbox:Mailbox = _
+ protected[this] var mailboxes:List[Mailbox] = List.empty
+ protected[this] var tracerActorSystem: ActorSystemImpl = _
+ protected[this] var forkJoinPool:ForkJoinPool = _
def collectPool(pool: ForkJoinPool) = forkJoinPool = pool
- def collectActorSystem(actorSystem: ActorSystemImpl) = system = actorSystem
-
- def collectMailBox(mb: akka.dispatch.Mailbox) = {
- mailbox = mb
- }
+ def collectActorSystem(actorSystem: ActorSystemImpl) = tracerActorSystem = actorSystem
+ def collectMailbox(mb: akka.dispatch.Mailbox) = mailboxes ::= mb
def start():Unit ={
- implicit val dispatcher = system.dispatcher
- val metricsActor = system.actorOf(Props[MetricsActor], "PoolActor")
+ implicit val dispatcher = tracerActorSystem.dispatcher
+ val metricsActor = tracerActorSystem.actorOf(Props[MetricsActor], "MetricsActor")
- system.scheduler.schedule(10 seconds, 6 second, metricsActor, PoolMetrics(forkJoinPool))
- system.scheduler.schedule(10 seconds, 6 second, metricsActor, MailboxMetrics(mailbox))
+ tracerActorSystem.scheduler.schedule(10 seconds, 6 second, metricsActor, PoolMetrics(forkJoinPool))
+ tracerActorSystem.scheduler.schedule(10 seconds, 6 second, metricsActor, MailboxMetrics(mailboxes))
}
}
case class PoolMetrics(poolName:String, data:Map[String,Int])
+case class MailboxMetrics(mailboxes:Map[String,Mailbox])
+
+
object PoolMetrics {
def apply(pool: ForkJoinPool) = new PoolMetrics(pool.getClass.getSimpleName, toMap(pool))
@@ -41,28 +42,30 @@ object PoolMetrics {
"RunningThreadCount" -> pool.getRunningThreadCount
)
}
-case class MailboxMetrics(mbName:String, mailBox:Mailbox)
+
object MailboxMetrics {
- def apply(mb: Mailbox) = new MailboxMetrics(mb.actor.self.path.toString,mb)
+ def apply(mailboxes: List[Mailbox]) = {
+ new MailboxMetrics(mailboxes.take(mailboxes.length - 1).map{m => (m.actor.self.path.toString -> m)}.toMap) //TODO:reseach why collect an ActorSystemImpl
+ }
}
class MetricsActor extends Actor {
def receive = {
+
case poolMetrics:PoolMetrics => {
println(poolMetrics)
poolMetrics.data.map{case(k,v) => NewRelic.recordMetric(s"${poolMetrics.poolName}:${k}",v)}
}
case mailboxMetrics:MailboxMetrics => {
- val actorName = mailboxMetrics.mbName
- val mb = mailboxMetrics.mailBox
- println(s"Sending metrics to Newrelic MailBoxMonitor -> ${actorName}")
-
+ mailboxMetrics.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: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)
+ NewRelic.addCustomParameter(s"${actorName}:Mailbox:Status", mb.hasMessages.toString)
+ NewRelic.addCustomParameter(s"${actorName}:Mailbox:HasMessages", mb.hasMessages.toString)
+ }
}
}
} \ No newline at end of file