From fb6afff8347d064681123dc9721b226c9975211e Mon Sep 17 00:00:00 2001 From: Diego Date: Sun, 17 May 2015 19:31:34 -0300 Subject: + play: create and configure a default trace name generator for Play apps and closes #190 --- .../instrumentation/RequestInstrumentation.scala | 37 +++------------------- 1 file changed, 5 insertions(+), 32 deletions(-) (limited to 'kamon-play/src/main/scala/kamon/play/instrumentation') 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 + * Copyright © 2013-2015 the kamon project * * 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/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 - }) - }) } -- cgit v1.2.3