diff options
Diffstat (limited to 'kamon-play-2.3.x/src/main/scala/kamon')
3 files changed, 16 insertions, 27 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 d8ef5c97..0da52283 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 @@ -16,32 +16,27 @@ package kamon.play -import akka.actor.{ ExtendedActorSystem, Extension, ExtensionId, ExtensionIdProvider } -import akka.event.Logging +import akka.actor._ import kamon.Kamon import kamon.util.http.HttpServerMetrics +import org.slf4j.LoggerFactory import play.api.libs.ws.WSRequest import play.api.mvc.RequestHeader -object Play extends ExtensionId[PlayExtension] with ExtensionIdProvider { - override def lookup(): ExtensionId[_ <: Extension] = Play - override def createExtension(system: ExtendedActorSystem): PlayExtension = new PlayExtension(system) - +object PlayExtension { val SegmentLibraryName = "WS-client" -} -class PlayExtension(private val system: ExtendedActorSystem) extends Kamon.Extension { - val log = Logging(system, classOf[PlayExtension]) - log.info(s"Starting the Kamon(Play) extension") + val log = LoggerFactory.getLogger("kamon.play.PlayExtension") + private val dynamic = new ReflectiveDynamicAccess(getClass.getClassLoader) - private val config = system.settings.config.getConfig("kamon.play") + private val config = Kamon.config.getConfig("kamon.play") val httpServerMetrics = Kamon.metrics.entity(HttpServerMetrics, "play-server") val includeTraceToken: Boolean = config.getBoolean("automatic-trace-token-propagation") val traceTokenHeaderName: String = config.getString("trace-token-header-name") private val nameGeneratorFQN = config.getString("name-generator") - private val nameGenerator: NameGenerator = system.dynamicAccess.createInstanceFor[NameGenerator](nameGeneratorFQN, Nil).get + private val nameGenerator: NameGenerator = dynamic.createInstanceFor[NameGenerator](nameGeneratorFQN, Nil).get def generateTraceName(requestHeader: RequestHeader): String = nameGenerator.generateTraceName(requestHeader) def generateHttpClientSegmentName(request: WSRequest): String = nameGenerator.generateHttpClientSegmentName(request) diff --git a/kamon-play-2.3.x/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala b/kamon-play-2.3.x/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala index c8a808ec..01b37024 100644 --- a/kamon-play-2.3.x/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala +++ b/kamon-play-2.3.x/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala @@ -16,7 +16,7 @@ package kamon.play.instrumentation import kamon.Kamon -import kamon.play.Play +import kamon.play.PlayExtension import kamon.trace._ import kamon.util.SameThreadExecutionContext import org.aspectj.lang.ProceedingJoinPoint @@ -34,10 +34,8 @@ class RequestInstrumentation { def beforeRouteRequest(requestHeader: RequestHeader): Unit = { import Kamon.tracer - val playExtension = Kamon(Play) - - val token = if (playExtension.includeTraceToken) { - requestHeader.headers.get(playExtension.traceTokenHeaderName) + val token = if (PlayExtension.includeTraceToken) { + requestHeader.headers.get(PlayExtension.traceTokenHeaderName) } else None Tracer.setCurrentContext(tracer.newContext("UnnamedTrace", token)) @@ -47,21 +45,19 @@ class RequestInstrumentation { def aroundDoFilter(pjp: ProceedingJoinPoint, next: EssentialAction): Any = { val essentialAction = (requestHeader: RequestHeader) ⇒ { - val playExtension = Kamon(Play) - def onResult(result: Result): Result = { Tracer.currentContext.collect { ctx ⇒ ctx.finish() recordHttpServerMetrics(result.header, ctx.name) - if (playExtension.includeTraceToken) result.withHeaders(playExtension.traceTokenHeaderName -> ctx.token) + if (PlayExtension.includeTraceToken) result.withHeaders(PlayExtension.traceTokenHeaderName -> ctx.token) else result } getOrElse result } //override the current trace name - Tracer.currentContext.rename(playExtension.generateTraceName(requestHeader)) + Tracer.currentContext.rename(PlayExtension.generateTraceName(requestHeader)) // Invoke the action next(requestHeader).map(onResult)(SameThreadExecutionContext) } @@ -76,5 +72,5 @@ class RequestInstrumentation { } def recordHttpServerMetrics(header: ResponseHeader, traceName: String): Unit = - Kamon(Play).httpServerMetrics.recordResponse(traceName, header.status.toString) + PlayExtension.httpServerMetrics.recordResponse(traceName, header.status.toString) } diff --git a/kamon-play-2.3.x/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala b/kamon-play-2.3.x/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala index 2536c77c..1e3cc8a2 100644 --- a/kamon-play-2.3.x/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala +++ b/kamon-play-2.3.x/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala @@ -16,8 +16,7 @@ package kamon.play.instrumentation -import kamon.Kamon -import kamon.play.Play +import kamon.play.PlayExtension import kamon.trace.{ Tracer, SegmentCategory } import kamon.util.SameThreadExecutionContext import org.aspectj.lang.ProceedingJoinPoint @@ -34,9 +33,8 @@ class WSInstrumentation { @Around("onExecuteRequest(request)") def aroundExecuteRequest(pjp: ProceedingJoinPoint, request: WSRequest): Any = { Tracer.currentContext.collect { ctx ⇒ - val playExtension = Kamon(Play) - val segmentName = playExtension.generateHttpClientSegmentName(request) - val segment = ctx.startSegment(segmentName, SegmentCategory.HttpClient, Play.SegmentLibraryName) + val segmentName = PlayExtension.generateHttpClientSegmentName(request) + val segment = ctx.startSegment(segmentName, SegmentCategory.HttpClient, PlayExtension.SegmentLibraryName) val response = pjp.proceed().asInstanceOf[Future[WSResponse]] response.onComplete(result ⇒ segment.finish())(SameThreadExecutionContext) |