blob: 323951f95dbebf43aa88191221836682b0b06b9a (
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
|
package kamon.instrumentation
import org.aspectj.lang.annotation.{Around, Before, Pointcut, Aspect}
import kamon.TraceContext
import org.aspectj.lang.ProceedingJoinPoint
@Aspect("perthis(promiseCompletingRunnableCreation())")
class PromiseCompletingRunnableInstrumentation {
@volatile private var traceContext: Option[TraceContext] = None
@Pointcut("execution(scala.concurrent.impl.Future.PromiseCompletingRunnable.new(..))")
def promiseCompletingRunnableCreation(): Unit = {}
@Before("promiseCompletingRunnableCreation()")
def catchTheTraceContext = {
TraceContext.current match {
case Some(ctx) => traceContext = Some(ctx.fork)
case None => traceContext = None
}
}
@Pointcut("execution(* scala.concurrent.impl.Future.PromiseCompletingRunnable.run())")
def runnableExecution() = {}
@Around("runnableExecution()")
def around(pjp: ProceedingJoinPoint) = {
import pjp._
traceContext match {
case Some(ctx) => {
TraceContext.set(ctx)
proceed()
TraceContext.clear
}
case None => proceed()
}
}
}
|