aboutsummaryrefslogtreecommitdiff
path: root/kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala
diff options
context:
space:
mode:
authorDiego <diegolparra@gmail.com>2014-03-09 15:01:51 -0300
committerDiego <diegolparra@gmail.com>2014-03-09 15:01:51 -0300
commit04550ce1daff2b3d13aa85931686a303bf93fbd8 (patch)
treea9be0d45072915d4f3c10e7cdc50052f7ef7d445 /kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala
parentb8a26e0f173a528c700a3d0cfa4ed2f8079a7ae1 (diff)
downloadKamon-04550ce1daff2b3d13aa85931686a303bf93fbd8.tar.gz
Kamon-04550ce1daff2b3d13aa85931686a303bf93fbd8.tar.bz2
Kamon-04550ce1daff2b3d13aa85931686a303bf93fbd8.zip
Play Integration with: X-Trace-Token, WebExternal Time and Error publishing in Akka EventStream
Diffstat (limited to 'kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala')
-rw-r--r--kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala22
1 files changed, 19 insertions, 3 deletions
diff --git a/kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala b/kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala
index c55f89e0..18060895 100644
--- a/kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala
+++ b/kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala
@@ -1,5 +1,5 @@
/* ===================================================
- * Copyright © 2013 2014 the kamon project <http://kamon.io/>
+ * Copyright © 2013-2014 the kamon project <http://kamon.io/>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
package kamon.play.instrumentation
+import scala.concurrent.ExecutionContext.Implicits.global
import kamon.trace.{ TraceRecorder, TraceContextAware }
import kamon.Kamon
import kamon.play.Play
@@ -25,12 +26,11 @@ import akka.actor.ActorSystem
import org.aspectj.lang.ProceedingJoinPoint
import org.aspectj.lang.annotation._
import scala.Some
-import scala.concurrent.ExecutionContext.Implicits.global
@Aspect
class RequestInstrumentation {
- @DeclareMixin("play.api.mvc.RequestHeader || play.api.test.FakeRequest")
+ @DeclareMixin("play.api.mvc.RequestHeader")
def mixinContextAwareNewRequest: TraceContextAware = TraceContextAware.default
@Pointcut("execution(* play.api.GlobalSettings+.onStart(*)) && args(application)")
@@ -49,6 +49,22 @@ class RequestInstrumentation {
Filters(pjp.proceed(Array(next)).asInstanceOf[EssentialAction], kamonRequestFilter)
}
+ @Pointcut("execution(* play.api.GlobalSettings+.onError(..)) && args(request, ex)")
+ def onError(request: TraceContextAware, ex: Throwable): Unit = {}
+
+ @Around("onError(request, ex)")
+ def aroundOnError(pjp: ProceedingJoinPoint, request: TraceContextAware, ex: Throwable): Any = {
+ val simpleResult = request.traceContext match {
+ case None ⇒ pjp.proceed()
+ case Some(ctx) ⇒ {
+ val actorSystem = ctx.system
+ Kamon(Play)(actorSystem).publishErrorMessage(actorSystem, ex.getMessage, ex)
+ pjp.proceed()
+ }
+ }
+ simpleResult
+ }
+
private[this] val kamonRequestFilter = Filter { (nextFilter, requestHeader) ⇒
processRequest(requestHeader)