aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/app.scala
diff options
context:
space:
mode:
authorVlad Uspensky <v.uspenskiy@icloud.com>2017-05-25 17:23:12 -0700
committerGitHub <noreply@github.com>2017-05-25 17:23:12 -0700
commitec4848d56ac89d55cf7c38f075f028f219a5ffc9 (patch)
tree9f9c765cdcd31178f1ea0d983bb563b0d68c45e8 /src/main/scala/xyz/driver/core/app.scala
parent0a3438068e4b853e4c42f83a4eb304ae53382e51 (diff)
parent3dfb989d221d0f121404adaac0d970228fa180a5 (diff)
downloaddriver-core-ec4848d56ac89d55cf7c38f075f028f219a5ffc9.tar.gz
driver-core-ec4848d56ac89d55cf7c38f075f028f219a5ffc9.tar.bz2
driver-core-ec4848d56ac89d55cf7c38f075f028f219a5ffc9.zip
Merge pull request #39 from drivergroup/http-stacktrace
Http stacktracing using headers to see which hosts this request was passing
Diffstat (limited to 'src/main/scala/xyz/driver/core/app.scala')
-rw-r--r--src/main/scala/xyz/driver/core/app.scala35
1 files changed, 25 insertions, 10 deletions
diff --git a/src/main/scala/xyz/driver/core/app.scala b/src/main/scala/xyz/driver/core/app.scala
index e66fe73..dd44295 100644
--- a/src/main/scala/xyz/driver/core/app.scala
+++ b/src/main/scala/xyz/driver/core/app.scala
@@ -35,7 +35,8 @@ import scalaz.syntax.equal._
object app {
- class DriverApp(version: String,
+ class DriverApp(appName: String,
+ version: String,
gitHash: String,
modules: Seq[Module],
time: TimeProvider = new SystemTimeProvider(),
@@ -82,14 +83,11 @@ object app {
{ ctx =>
val trackingId = rest.extractTrackingId(ctx.request)
MDC.put("trackingId", trackingId)
- MDC.put("origin", origin)
- MDC.put("xForwardedFor",
- extractHeader(ctx.request)("x-forwarded-for")
- .orElse(extractHeader(ctx.request)("x_forwarded_for"))
- .getOrElse("unknown"))
- MDC.put("remoteAddress", extractHeader(ctx.request)("remote-address").getOrElse("unknown"))
- MDC.put("userAgent", extractHeader(ctx.request)("user-agent").getOrElse("unknown"))
- MDC.put("ip", ip.toOption.map(_.getHostAddress).getOrElse("unknown"))
+
+ val updatedStacktrace = (rest.extractStacktrace(ctx.request) ++ Array(appName)).mkString("->")
+ MDC.put("stack", updatedStacktrace)
+
+ storeRequestContextToMdc(ctx.request, origin, ip)
def requestLogging: Future[Unit] = Future {
log.info(
@@ -97,7 +95,10 @@ object app {
}
val contextWithTrackingId =
- ctx.withRequest(ctx.request.addHeader(RawHeader(ContextHeaders.TrackingIdHeader, trackingId)))
+ ctx.withRequest(
+ ctx.request
+ .addHeader(RawHeader(ContextHeaders.TrackingIdHeader, trackingId))
+ .addHeader(RawHeader(ContextHeaders.StacktraceHeader, updatedStacktrace)))
handleExceptions(ExceptionHandler(exceptionHandler))({ c =>
requestLogging.flatMap { _ =>
@@ -115,6 +116,20 @@ object app {
}
}
+ private def storeRequestContextToMdc(request: HttpRequest, origin: String, ip: RemoteAddress) = {
+
+ MDC.put("origin", origin)
+ MDC.put("ip", ip.toOption.map(_.getHostAddress).getOrElse("unknown"))
+ MDC.put("remoteHost", ip.toOption.map(_.getHostName).getOrElse("unknown"))
+
+ MDC.put("xForwardedFor",
+ extractHeader(request)("x-forwarded-for")
+ .orElse(extractHeader(request)("x_forwarded_for"))
+ .getOrElse("unknown"))
+ MDC.put("remoteAddress", extractHeader(request)("remote-address").getOrElse("unknown"))
+ MDC.put("userAgent", extractHeader(request)("user-agent").getOrElse("unknown"))
+ }
+
protected def swaggerOverride(apiTypes: Seq[Type]) = {
new Swagger(baseUrl, Scheme.forValue(scheme), version, actorSystem, apiTypes, config) {
override def generateSwaggerJson: String = {