Skip to content

Instantly share code, notes, and snippets.

@josephpconley
Last active August 29, 2015 13:56
Show Gist options
  • Save josephpconley/9345681 to your computer and use it in GitHub Desktop.
Save josephpconley/9345681 to your computer and use it in GitHub Desktop.
//atomic action to log requests
case class Logged[A](action: Action[A]) extends Action[A] {
def apply(request: Request[A]): Future[SimpleResult] = {
Logger.info("Calling action")
action(request)
}
lazy val parser = action.parser
}
object Logged extends ActionBuilder[Request] {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[SimpleResult]) = block(request)
override def composeAction[A](action: Action[A]) = Logged(action)
}
//atomic action to measure duration of request
case class Measured[A](action: Action[A]) extends Action[A] {
def apply(request: Request[A]): Future[SimpleResult] = {
val start = System.currentTimeMillis()
val result = action(request)
val duration = System.currentTimeMillis() - start
Logger.info(s"Action took $duration ms")
result
}
lazy val parser = action.parser
}
object Measured extends ActionBuilder[Request] {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[SimpleResult]) = block(request)
override def composeAction[A](action: Action[A]) = Measured(action)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment