Skip to content

Commit

Permalink
easier logging of slow futures
Browse files Browse the repository at this point in the history
  • Loading branch information
ornicar committed Dec 21, 2015
1 parent f0a7d0d commit 3ea1b2a
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 8 deletions.
4 changes: 2 additions & 2 deletions modules/common/src/main/Chronometer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ object Chronometer {
case class Lap[A](result: A, millis: Int) {
def tuple = result -> millis

def resultAndLogIfSlow(ms: Int, namespace: => String)(msg: Lap[A] => String): A = {
if (millis > ms) play.api.Logger(namespace).debug(msg(this))
def resultAndLogIfSlow(ms: Int, logger: String)(msg: Lap[A] => String): A = {
if (millis > ms) play.api.Logger(logger).debug(msg(this))
result
}
}
Expand Down
7 changes: 6 additions & 1 deletion modules/common/src/main/PackageObject.scala
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package lila

import scala.concurrent.Future
import scala.concurrent.duration.FiniteDuration
import scala.concurrent.Future

import ornicar.scalalib
import scalaz.{ Monad, Monoid, OptionT, ~> }
Expand Down Expand Up @@ -213,6 +213,11 @@ trait WithPlay { self: PackageObject =>
Future firstCompletedOf Seq(fua,
akka.pattern.after(duration, system.scheduler)(fufail(error)))
}

def logIfSlow(millis: Int, logger: String)(msg: lila.common.Chronometer.Lap[A] => String) =
lila.common.Chronometer.result(fua).map {
_.resultAndLogIfSlow(millis, logger)(msg)
}
}

implicit final class LilaPimpedFutureZero[A: Zero](fua: Fu[A]) {
Expand Down
8 changes: 3 additions & 5 deletions modules/tournament/src/main/arena/PairingSystem.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ object PairingSystem extends AbstractPairingSystem {
def createPairings(
tour: Tournament,
users: WaitingUsers,
ranking: Ranking): Fu[Pairings] = Chronometer.result {
ranking: Ranking): Fu[Pairings] = {
for {
recentPairings <- PairingRepo.recentUidsByTourAndUserIds(tour.id, users.all, Math.min(100, users.size * 4))
nbActiveUsers <- PlayerRepo.countActive(tour.id)
Expand All @@ -35,10 +35,8 @@ object PairingSystem extends AbstractPairingSystem {
UserRepo.firstGetsWhite(prep.user1.some, prep.user2.some) map prep.toPairing
}.sequenceFu
} yield pairings
} map {
_.resultAndLogIfSlow(500, "tourpairing") { lap =>
s"Arena createPairing http://lichess.org/tournament/${tour.id} ${lap.result.size} pairings in ${lap.millis}ms"
}
}.logIfSlow(500, "tourpairing") { lap =>
s"Arena createPairing http://lichess.org/tournament/${tour.id} ${lap.result.size} pairings in ${lap.millis}ms"
}

private def evenOrAll(data: Data, users: WaitingUsers) =
Expand Down

0 comments on commit 3ea1b2a

Please sign in to comment.