diff options
author | Ivan Topolnak <ivantopo@gmail.com> | 2013-09-21 22:57:43 -0300 |
---|---|---|
committer | Ivan Topolnak <ivantopo@gmail.com> | 2013-09-21 22:57:43 -0300 |
commit | 7a86ca357a11caa6abc89c325be8d50dd91071a6 (patch) | |
tree | 72ee968822f33686a964e132c367d821454c60e6 /kamon-core/src/main/scala/kamon/instrumentation | |
parent | 5168621c256d25d388fb990a5bbc080a35e07b46 (diff) | |
download | Kamon-7a86ca357a11caa6abc89c325be8d50dd91071a6.tar.gz Kamon-7a86ca357a11caa6abc89c325be8d50dd91071a6.tar.bz2 Kamon-7a86ca357a11caa6abc89c325be8d50dd91071a6.zip |
wip
Diffstat (limited to 'kamon-core/src/main/scala/kamon/instrumentation')
-rw-r--r-- | kamon-core/src/main/scala/kamon/instrumentation/ActorRefTellInstrumentation.scala | 4 | ||||
-rw-r--r-- | kamon-core/src/main/scala/kamon/instrumentation/SprayServerInstrumentation.scala | 57 |
2 files changed, 55 insertions, 6 deletions
diff --git a/kamon-core/src/main/scala/kamon/instrumentation/ActorRefTellInstrumentation.scala b/kamon-core/src/main/scala/kamon/instrumentation/ActorRefTellInstrumentation.scala index 4f0b8a08..fdd7b696 100644 --- a/kamon-core/src/main/scala/kamon/instrumentation/ActorRefTellInstrumentation.scala +++ b/kamon-core/src/main/scala/kamon/instrumentation/ActorRefTellInstrumentation.scala @@ -24,7 +24,7 @@ class ActorRefTellInstrumentation { @Around("sendingMessageToActorRef(actor, message, sender)") def around(pjp: ProceedingJoinPoint, actor: ActorRef, message: Any, sender: ActorRef): Unit = { import kamon.Instrument.instrumentation.sendMessageTransformation - + //println(s"====> [$sender] => [$actor] --- $message") pjp.proceedWithTarget(actor, sendMessageTransformation(sender, actor, message).asInstanceOf[AnyRef], sender) } } @@ -76,7 +76,7 @@ class UnregisteredActorRefInstrumentation { @Around("sprayResponderHandle(message, sender)") def sprayInvokeAround(pjp: ProceedingJoinPoint, message: Any, sender: ActorRef): Unit = { import ProceedingJoinPointPimp._ - println("Handling unregistered actor ref message: "+message) + //println("Handling unregistered actor ref message: "+message) message match { case SimpleTraceMessage(msg, ctx) => { ctx match { diff --git a/kamon-core/src/main/scala/kamon/instrumentation/SprayServerInstrumentation.scala b/kamon-core/src/main/scala/kamon/instrumentation/SprayServerInstrumentation.scala index 6573549d..f8ab709e 100644 --- a/kamon-core/src/main/scala/kamon/instrumentation/SprayServerInstrumentation.scala +++ b/kamon-core/src/main/scala/kamon/instrumentation/SprayServerInstrumentation.scala @@ -1,10 +1,12 @@ package kamon.instrumentation -import org.aspectj.lang.annotation.{After, Pointcut, Aspect} -import kamon.Tracer -import kamon.trace.UowTracing.{Finish, Rename} +import org.aspectj.lang.annotation.{DeclareMixin, After, Pointcut, Aspect} +import kamon.{TraceContext, Tracer} +import kamon.trace.UowTracing.{WebExternal, Finish, Rename} import spray.http.HttpRequest import spray.can.server.OpenRequestComponent +import spray.can.client.HttpHostConnector.RequestContext +import spray.http.HttpHeaders.Host @Aspect class SprayServerInstrumentation { @@ -17,7 +19,7 @@ class SprayServerInstrumentation { //@After("openRequestInit()") //def afterInit(): Unit = { Tracer.start - println("Created the context: " + Tracer.context() + " for the transaction: " + request.uri.path.toString()) + //println("Created the context: " + Tracer.context() + " for the transaction: " + request.uri.path.toString()) Tracer.context().map(_.entries ! Rename(request.uri.path.toString())) } @@ -30,4 +32,51 @@ class SprayServerInstrumentation { Tracer.context().map(_.entries ! Finish()) } + + + + + @Pointcut("execution(spray.can.client.HttpHostConnector.RequestContext.new(..)) && this(ctx)") + def requestRecordInit(ctx: TracingAwareRequestContext): Unit = {} + + @After("requestRecordInit(ctx)") + def whenCreatedRequestRecord(ctx: TracingAwareRequestContext): Unit = { + // Necessary to force the initialization of TracingAwareRequestContext at the moment of creation. + ctx.context + } + + + + + + + @Pointcut("execution(* spray.can.client.HttpHostConnectionSlot.dispatchToCommander(..)) && args(ctx, msg)") + def requestRecordInit2(ctx: TracingAwareRequestContext, msg: Any): Unit = {} + + @After("requestRecordInit2(ctx, msg)") + def whenCreatedRequestRecord2(ctx: TracingAwareRequestContext, msg: Any): Unit = { + println("=======> Spent in WEB External: " + (System.nanoTime() - ctx.timestamp)) + + // TODO: REMOVE THIS: + val request = (ctx.asInstanceOf[RequestContext]).request + + ctx.context.map(_.entries ! WebExternal(ctx.timestamp, System.nanoTime(), request.header[Host].map(_.host).getOrElse("UNKNOWN"))) + + } +} + +trait TracingAwareRequestContext { + def context: Option[TraceContext] + def timestamp: Long +} + +case class DefaultTracingAwareRequestContext(context: Option[TraceContext] = Tracer.context(), + timestamp: Long = System.nanoTime) extends TracingAwareRequestContext + + +@Aspect +class SprayRequestContextTracing { + + @DeclareMixin("spray.can.client.HttpHostConnector.RequestContext") + def mixin: TracingAwareRequestContext = DefaultTracingAwareRequestContext() }
\ No newline at end of file |