aboutsummaryrefslogtreecommitdiff
path: root/kamon-play/src/main/scala/kamon
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2014-10-31 03:05:13 +0100
committerIvan Topolnjak <ivantopo@gmail.com>2014-10-31 03:05:13 +0100
commit2c958ea86ded8a047af6450026ca7ec64a28bea1 (patch)
treee4bc7fe1dcdd7e45b90dd80df1a71ae81f09fb7e /kamon-play/src/main/scala/kamon
parent89d3057f8025add4b94b32c142e220ffb79f6c33 (diff)
downloadKamon-2c958ea86ded8a047af6450026ca7ec64a28bea1.tar.gz
Kamon-2c958ea86ded8a047af6450026ca7ec64a28bea1.tar.bz2
Kamon-2c958ea86ded8a047af6450026ca7ec64a28bea1.zip
+ play: external naming for traces and segments, related to #65
Diffstat (limited to 'kamon-play/src/main/scala/kamon')
-rw-r--r--kamon-play/src/main/scala/kamon/play/Play.scala19
-rw-r--r--kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala2
-rw-r--r--kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala6
3 files changed, 23 insertions, 4 deletions
diff --git a/kamon-play/src/main/scala/kamon/play/Play.scala b/kamon-play/src/main/scala/kamon/play/Play.scala
index 7b8777e0..6e2de3c1 100644
--- a/kamon-play/src/main/scala/kamon/play/Play.scala
+++ b/kamon-play/src/main/scala/kamon/play/Play.scala
@@ -21,6 +21,8 @@ import akka.event.Logging
import kamon.Kamon
import kamon.http.HttpServerMetrics
import kamon.metric.Metrics
+import play.api.libs.ws.WSRequest
+import play.api.mvc.RequestHeader
object Play extends ExtensionId[PlayExtension] with ExtensionIdProvider {
override def lookup(): ExtensionId[_ <: Extension] = Play
@@ -35,7 +37,22 @@ class PlayExtension(private val system: ExtendedActorSystem) extends Kamon.Exten
val httpServerMetrics = Kamon(Metrics)(system).register(HttpServerMetrics, HttpServerMetrics.Factory).get
val defaultDispatcher = system.dispatchers.lookup(config.getString("dispatcher"))
- val includeTraceToken: Boolean = config.getBoolean("include-trace-token-header")
+ 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: PlayNameGenerator = system.dynamicAccess.createInstanceFor[PlayNameGenerator](nameGeneratorFQN, Nil).get
+
+ def generateTraceName(requestHeader: RequestHeader): String = nameGenerator.generateTraceName(requestHeader)
+ def generateHttpClientSegmentName(request: WSRequest): String = nameGenerator.generateHttpClientSegmentName(request)
}
+trait PlayNameGenerator {
+ def generateTraceName(requestHeader: RequestHeader): String
+ def generateHttpClientSegmentName(request: WSRequest): String
+}
+
+class DefaultPlayNameGenerator extends PlayNameGenerator {
+ def generateTraceName(requestHeader: RequestHeader): String = requestHeader.method + ": " + requestHeader.uri
+ def generateHttpClientSegmentName(request: WSRequest): String = request.url
+}
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 82a43926..ca95781e 100644
--- a/kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala
+++ b/kamon-play/src/main/scala/kamon/play/instrumentation/RequestInstrumentation.scala
@@ -42,7 +42,7 @@ class RequestInstrumentation {
def beforeRouteRequest(requestHeader: RequestHeader): Unit = {
val system = Akka.system()
val playExtension = Kamon(Play)(system)
- val defaultTraceName: String = s"${requestHeader.method}: ${requestHeader.uri}"
+ val defaultTraceName = playExtension.generateTraceName(requestHeader)
val token = if (playExtension.includeTraceToken) {
requestHeader.headers.toSimpleMap.find(_._1 == playExtension.traceTokenHeaderName).map(_._2)
diff --git a/kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala b/kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala
index c2eafa2b..125db85e 100644
--- a/kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala
+++ b/kamon-play/src/main/scala/kamon/play/instrumentation/WSInstrumentation.scala
@@ -34,8 +34,10 @@ class WSInstrumentation {
@Around("onExecuteRequest(request)")
def aroundExecuteRequest(pjp: ProceedingJoinPoint, request: WSRequest): Any = {
TraceRecorder.withTraceContextAndSystem { (ctx, system) ⇒
- val executor = Kamon(Play)(system).defaultDispatcher
- val segment = ctx.startSegment(request.url, SegmentMetricIdentityLabel.HttpClient)
+ val playExtension = Kamon(Play)(system)
+ val executor = playExtension.defaultDispatcher
+ val segmentName = playExtension.generateHttpClientSegmentName(request)
+ val segment = ctx.startSegment(segmentName, SegmentMetricIdentityLabel.HttpClient)
val response = pjp.proceed().asInstanceOf[Future[WSResponse]]
response.map(result ⇒ segment.finish())(executor)