aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/instrumentation/SampleInstrumentation.scala
blob: 74261403b28fd0428917dcdfe528deaa962c37c6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
}