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
}
|