From 6ba7487204e0339437c7279e6330fc03419a2c5c Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Sat, 23 Nov 2013 21:30:34 -0300 Subject: Put FutureTracing instrumentation in place, simpler and more explicit test --- kamon-trace/src/main/resources/META-INF/aop.xml | 13 ++++++ kamon-trace/src/main/scala/kamon/trace/Trace.scala | 2 + .../trace/instrumentation/FutureTracing.scala | 40 +++++++++++++++++++ .../trace/instrumentation/RunnableTracing.scala | 46 ---------------------- 4 files changed, 55 insertions(+), 46 deletions(-) create mode 100644 kamon-trace/src/main/resources/META-INF/aop.xml create mode 100644 kamon-trace/src/main/scala/kamon/trace/instrumentation/FutureTracing.scala delete mode 100644 kamon-trace/src/main/scala/kamon/trace/instrumentation/RunnableTracing.scala (limited to 'kamon-trace/src/main') diff --git a/kamon-trace/src/main/resources/META-INF/aop.xml b/kamon-trace/src/main/resources/META-INF/aop.xml new file mode 100644 index 00000000..fdc1c496 --- /dev/null +++ b/kamon-trace/src/main/resources/META-INF/aop.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/kamon-trace/src/main/scala/kamon/trace/Trace.scala b/kamon-trace/src/main/scala/kamon/trace/Trace.scala index 0ef438d4..fbd4ea8b 100644 --- a/kamon-trace/src/main/scala/kamon/trace/Trace.scala +++ b/kamon-trace/src/main/scala/kamon/trace/Trace.scala @@ -35,6 +35,8 @@ object Trace extends ExtensionId[TraceExtension] with ExtensionIdProvider { ctx } + def withValue[T](ctx: Option[TraceContext])(thunk: => T): T = traceContext.withValue(ctx)(thunk) + def transformContext(f: TraceContext => TraceContext): Unit = { context.map(f).foreach(set(_)) } diff --git a/kamon-trace/src/main/scala/kamon/trace/instrumentation/FutureTracing.scala b/kamon-trace/src/main/scala/kamon/trace/instrumentation/FutureTracing.scala new file mode 100644 index 00000000..10daa2da --- /dev/null +++ b/kamon-trace/src/main/scala/kamon/trace/instrumentation/FutureTracing.scala @@ -0,0 +1,40 @@ +package kamon.trace.instrumentation + +import org.aspectj.lang.annotation._ +import org.aspectj.lang.ProceedingJoinPoint +import kamon.trace.{ContextAware, TraceContext, Trace} + +@Aspect +class FutureTracing { + + /** + * These are the Runnables that need to be instrumented and make the TraceContext available + * while their run method is executed. + */ + @DeclareMixin("scala.concurrent.impl.CallbackRunnable || scala.concurrent.impl.Future.PromiseCompletingRunnable") + def onCompleteCallbacksRunnable: ContextAware = ContextAware.default + + + @Pointcut("execution(kamon.trace.ContextAware+.new(..)) && this(runnable)") + def instrumentedRunnableCreation(runnable: ContextAware): Unit = {} + + @Pointcut("execution(* kamon.trace.ContextAware+.run()) && this(runnable)") + def futureRunnableExecution(runnable: ContextAware) = {} + + + @After("instrumentedRunnableCreation(runnable)") + def beforeCreation(runnable: ContextAware): Unit = { + // Force traceContext initialization. + runnable.traceContext + } + + @Around("futureRunnableExecution(runnable)") + def around(pjp: ProceedingJoinPoint, runnable: ContextAware): Any = { + import pjp._ + + Trace.withValue(runnable.traceContext) { + proceed() + } + } + +} \ No newline at end of file diff --git a/kamon-trace/src/main/scala/kamon/trace/instrumentation/RunnableTracing.scala b/kamon-trace/src/main/scala/kamon/trace/instrumentation/RunnableTracing.scala deleted file mode 100644 index 5c16a648..00000000 --- a/kamon-trace/src/main/scala/kamon/trace/instrumentation/RunnableTracing.scala +++ /dev/null @@ -1,46 +0,0 @@ -package kamon.trace.instrumentation - -import org.aspectj.lang.annotation._ -import org.aspectj.lang.ProceedingJoinPoint -import kamon.trace.{ContextAware, TraceContext, Trace} - -@Aspect -class RunnableTracing { - - /** - * These are the Runnables that need to be instrumented and make the TraceContext available - * while their run method is executed. - */ - @DeclareMixin("scala.concurrent.impl.CallbackRunnable || scala.concurrent.impl.Future.PromiseCompletingRunnable") - def onCompleteCallbacksRunnable: ContextAware = ContextAware.default - - - /** - * Pointcuts - */ - - @Pointcut("execution(kamon.trace.ContextAware+.new(..)) && this(runnable)") - def instrumentedRunnableCreation(runnable: ContextAware): Unit = {} - - @Pointcut("execution(* kamon.trace.ContextAware+.run()) && this(runnable)") - def runnableExecution(runnable: ContextAware) = {} - - - - @After("instrumentedRunnableCreation(runnable)") - def beforeCreation(runnable: ContextAware): Unit = { - // Force traceContext initialization. - runnable.traceContext - } - - - @Around("runnableExecution(runnable)") - def around(pjp: ProceedingJoinPoint, runnable: ContextAware): Any = { - import pjp._ - - Trace.traceContext.withValue(runnable.traceContext) { - proceed() - } - } - -} \ No newline at end of file -- cgit v1.2.3