aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/scala/xyz/driver/core/app.scala42
-rw-r--r--src/main/scala/xyz/driver/core/execution.scala10
-rw-r--r--src/main/scala/xyz/driver/core/rest.scala3
3 files changed, 32 insertions, 23 deletions
diff --git a/src/main/scala/xyz/driver/core/app.scala b/src/main/scala/xyz/driver/core/app.scala
index 4b81897..361fb74 100644
--- a/src/main/scala/xyz/driver/core/app.scala
+++ b/src/main/scala/xyz/driver/core/app.scala
@@ -67,24 +67,32 @@ object app {
val versionRt = versionRoute(version, gitHash, time.currentTime())
val _ = Future {
- http.bindAndHandle(route2HandlerFlow({ ctx =>
- val trackingId = rest.extractTrackingId(ctx.request)
- MDC.put("trackingId", trackingId)
-
- def requestLogging: Future[Unit] = Future {
- log.audit(s"""Received request {"method":"${ctx.request.method.value}","url": "${ctx.request.uri}"}""")
+ http.bindAndHandle(route2HandlerFlow(extractHost { origin =>
+ extractClientIP {
+ ip =>
+ { ctx =>
+ val trackingId = rest.extractTrackingId(ctx.request)
+ MDC.put("trackingId", trackingId)
+ MDC.put("origin", origin)
+ MDC.put("ip", ip.toOption.map(_.getHostAddress).getOrElse("unknown"))
+
+ def requestLogging: Future[Unit] = Future {
+ log.audit(
+ s"""Received request {"method":"${ctx.request.method.value}","url": "${ctx.request.uri}"}""")
+ }
+
+ val contextWithTrackingId =
+ ctx.withRequest(ctx.request.addHeader(RawHeader(ContextHeaders.TrackingIdHeader, trackingId)))
+
+ handleExceptions(ExceptionHandler(exceptionHandler))({ c =>
+ requestLogging.flatMap { _ =>
+ respondWithHeaders(List(RawHeader(ContextHeaders.TrackingIdHeader, trackingId))) {
+ modules.map(_.route).foldLeft(versionRt ~ healthRoute ~ swaggerRoutes)(_ ~ _)
+ }(c)
+ }
+ })(contextWithTrackingId)
+ }
}
-
- val contextWithTrackingId =
- ctx.withRequest(ctx.request.addHeader(RawHeader(ContextHeaders.TrackingIdHeader, trackingId)))
-
- handleExceptions(ExceptionHandler(exceptionHandler))({ c =>
- requestLogging.flatMap { _ =>
- respondWithHeaders(List(RawHeader(ContextHeaders.TrackingIdHeader, trackingId))) {
- modules.map(_.route).foldLeft(versionRt ~ healthRoute ~ swaggerRoutes)(_ ~ _)
- }(c)
- }
- })(contextWithTrackingId)
}), interface, port)(materializer)
}
}
diff --git a/src/main/scala/xyz/driver/core/execution.scala b/src/main/scala/xyz/driver/core/execution.scala
index f27b905..0cf92fd 100644
--- a/src/main/scala/xyz/driver/core/execution.scala
+++ b/src/main/scala/xyz/driver/core/execution.scala
@@ -26,13 +26,13 @@ object execution {
andEffect(effect.run)
}
- def illegalState[T](message: String) =
- failure(new IllegalStateException(message))
+ def illegalState[T](message: String): OptionT[Future, T] =
+ failure[T](new IllegalStateException(message))
- def illegalArgument[T](message: String) =
- failure(new IllegalArgumentException(message))
+ def illegalArgument[T](message: String): OptionT[Future, T] =
+ failure[T](new IllegalArgumentException(message))
- def failure[T](throwable: Throwable) =
+ def failure[T](throwable: Throwable): OptionT[Future, T] =
OptionT.optionT(Future.failed[Option[T]](throwable))
def collectOrNone[T, R](value: T)(f: PartialFunction[T, OptionT[Future, R]]): OptionT[Future, R] =
diff --git a/src/main/scala/xyz/driver/core/rest.scala b/src/main/scala/xyz/driver/core/rest.scala
index 39f2cab..dc18375 100644
--- a/src/main/scala/xyz/driver/core/rest.scala
+++ b/src/main/scala/xyz/driver/core/rest.scala
@@ -281,7 +281,8 @@ package rest {
case Failure(t: Throwable) =>
val responseTime = time.currentTime()
- log.error(s"Failed to receive response to ${request.method} ${request.uri}", t)
+ log.audit(s"Failed to receive response from ${request.method} ${request.uri}", t)
+ log.error(s"Failed to receive response from ${request.method} ${request.uri}", t)
stats.recordStats(Seq("request", request.uri.toString, "fail"), TimeRange(requestTime, responseTime), 1)
}(executionContext)