aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Ferreyra <cferreyra@despegar.com>2013-12-26 14:39:36 -0300
committerCarlos Ferreyra <cferreyra@despegar.com>2013-12-26 14:39:36 -0300
commit5606d35cb9f06ac655ea2abc4f0aa2e53c892b0f (patch)
treebf7370d3290fef942de875d169db392640fb9db2
parentda5f0b89ab1912c84f948872fa54bef761ffe173 (diff)
downloadKamon-5606d35cb9f06ac655ea2abc4f0aa2e53c892b0f.tar.gz
Kamon-5606d35cb9f06ac655ea2abc4f0aa2e53c892b0f.tar.bz2
Kamon-5606d35cb9f06ac655ea2abc4f0aa2e53c892b0f.zip
Added new respondWithUow directive to add the X-UOW header back in the response.
Changed ActorLogging to just propagate the trace context (does not add to the MDC anymore). Created UowConverter to let logback know where the extract the UOW from.
-rw-r--r--kamon-spray/src/main/scala/kamon/spray/UowDirectives.scala4
-rw-r--r--kamon-trace/src/main/scala/kamon/trace/UowTracing.scala10
-rw-r--r--kamon-trace/src/main/scala/kamon/trace/instrumentation/ActorLoggingTracing.scala12
-rw-r--r--project/Build.scala4
4 files changed, 17 insertions, 13 deletions
diff --git a/kamon-spray/src/main/scala/kamon/spray/UowDirectives.scala b/kamon-spray/src/main/scala/kamon/spray/UowDirectives.scala
index b4ff1877..44db55e7 100644
--- a/kamon-spray/src/main/scala/kamon/spray/UowDirectives.scala
+++ b/kamon-spray/src/main/scala/kamon/spray/UowDirectives.scala
@@ -21,6 +21,7 @@ import java.util.concurrent.atomic.AtomicLong
import scala.util.Try
import java.net.InetAddress
import kamon.trace.Trace
+import spray.http.HttpHeaders.RawHeader
trait UowDirectives extends BasicDirectives {
def uow: Directive0 = mapRequest { request ⇒
@@ -30,6 +31,7 @@ trait UowDirectives extends BasicDirectives {
Trace.transformContext(_.copy(uow = generatedUow))
request
}
+ def respondWithUow = mapHttpResponseHeaders(headers ⇒ Trace.context().map(ctx ⇒ RawHeader("X-UOW", ctx.uow) :: headers).getOrElse(headers))
}
object UowDirectives {
@@ -37,4 +39,4 @@ object UowDirectives {
val hostnamePrefix = Try(InetAddress.getLocalHost.getHostName).getOrElse("unknown-localhost")
def newUow = "%s-%s".format(hostnamePrefix, uowCounter.incrementAndGet())
-} \ No newline at end of file
+}
diff --git a/kamon-trace/src/main/scala/kamon/trace/UowTracing.scala b/kamon-trace/src/main/scala/kamon/trace/UowTracing.scala
index 3d1a7778..fcddcf90 100644
--- a/kamon-trace/src/main/scala/kamon/trace/UowTracing.scala
+++ b/kamon-trace/src/main/scala/kamon/trace/UowTracing.scala
@@ -79,4 +79,12 @@ class UowTraceAggregator(reporting: ActorRef, aggregationTimeout: Duration) exte
object UowTraceAggregator {
def props(reporting: ActorRef, aggregationTimeout: Duration) = Props(classOf[UowTraceAggregator], reporting, aggregationTimeout)
-} \ No newline at end of file
+}
+
+package logback {
+ import ch.qos.logback.classic.pattern.ClassicConverter
+ import ch.qos.logback.classic.spi.ILoggingEvent
+ class UowConverter extends ClassicConverter {
+ def convert(event: ILoggingEvent): String = Trace.context().map(_.uow).getOrElse("undefined")
+ }
+}
diff --git a/kamon-trace/src/main/scala/kamon/trace/instrumentation/ActorLoggingTracing.scala b/kamon-trace/src/main/scala/kamon/trace/instrumentation/ActorLoggingTracing.scala
index 783fd6e1..0d06eb2c 100644
--- a/kamon-trace/src/main/scala/kamon/trace/instrumentation/ActorLoggingTracing.scala
+++ b/kamon-trace/src/main/scala/kamon/trace/instrumentation/ActorLoggingTracing.scala
@@ -17,8 +17,7 @@ package kamon.trace.instrumentation
import org.aspectj.lang.annotation.{ Around, Pointcut, DeclareMixin, Aspect }
import org.aspectj.lang.ProceedingJoinPoint
-import org.slf4j.MDC
-import kamon.trace.{ TraceContext, ContextAware, Trace }
+import kamon.trace.{ ContextAware, Trace }
@Aspect
class ActorLoggingTracing {
@@ -31,13 +30,8 @@ class ActorLoggingTracing {
@Around("withMdcInvocation(logSource, logEvent, logStatement)")
def aroundWithMdcInvocation(pjp: ProceedingJoinPoint, logSource: String, logEvent: ContextAware, logStatement: () ⇒ _): Unit = {
- logEvent.traceContext match {
- case Some(ctx) ⇒
- MDC.put("uow", ctx.uow)
- pjp.proceed()
- MDC.remove("uow")
-
- case None ⇒ pjp.proceed()
+ Trace.withContext(logEvent.traceContext) {
+ pjp.proceed()
}
}
}
diff --git a/project/Build.scala b/project/Build.scala
index 3a6d4f13..3faf7adc 100644
--- a/project/Build.scala
+++ b/project/Build.scala
@@ -31,7 +31,7 @@ object Build extends Build {
.settings(aspectJSettings: _*)
.settings(
libraryDependencies ++=
- compile(akkaActor, aspectJ) ++
+ compile(akkaActor, aspectJ, logback) ++
test(scalatest, akkaTestKit, sprayTestkit, akkaSlf4j, logback))
.dependsOn(kamonCore)
@@ -94,4 +94,4 @@ object Build extends Build {
val noPublishing = Seq(publish := (), publishLocal := ())
-} \ No newline at end of file
+}