aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/app.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/core/app.scala')
-rw-r--r--src/main/scala/xyz/driver/core/app.scala50
1 files changed, 29 insertions, 21 deletions
diff --git a/src/main/scala/xyz/driver/core/app.scala b/src/main/scala/xyz/driver/core/app.scala
index 4966b9d..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)
}
}
@@ -99,26 +107,26 @@ object app {
case is: IllegalStateException =>
ctx =>
MDC.put("trackingId", rest.extractTrackingId(ctx.request))
- log.error(s"Request is not allowed to ${ctx.request.uri}", is)
+ log.error(s"Request is not allowed to ${ctx.request.method} ${ctx.request.uri}", is)
complete(HttpResponse(BadRequest, entity = is.getMessage))(ctx)
case cm: ConcurrentModificationException =>
ctx =>
MDC.put("trackingId", rest.extractTrackingId(ctx.request))
- log.error(s"Concurrent modification of the resource ${ctx.request.uri}", cm)
+ log.error(s"Concurrent modification of the resource ${ctx.request.method} ${ctx.request.uri}", cm)
complete(
HttpResponse(Conflict, entity = "Resource was changed concurrently, try requesting a newer version"))(ctx)
case sex: SQLException =>
ctx =>
MDC.put("trackingId", rest.extractTrackingId(ctx.request))
- log.error(s"Database exception for the resource ${ctx.request.uri}", sex)
+ log.error(s"Database exception for the resource ${ctx.request.method} ${ctx.request.uri}", sex)
complete(HttpResponse(InternalServerError, entity = "Data access error"))(ctx)
case t: Throwable =>
ctx =>
MDC.put("trackingId", rest.extractTrackingId(ctx.request))
- log.error(s"Request to ${ctx.request.uri} could not be handled normally", t)
+ log.error(s"Request to ${ctx.request.method} ${ctx.request.uri} could not be handled normally", t)
complete(HttpResponse(InternalServerError, entity = t.getMessage))(ctx)
}