diff options
author | vlad <vlad@driver.xyz> | 2017-05-19 17:26:33 -0700 |
---|---|---|
committer | vlad <vlad@driver.xyz> | 2017-05-19 17:26:33 -0700 |
commit | ad33ff15ff642b29e21a82c3e8625feb12567aa7 (patch) | |
tree | 44c876b95d22d03c311a7588188f23f740526444 /src/main/scala/xyz/driver/core/rest.scala | |
parent | 6427b9dc1a60b670c70aca05f419e3fc3313cf6a (diff) | |
download | driver-core-ad33ff15ff642b29e21a82c3e8625feb12567aa7.tar.gz driver-core-ad33ff15ff642b29e21a82c3e8625feb12567aa7.tar.bz2 driver-core-ad33ff15ff642b29e21a82c3e8625feb12567aa7.zip |
Http stacktracing using headers to see which hosts this request was passing
Diffstat (limited to 'src/main/scala/xyz/driver/core/rest.scala')
-rw-r--r-- | src/main/scala/xyz/driver/core/rest.scala | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/main/scala/xyz/driver/core/rest.scala b/src/main/scala/xyz/driver/core/rest.scala index f1eab45..7e6c800 100644 --- a/src/main/scala/xyz/driver/core/rest.scala +++ b/src/main/scala/xyz/driver/core/rest.scala @@ -18,6 +18,7 @@ import com.typesafe.config.Config import io.swagger.models.Scheme import xyz.driver.core.auth._ import xyz.driver.core.time.provider.TimeProvider +import org.slf4j.MDC import scala.concurrent.{ExecutionContext, Future} import scala.util.{Failure, Success} @@ -41,9 +42,14 @@ package rest { .fold(java.util.UUID.randomUUID.toString)(_.value()) } + def extractStacktrace(request: HttpRequest): Array[String] = + request.headers.find(_.name == ContextHeaders.StacktraceHeader).fold("")(_.value()).split("->") + def extractContextHeaders(request: HttpRequest): Map[String, String] = { request.headers.filter { h => - h.name === ContextHeaders.AuthenticationTokenHeader || h.name === ContextHeaders.TrackingIdHeader + h.name === ContextHeaders.AuthenticationTokenHeader || + h.name === ContextHeaders.TrackingIdHeader || + h.name === ContextHeaders.StacktraceHeader } map { header => if (header.name === ContextHeaders.AuthenticationTokenHeader) { header.name -> header.value.stripPrefix(ContextHeaders.AuthenticationHeaderPrefix).trim @@ -106,6 +112,7 @@ package rest { val PermissionsTokenHeader = "Permissions" val AuthenticationHeaderPrefix = "Bearer" val TrackingIdHeader = "X-Trace" + val StacktraceHeader = "X-Stacktrace" } object AuthProvider { @@ -265,9 +272,15 @@ package rest { val requestTime = time.currentTime() val request = requestStub - .withHeaders(RawHeader(ContextHeaders.TrackingIdHeader, context.trackingId)) - .withHeaders(context.contextHeaders.toSeq.map { h => - RawHeader(h._1, h._2): HttpHeader + .withHeaders(context.contextHeaders.toSeq.map { + case (ContextHeaders.TrackingIdHeader, headerValue) => + RawHeader(ContextHeaders.TrackingIdHeader, context.trackingId) + case (ContextHeaders.StacktraceHeader, headerValue) => + RawHeader(ContextHeaders.StacktraceHeader, + Option(MDC.get("stack")) + .orElse(context.contextHeaders.get(ContextHeaders.StacktraceHeader)) + .getOrElse("")) + case (header, headerValue) => RawHeader(header, headerValue) }: _*) log.info(s"Sending request to ${request.method} ${request.uri}") |