aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego <diegolparra@gmail.com>2015-08-10 00:23:22 -0300
committerDiego <diegolparra@gmail.com>2015-08-10 00:23:22 -0300
commitb2c218c100ee3a455f419ad6b0cff0dc68237288 (patch)
treea524063d16629f0f77ec6035ce13438ccc139b13
parent59b42603019ce522f1642c93cd1342ddc64f9bf2 (diff)
downloadKamon-b2c218c100ee3a455f419ad6b0cff0dc68237288.tar.gz
Kamon-b2c218c100ee3a455f419ad6b0cff0dc68237288.tar.bz2
Kamon-b2c218c100ee3a455f419ad6b0cff0dc68237288.zip
! play-2.3.x: grouping traces that doesn't are tagged as UntaggedTraces in order to avoid the creation of undesired traces
-rw-r--r--kamon-play-2.3.x/src/main/scala/kamon/play/Play.scala4
-rw-r--r--kamon-play-2.3.x/src/test/resources/conf/application.conf2
-rw-r--r--kamon-play-2.3.x/src/test/scala/kamon/play/RequestInstrumentationSpec.scala35
-rw-r--r--kamon-play-2.3.x/src/test/scala/kamon/play/WSInstrumentationSpec.scala4
4 files changed, 37 insertions, 8 deletions
diff --git a/kamon-play-2.3.x/src/main/scala/kamon/play/Play.scala b/kamon-play-2.3.x/src/main/scala/kamon/play/Play.scala
index d9fdfea8..f704dba0 100644
--- a/kamon-play-2.3.x/src/main/scala/kamon/play/Play.scala
+++ b/kamon-play-2.3.x/src/main/scala/kamon/play/Play.scala
@@ -68,14 +68,14 @@ class DefaultNameGenerator extends NameGenerator {
// 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."
+ if (p.lastOption.exists(_ != '.')) s"$p."
else p
}
s"$normalisedPath${verb.toLowerCase(Locale.ENGLISH)}"
}
traceName
})
- } getOrElse s"${requestHeader.method}: ${requestHeader.uri}"
+ } getOrElse "UntaggedTraces"
def generateHttpClientSegmentName(request: WSRequest): String = request.url
}
diff --git a/kamon-play-2.3.x/src/test/resources/conf/application.conf b/kamon-play-2.3.x/src/test/resources/conf/application.conf
index b927087c..be7ae283 100644
--- a/kamon-play-2.3.x/src/test/resources/conf/application.conf
+++ b/kamon-play-2.3.x/src/test/resources/conf/application.conf
@@ -2,7 +2,7 @@ kamon {
play {
include-trace-token-header = true
trace-token-header-name = "X-Trace-Token"
- name-generator = kamon.play.DefaultNameGenerator
+ name-generator = kamon.play.TestNameGenerator
}
}
diff --git a/kamon-play-2.3.x/src/test/scala/kamon/play/RequestInstrumentationSpec.scala b/kamon-play-2.3.x/src/test/scala/kamon/play/RequestInstrumentationSpec.scala
index ff115f31..9ef26350 100644
--- a/kamon-play-2.3.x/src/test/scala/kamon/play/RequestInstrumentationSpec.scala
+++ b/kamon-play-2.3.x/src/test/scala/kamon/play/RequestInstrumentationSpec.scala
@@ -19,12 +19,12 @@ import kamon.Kamon
import kamon.metric.instrument.CollectionContext
import kamon.play.action.TraceName
import kamon.trace.TraceLocal.HttpContextKey
-import kamon.trace.{ Tracer, TraceLocal, TraceContext }
+import kamon.trace.{ Tracer, TraceLocal }
import org.scalatestplus.play._
import play.api.DefaultGlobal
import play.api.http.Writeable
import play.api.libs.concurrent.Execution.Implicits.defaultContext
-import play.api.libs.ws.WS
+import play.api.libs.ws.{ WSRequest, WS }
import play.api.mvc.Results.Ok
import play.api.mvc._
import play.api.test.Helpers._
@@ -36,9 +36,10 @@ import scala.concurrent.duration._
import scala.concurrent.{ Await, Future }
class RequestInstrumentationSpec extends PlaySpec with OneServerPerSuite {
- Kamon.start()
System.setProperty("config.file", "./kamon-play-2.3.x/src/test/resources/conf/application.conf")
+ Kamon.start()
+
override lazy val port: Port = 19002
val executor = scala.concurrent.ExecutionContext.Implicits.global
@@ -264,4 +265,32 @@ object controllers {
Ok("invoked show with: " + id)
}
}
+}
+
+class TestNameGenerator extends NameGenerator {
+ import scala.collection.concurrent.TrieMap
+ import play.api.{ Routes ⇒ PlayRoutes }
+ import java.util.Locale
+ import kamon.util.TriemapAtomicGetOrElseUpdate.Syntax
+
+ private val cache = TrieMap.empty[String, String]
+ private val normalizePattern = """\$([^<]+)<[^>]+>""".r
+
+ def generateTraceName(requestHeader: RequestHeader): String = requestHeader.tags.get(PlayRoutes.ROUTE_VERB).map { verb ⇒
+ val path = requestHeader.tags(PlayRoutes.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.exists(_ != '.')) s"$p."
+ else p
+ }
+ s"$normalisedPath${verb.toLowerCase(Locale.ENGLISH)}"
+ }
+ traceName
+ })
+ } getOrElse s"${requestHeader.method}: ${requestHeader.uri}"
+
+ def generateHttpClientSegmentName(request: WSRequest): String = request.url
} \ No newline at end of file
diff --git a/kamon-play-2.3.x/src/test/scala/kamon/play/WSInstrumentationSpec.scala b/kamon-play-2.3.x/src/test/scala/kamon/play/WSInstrumentationSpec.scala
index 346ef084..93ace7be 100644
--- a/kamon-play-2.3.x/src/test/scala/kamon/play/WSInstrumentationSpec.scala
+++ b/kamon-play-2.3.x/src/test/scala/kamon/play/WSInstrumentationSpec.scala
@@ -31,10 +31,10 @@ import scala.concurrent.Await
import scala.concurrent.duration._
class WSInstrumentationSpec extends WordSpecLike with Matchers with OneServerPerSuite {
- Kamon.start()
-
System.setProperty("config.file", "./kamon-play-2.3.x/src/test/resources/conf/application.conf")
+ Kamon.start()
+
override lazy val port: Port = 19003
implicit override lazy val app = FakeApplication(withRoutes = {
case ("GET", "/async") ⇒ Action { Ok("ok") }