diff options
-rw-r--r-- | project/AspectJ.scala | 15 | ||||
-rw-r--r-- | project/Build.scala | 2 | ||||
-rw-r--r-- | project/build.properties | 1 | ||||
-rw-r--r-- | src/main/aspectj/kamon/instrumentation/PromiseCompletingRunnableInstrumentation.aj | 29 | ||||
-rw-r--r-- | src/main/resources/META-INF/aop.xml | 2 | ||||
-rw-r--r-- | src/main/scala/kamon/instrumentation/PromiseCompletingRunnableInstrumentation.scala | 41 | ||||
-rw-r--r-- | src/main/scala/spraytest/ClientTest.scala | 3 |
7 files changed, 41 insertions, 52 deletions
diff --git a/project/AspectJ.scala b/project/AspectJ.scala index d708b0db..a711f2be 100644 --- a/project/AspectJ.scala +++ b/project/AspectJ.scala @@ -1,15 +1,16 @@ import sbt._ import sbt.Keys._ -import com.typesafe.sbt.SbtAspectj -import com.typesafe.sbt.SbtAspectj.Aspectj -import com.typesafe.sbt.SbtAspectj.AspectjKeys._ +import com.typesafe.sbt.SbtAspectj.{ Aspectj, aspectjSettings, compiledClasses } +import com.typesafe.sbt.SbtAspectj.AspectjKeys.{ binaries, compileOnly, inputs, lintProperties, weaverOptions } object AspectJ { - lazy val aspectJSettings = SbtAspectj.aspectjSettings ++ Seq( - showWeaveInfo := false, - fork in Test := true, - javaOptions in Test <++= weaverOptions in Aspectj + lazy val aspectJSettings = aspectjSettings ++ Seq( + compileOnly in Aspectj := true, + fork in Test := true, + javaOptions in Test <++= weaverOptions in Aspectj, + //lintProperties in Aspectj <++= "invalidAbsoluteTypeName = ignore", + products in Compile <<= products in Aspectj ) }
\ No newline at end of file diff --git a/project/Build.scala b/project/Build.scala index ce797851..3a16b589 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -8,7 +8,7 @@ object Build extends Build { lazy val root = Project("kamon", file(".")) .settings(basicSettings: _*) - .settings(revolverSettings: _*) + //.settings(revolverSettings: _*) .settings(aspectJSettings: _*) .settings( libraryDependencies ++= diff --git a/project/build.properties b/project/build.properties new file mode 100644 index 00000000..db255c25 --- /dev/null +++ b/project/build.properties @@ -0,0 +1 @@ +sbt.version=0.12.3
\ No newline at end of file diff --git a/src/main/aspectj/kamon/instrumentation/PromiseCompletingRunnableInstrumentation.aj b/src/main/aspectj/kamon/instrumentation/PromiseCompletingRunnableInstrumentation.aj new file mode 100644 index 00000000..83e46be3 --- /dev/null +++ b/src/main/aspectj/kamon/instrumentation/PromiseCompletingRunnableInstrumentation.aj @@ -0,0 +1,29 @@ +package kamon.instrumentation; + +import kamon.TraceContext; +import scala.concurrent.impl.Future; +import scala.Option; + +public aspect PromiseCompletingRunnableInstrumentation { + + public final Option<TraceContext> Future.PromiseCompletingRunnable.context = TraceContext.current(); + + pointcut run(Future.PromiseCompletingRunnable runnable) + : execution(* scala.concurrent.impl.Future.PromiseCompletingRunnable.run()) && this(runnable); + + void around(Future.PromiseCompletingRunnable runnable) + : run(runnable) { + + if(runnable.context.isDefined()) { + + TraceContext.set((TraceContext) runnable.context.get()); + proceed(runnable); + TraceContext.clear(); + + } else { + proceed(runnable); + } + + + } +} diff --git a/src/main/resources/META-INF/aop.xml b/src/main/resources/META-INF/aop.xml index bd67064d..4aac3913 100644 --- a/src/main/resources/META-INF/aop.xml +++ b/src/main/resources/META-INF/aop.xml @@ -1,7 +1,9 @@ <!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"> <aspectj> + <weaver options="-verbose -showWeaveInfo -nowarn"/> <aspects> + <!--<aspect name="akka.ActorSystemAspect"/> <!–<aspect name="akka.MailboxAspect"/>–> <aspect name="akka.PoolMonitorAspect"/>--> diff --git a/src/main/scala/kamon/instrumentation/PromiseCompletingRunnableInstrumentation.scala b/src/main/scala/kamon/instrumentation/PromiseCompletingRunnableInstrumentation.scala deleted file mode 100644 index 323951f9..00000000 --- a/src/main/scala/kamon/instrumentation/PromiseCompletingRunnableInstrumentation.scala +++ /dev/null @@ -1,41 +0,0 @@ -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() - } - } - -} diff --git a/src/main/scala/spraytest/ClientTest.scala b/src/main/scala/spraytest/ClientTest.scala index c3a6ba39..7a95fc76 100644 --- a/src/main/scala/spraytest/ClientTest.scala +++ b/src/main/scala/spraytest/ClientTest.scala @@ -40,9 +40,6 @@ class ClientTest extends App { val response = pipeline { Get("http://geo.despegar.com/geo-services-web/service/Autocomplete/DESAR/1/0/0/10/0/0/Obelisco") - - Post("http://www.") - } onSuccess { case a => { println(a) |