aboutsummaryrefslogblamecommitdiff
path: root/kamon-core/src/main/scala/kamon/instrumentation/SampleInstrumentation.scala
blob: 74261403b28fd0428917dcdfe528deaa962c37c6 (plain) (tree)
















































                                                                                       
package kamon.instrumentation

import com.codahale.metrics.{ExponentiallyDecayingReservoir, Histogram}
import org.aspectj.lang.annotation.{After, Pointcut, DeclareMixin, Aspect}

class ActorCage(val name: String, val size: Int) {

  def doIt: Unit = println("name")
}

trait CageMonitoring {
  def histogram: Histogram
  def count(value: Int): Unit
}

class CageMonitoringImp extends CageMonitoring{
  final val histogram = new Histogram(new ExponentiallyDecayingReservoir())

  def count(value: Int) = histogram.update(value)

}


@Aspect
class InceptionAspect {

  @DeclareMixin("kamon.instrumentation.ActorCage")
  def mixin: CageMonitoring = new CageMonitoringImp


  @Pointcut("execution(* kamon.instrumentation.ActorCage.doIt()) && target(actorCage)")
  def theActorCageDidIt(actorCage: CageMonitoring) = {}

  @After("theActorCageDidIt(actorCage)")
  def afterDoingIt(actorCage: CageMonitoring) = {
    actorCage.count(1)
    actorCage.histogram.getSnapshot.dump(System.out)
  }



}


object Runner extends App {
  val cage = new ActorCage("ivan", 10)

  cage.doIt
}