diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2014-11-03 23:27:57 +0100 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2014-11-03 23:27:57 +0100 |
commit | 59faf588080b137817444a6877170e2bd687427f (patch) | |
tree | a5f1cadf6c21915938d435e1a9d01583475d0c6a /kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala | |
parent | 4b999c39b6bd09d891de718fad10b795264755c6 (diff) | |
parent | 6e3d9ae88ecce10420eeac82294c54c1b43dedf4 (diff) | |
download | Kamon-59faf588080b137817444a6877170e2bd687427f.tar.gz Kamon-59faf588080b137817444a6877170e2bd687427f.tar.bz2 Kamon-59faf588080b137817444a6877170e2bd687427f.zip |
Merge branch 'master' into release-0.2, kamon-play still need fixes.
Conflicts:
kamon-core/src/main/scala/kamon/instrumentation/akka/ActorCellInstrumentation.scala
kamon-core/src/test/scala/kamon/metric/RouterMetricsSpec.scala
kamon-newrelic/src/main/scala/kamon/newrelic/NewRelic.scala
kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala
kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala
kamon-play/src/test/scala/kamon/play/WSInstrumentationSpec.scala
kamon-playground/src/main/scala/test/SimpleRequestProcessor.scala
kamon-statsd/src/main/scala/kamon/statsd/StatsD.scala
project/Dependencies.scala
Diffstat (limited to 'kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala')
-rw-r--r-- | kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala | 42 |
1 files changed, 15 insertions, 27 deletions
diff --git a/kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala b/kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala index b9f09111..c58e9f0c 100644 --- a/kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala +++ b/kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala @@ -16,15 +16,15 @@ package kamon.play.instrumentation -import org.aspectj.lang.annotation.{ Around, Pointcut, Aspect } +import kamon.Kamon +import kamon.play.Play +import kamon.trace.SegmentMetricIdentityLabel import org.aspectj.lang.ProceedingJoinPoint +import org.aspectj.lang.annotation.{ Around, Aspect, Pointcut } import kamon.trace.TraceRecorder -import kamon.metric.TraceMetrics.HttpClientRequest import play.api.libs.ws.WS.WSRequest import scala.concurrent.Future import play.api.libs.ws.Response -import scala.util.{ Failure, Success } -import scala.concurrent.ExecutionContext.Implicits.global @Aspect class WSInstrumentation { @@ -34,27 +34,15 @@ class WSInstrumentation { @Around("onExecuteRequest(request)") def aroundExecuteRequest(pjp: ProceedingJoinPoint, request: WSRequest): Any = { - import WSInstrumentation._ - - val completionHandle = TraceRecorder.startSegment(HttpClientRequest(request.url), basicRequestAttributes(request)) - - val response = pjp.proceed().asInstanceOf[Future[Response]] - - response.onComplete { - case Failure(t) ⇒ completionHandle.map(_.finish(Map("completed-with-error" -> t.getMessage))) - case Success(_) ⇒ completionHandle.map(_.finish(Map.empty)) - } - - response + TraceRecorder.withTraceContextAndSystem { (ctx, system) ⇒ + val playExtension = Kamon(Play)(system) + val executor = playExtension.defaultDispatcher + val segmentName = playExtension.generateHttpClientSegmentName(request) + val segment = ctx.startSegment(segmentName, SegmentMetricIdentityLabel.HttpClient) + val response = pjp.proceed().asInstanceOf[Future[Response]] + + response.map(result ⇒ segment.finish())(executor) + response + } getOrElse (pjp.proceed()) } -} - -object WSInstrumentation { - - def basicRequestAttributes(request: WSRequest): Map[String, String] = { - Map[String, String]( - "host" -> request.header("host").getOrElse("Unknown"), - "path" -> request.method) - } -} - +}
\ No newline at end of file |