diff options
Diffstat (limited to 'src/main/scala')
-rw-r--r-- | src/main/scala/xyz/driver/core/app.scala | 11 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/database/Dal.scala | 7 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/main/scala/xyz/driver/core/app.scala b/src/main/scala/xyz/driver/core/app.scala index f7731e3..e35c300 100644 --- a/src/main/scala/xyz/driver/core/app.scala +++ b/src/main/scala/xyz/driver/core/app.scala @@ -26,6 +26,8 @@ import xyz.driver.core.time.provider.{SystemTimeProvider, TimeProvider} import scala.compat.Platform.ConcurrentModificationException import scala.concurrent.duration._ import scala.concurrent.{Await, ExecutionContext, Future} +import scalaz.Scalaz.stringInstance +import scalaz.syntax.equal._ object app { @@ -59,6 +61,9 @@ object app { } } + private def extractHeader(request: HttpRequest)(headerName: String): Option[String] = + request.headers.find(_.name().toLowerCase === headerName).map(_.value()) + protected def bindHttp(modules: Seq[Module]): Unit = { val serviceTypes = modules.flatMap(_.routeTypes) val swaggerService = new Swagger(baseUrl, Scheme.forValue(scheme), version, actorSystem, serviceTypes, config) @@ -74,6 +79,12 @@ object app { 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")) def requestLogging: Future[Unit] = Future { diff --git a/src/main/scala/xyz/driver/core/database/Dal.scala b/src/main/scala/xyz/driver/core/database/Dal.scala index 55766db..ed72d3b 100644 --- a/src/main/scala/xyz/driver/core/database/Dal.scala +++ b/src/main/scala/xyz/driver/core/database/Dal.scala @@ -31,12 +31,17 @@ class FutureDal(executionContext: ExecutionContext) extends Dal { class SlickDal(database: Database, executionContext: ExecutionContext) extends Dal { import database.profile.api._ implicit val exec = executionContext + override type T[D] = slick.dbio.DBIO[D] - implicit protected class QueryOps[+E, U](query: Query[E, U, Seq]) { + implicit protected class QueryOps[U](query: Query[_, U, Seq]) { def resultT: ListT[T, U] = ListT[T, U](query.result.map(_.toList)) } + implicit protected class CompiledQueryOps[U](compiledQuery: slick.lifted.RunnableCompiled[_, Seq[U]]) { + def resultT: ListT[T, U] = ListT.listT[T](compiledQuery.result.map(_.toList)) + } + override implicit val monadT: Monad[T] = new Monad[T] { override def point[A](a: => A): T[A] = DBIO.successful(a) override def bind[A, B](fa: T[A])(f: A => T[B]): T[B] = fa.flatMap(f) |