diff options
Diffstat (limited to 'src/main/scala/akka/PoolMonitorInstrumentation.scala')
-rw-r--r-- | src/main/scala/akka/PoolMonitorInstrumentation.scala | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/main/scala/akka/PoolMonitorInstrumentation.scala b/src/main/scala/akka/PoolMonitorInstrumentation.scala index 167083e8..e78e0d7e 100644 --- a/src/main/scala/akka/PoolMonitorInstrumentation.scala +++ b/src/main/scala/akka/PoolMonitorInstrumentation.scala @@ -1,16 +1,30 @@ package akka import org.aspectj.lang.annotation._ +import akka.dispatch.MonitorableThreadFactory +import kamon.metric.Metrics +import scala.concurrent.forkjoin.ForkJoinPool +import com.codahale.metrics.Gauge -@Aspect("perthis(poolMonitor(*))") +@Aspect("perthis(poolMonitor(scala.concurrent.forkjoin.ForkJoinPool))") class PoolMonitorAspect { println("Created PoolMonitorAspect") + @Pointcut("execution(scala.concurrent.forkjoin.ForkJoinPool.new(..)) && this(pool)") - protected def poolMonitor(pool:scala.concurrent.forkjoin.ForkJoinPool):Unit = {} + protected def poolMonitor(pool: scala.concurrent.forkjoin.ForkJoinPool):Unit = {} @After("poolMonitor(pool)") def beforePoolInstantiation(pool: scala.concurrent.forkjoin.ForkJoinPool):Unit = { + pool.getFactory match { + case m: MonitorableThreadFactory => registerForMonitoring(pool, m.name) + } + } + def registerForMonitoring(fjp: ForkJoinPool, name: String) { + Metrics.registry.register(s"/metrics/actorsystem/{actorsystem-name}/dispatcher/$name", + new Gauge[Long] { + def getValue: Long = fjp.getPoolSize + }) } } |