From bf54ca0e8fdb3c3e54bafb87ac716ee95b8fbe78 Mon Sep 17 00:00:00 2001 From: Martin Grotzke Date: Wed, 25 Feb 2015 23:46:44 +0100 Subject: Compile pattern for path normalization only once --- .../scala/kamon/play/instrumentation/RequestInstrumentation.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 9079b391..5214f420 100644 --- a/kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala +++ b/kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala @@ -106,12 +106,14 @@ object RequestInstrumentation { 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/blah to foo.bar.paramname.blah.get - val p = path.replaceAll("""\$([^<]+)<[^>]+>""", "$1").replace('/', '.').dropWhile(_ == '.') + val p = normalizePattern.replaceAllIn(path, "$1").replace('/', '.').dropWhile(_ == '.') val normalisedPath = { if (p.lastOption.filter(_ != '.').isDefined) s"$p." else p -- cgit v1.2.3