aboutsummaryrefslogtreecommitdiff
path: root/kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala
diff options
context:
space:
mode:
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.scala37
1 files changed, 5 insertions, 32 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 200fe135..7dcb7913 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-2015 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. You may obtain a copy of the License at
@@ -17,12 +17,11 @@ package kamon.play.instrumentation
import kamon.Kamon
import kamon.play.Play
-import kamon.trace.TraceLocal.{ HttpContextKey, HttpContext }
+import kamon.trace.TraceLocal.{ HttpContext, HttpContextKey }
import kamon.trace._
import kamon.util.SameThreadExecutionContext
import org.aspectj.lang.ProceedingJoinPoint
import org.aspectj.lang.annotation._
-import play.api.Routes
import play.api.mvc.Results._
import play.api.mvc._
@@ -40,13 +39,11 @@ class RequestInstrumentation {
val playExtension = Kamon(Play)
- val defaultTraceName = playExtension.generateTraceName(requestHeader)
val token = if (playExtension.includeTraceToken) {
- requestHeader.headers.toSimpleMap.find(_._1 == playExtension.traceTokenHeaderName).map(_._2)
+ requestHeader.headers.get(playExtension.traceTokenHeaderName)
} else None
- val newContext = tracer.newContext(defaultTraceName, token)
- Tracer.setCurrentContext(newContext)
+ Tracer.setCurrentContext(tracer.newContext("UnnamedTrace", token))
}
@Around("call(* play.api.GlobalSettings.doFilter(*)) && args(next)")
@@ -70,7 +67,7 @@ class RequestInstrumentation {
storeDiagnosticData(requestHeader)
//override the current trace name
- normaliseTraceName(requestHeader).map(Tracer.currentContext.rename)
+ Tracer.currentContext.rename(playExtension.generateTraceName(requestHeader))
// Invoke the action
next(requestHeader).map(onResult)(SameThreadExecutionContext)
@@ -98,31 +95,7 @@ class RequestInstrumentation {
}
object RequestInstrumentation {
- import kamon.util.TriemapAtomicGetOrElseUpdate.Syntax
- import java.util.Locale
- import scala.collection.concurrent.TrieMap
-
val UserAgent = "User-Agent"
val XForwardedFor = "X-Forwarded-For"
val Unknown = "unknown"
-
- private val cache = TrieMap.empty[String, String]
-
- private val normalizePattern = """\$([^<]+)<[^>]+>""".r
-
- def normaliseTraceName(requestHeader: RequestHeader): Option[String] = requestHeader.tags.get(Routes.ROUTE_VERB).map({ verb ⇒
- val path = requestHeader.tags(Routes.ROUTE_PATTERN)
- cache.atomicGetOrElseUpdate(s"$verb$path", {
- val traceName = {
- // Convert paths of form GET /foo/bar/$paramname<regexp>/blah to foo.bar.paramname.blah.get
- val p = normalizePattern.replaceAllIn(path, "$1").replace('/', '.').dropWhile(_ == '.')
- val normalisedPath = {
- if (p.lastOption.filter(_ != '.').isDefined) s"$p."
- else p
- }
- s"$normalisedPath${verb.toLowerCase(Locale.ENGLISH)}"
- }
- traceName
- })
- })
}