diff options
author | Diego <diegolparra@gmail.com> | 2015-08-10 00:07:46 -0300 |
---|---|---|
committer | Diego <diegolparra@gmail.com> | 2015-08-10 00:07:46 -0300 |
commit | 59b42603019ce522f1642c93cd1342ddc64f9bf2 (patch) | |
tree | f1e4c0cfddd1b43c24a9fc9c49e30b464af27921 | |
parent | c80f51c7bb98c1a42c04df11ba40cd301018c839 (diff) | |
download | Kamon-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
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 |