aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/instrumentation/SampleInstrumentation.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-core/src/main/scala/kamon/instrumentation/SampleInstrumentation.scala')
-rw-r--r--kamon-core/src/main/scala/kamon/instrumentation/SampleInstrumentation.scala49
1 files changed, 49 insertions, 0 deletions
diff --git a/kamon-core/src/main/scala/kamon/instrumentation/SampleInstrumentation.scala b/kamon-core/src/main/scala/kamon/instrumentation/SampleInstrumentation.scala
new file mode 100644
index 00000000..74261403
--- /dev/null
+++ b/kamon-core/src/main/scala/kamon/instrumentation/SampleInstrumentation.scala
@@ -0,0 +1,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
+}