aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego <diegolparra@gmail.com>2015-08-10 00:07:46 -0300
committerDiego <diegolparra@gmail.com>2015-08-10 00:07:46 -0300
commit59b42603019ce522f1642c93cd1342ddc64f9bf2 (patch)
treef1e4c0cfddd1b43c24a9fc9c49e30b464af27921
parentc80f51c7bb98c1a42c04df11ba40cd301018c839 (diff)
downloadKamon-59b42603019ce522f1642c93cd1342ddc64f9bf2.tar.gz
Kamon-59b42603019ce522f1642c93cd1342ddc64f9bf2.tar.bz2
Kamon-59b42603019ce522f1642c93cd1342ddc64f9bf2.zip
! play-2.4.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.4.x/src/main/scala/kamon/play/Play.scala4
-rw-r--r--kamon-play-2.4.x/src/test/resources/conf/application.conf2
-rw-r--r--kamon-play-2.4.x/src/test/scala/kamon/play/RequestInstrumentationSpec.scala30
3 files changed, 32 insertions, 4 deletions
diff --git a/kamon-play-2.4.x/src/main/scala/kamon/play/Play.scala b/kamon-play-2.4.x/src/main/scala/kamon/play/Play.scala
index 4d72f16e..5f874b92 100644
--- a/kamon-play-2.4.x/src/main/scala/kamon/play/Play.scala
+++ b/kamon-play-2.4.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.4.x/src/test/resources/conf/application.conf b/kamon-play-2.4.x/src/test/resources/conf/application.conf
index b345fca7..28fc1f8a 100644
--- a/kamon-play-2.4.x/src/test/resources/conf/application.conf
+++ b/kamon-play-2.4.x/src/test/resources/conf/application.conf
@@ -2,6 +2,6 @@ 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.4.x/src/test/scala/kamon/play/RequestInstrumentationSpec.scala b/kamon-play-2.4.x/src/test/scala/kamon/play/RequestInstrumentationSpec.scala
index 02a1fcc3..c30d0529 100644
--- a/kamon-play-2.4.x/src/test/scala/kamon/play/RequestInstrumentationSpec.scala
+++ b/kamon-play-2.4.x/src/test/scala/kamon/play/RequestInstrumentationSpec.scala
@@ -25,7 +25,7 @@ import org.scalatestplus.play._
import play.api.DefaultGlobal
import play.api.http.{ HttpErrorHandler, HttpFilters, 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.routing.SimpleRouter
@@ -257,4 +257,32 @@ object controllers {
Ok("invoked show with: " + id)
}
}
+}
+
+class TestNameGenerator extends NameGenerator {
+ import scala.collection.concurrent.TrieMap
+ import play.api.routing.Router
+ 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(Router.Tags.RouteVerb).map { verb ⇒
+ val path = requestHeader.tags(Router.Tags.RoutePattern)
+ 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