diff options
Diffstat (limited to 'src/main/scala/akka')
-rw-r--r-- | src/main/scala/akka/ActorAspect.scala | 24 | ||||
-rw-r--r-- | src/main/scala/akka/ActorSystemAspect.scala | 28 | ||||
-rw-r--r-- | src/main/scala/akka/MailboxAspect.scala | 26 | ||||
-rw-r--r-- | src/main/scala/akka/PoolMonitorAspect.scala | 29 | ||||
-rw-r--r-- | src/main/scala/akka/actor/ActorAspect.scala | 25 |
5 files changed, 107 insertions, 25 deletions
diff --git a/src/main/scala/akka/ActorAspect.scala b/src/main/scala/akka/ActorAspect.scala new file mode 100644 index 00000000..2550752b --- /dev/null +++ b/src/main/scala/akka/ActorAspect.scala @@ -0,0 +1,24 @@ +package akka + +import org.aspectj.lang.annotation.{Around, Pointcut, Aspect} +import org.aspectj.lang.ProceedingJoinPoint +import kamon.metric.Metrics +import akka.actor.ActorCell + +@Aspect +class ActorAspect extends Metrics { + + @Pointcut("execution(* akka.actor.ActorCell+.receiveMessage(..))") + protected def actorReceive:Unit = {} + + @Around("actorReceive() && this(actor)") + def around(pjp: ProceedingJoinPoint, actor: akka.actor.ActorCell): AnyRef = { + + val actorName:String = actor.self.path.toString + + markAndCountMeter(actorName){ + pjp.proceed + } + + } +}
\ No newline at end of file diff --git a/src/main/scala/akka/ActorSystemAspect.scala b/src/main/scala/akka/ActorSystemAspect.scala new file mode 100644 index 00000000..11524a2f --- /dev/null +++ b/src/main/scala/akka/ActorSystemAspect.scala @@ -0,0 +1,28 @@ +package akka + +import org.aspectj.lang.annotation.{Pointcut, Before, Aspect} +import akka.actor.ActorSystemImpl +import com.typesafe.config.Config +import java.util.concurrent.{TimeUnit, Executors} + +@Aspect +class ActorSystemAspect { + + @Pointcut("execution(akka.actor.ActorSystemImpl.new(..))") + protected def actorSystem:Unit = {} + + @Before("actorSystem() && this(system) && args(name, config, classLoader)") + def beforeInitialize(system: ActorSystemImpl, name: String, config: Config, classLoader: ClassLoader) { + + val scheduler = Executors.newScheduledThreadPool(1); + + scheduler.scheduleAtFixedRate(new Runnable { + def run() { + println("ActorSystemImpl" + system.name) + println("Thread Factory" + system.threadFactory.name) + println("Dispatchers" + system.dispatchers.defaultDispatcherConfig.resolve) + println("Dispatcher" + system.dispatcher.throughput) + } + }, 4, 4, TimeUnit.SECONDS) + } +} diff --git a/src/main/scala/akka/MailboxAspect.scala b/src/main/scala/akka/MailboxAspect.scala new file mode 100644 index 00000000..3dfc9c6a --- /dev/null +++ b/src/main/scala/akka/MailboxAspect.scala @@ -0,0 +1,26 @@ +package akka + +import org.aspectj.lang.annotation.{Pointcut, Before, Aspect} +import java.util.concurrent.{TimeUnit, Executors} + +@Aspect +class MailboxAspect { + + @Pointcut("execution(akka.dispatch.Mailbox.new(..))") + protected def mailboxMonitor:Unit = {} + + @Before("mailboxMonitor() && this(mb)") + def before(mb: akka.dispatch.Mailbox) : Unit = { + val scheduler = Executors.newScheduledThreadPool(1); + + scheduler.scheduleAtFixedRate(new Runnable { + def run() { + println("Mailbox: " + mb.actor.self.path) + println("NOM: " + mb.numberOfMessages) + println("Messages: " + mb.hasMessages) + print("Dispatcher throughput: " + mb.dispatcher.throughput) + println(mb.dispatcher.id) + } + }, 6, 4, TimeUnit.SECONDS) + } +} diff --git a/src/main/scala/akka/PoolMonitorAspect.scala b/src/main/scala/akka/PoolMonitorAspect.scala new file mode 100644 index 00000000..c6c4e4a5 --- /dev/null +++ b/src/main/scala/akka/PoolMonitorAspect.scala @@ -0,0 +1,29 @@ +package akka + +import org.aspectj.lang.annotation.{Pointcut, Before, Aspect} +import java.util.concurrent.{TimeUnit, Executors} + +@Aspect +class PoolMonitorAspect { + + @Pointcut("execution(scala.concurrent.forkjoin.ForkJoinPool.new(..))") + protected def poolMonitor:Unit = {} + + @Before("poolMonitor() && this(pool)") + def beforePoolInstantiation(pool: scala.concurrent.forkjoin.ForkJoinPool) { + + val scheduler = Executors.newScheduledThreadPool(1); + + scheduler.scheduleAtFixedRate(new Runnable { + def run() { + println("PoolName : " + pool.getClass.getSimpleName) + println("ThreadCount :" + pool.getActiveThreadCount) + println("Parallelism :" + pool.getParallelism) + println("PoolSize :" + pool.getPoolSize()) + println("Submission :" + pool.getQueuedSubmissionCount()) + println("Steals :" + pool.getStealCount()) + println("All :" + pool.toString) + } + }, 4, 4, TimeUnit.SECONDS) + } +} diff --git a/src/main/scala/akka/actor/ActorAspect.scala b/src/main/scala/akka/actor/ActorAspect.scala deleted file mode 100644 index b028d8c6..00000000 --- a/src/main/scala/akka/actor/ActorAspect.scala +++ /dev/null @@ -1,25 +0,0 @@ -package akka.actor - -import org.aspectj.lang.annotation.{Around, Pointcut, Before, Aspect} -import org.aspectj.lang.ProceedingJoinPoint -import kamon.metric.Metrics - -@Aspect -class ActorAspect extends Metrics { - - - @Pointcut("execution(* ActorCell+.receiveMessage(..))") - private def actorReceive:Unit = {} - - @Around("actorReceive() && target(actor)") - def around(pjp: ProceedingJoinPoint, actor: ActorCell): AnyRef = { - - - val actorName:String = actor.self.path.toString - - markAndCountMeter(actorName){ - pjp.proceed - } - - } -}
\ No newline at end of file |