50 lines
1.1 KiB
Scala
50 lines
1.1 KiB
Scala
package lila.relay
|
|
|
|
import org.joda.time.DateTime
|
|
|
|
case class SyncLog(events: Vector[SyncLog.Event]) extends AnyVal {
|
|
|
|
def isOk = events.lastOption.exists(_.isOk)
|
|
|
|
def alwaysFails = events.sizeIs == SyncLog.historySize && events.forall(_.isKo)
|
|
|
|
def justTimedOut = events.lastOption.exists(_.isTimeout)
|
|
|
|
def updatedAt = events.lastOption.map(_.at)
|
|
|
|
def add(event: SyncLog.Event) =
|
|
copy(
|
|
events = {
|
|
if (events.sizeIs > SyncLog.historySize) events drop 1
|
|
else events
|
|
} :+ event
|
|
)
|
|
}
|
|
|
|
object SyncLog {
|
|
|
|
val historySize = 5
|
|
|
|
val empty = SyncLog(Vector.empty)
|
|
|
|
case class Event(
|
|
moves: Int,
|
|
error: Option[String],
|
|
at: DateTime
|
|
) {
|
|
def isOk = error.isEmpty
|
|
def isKo = error.nonEmpty
|
|
def isTimeout = error has SyncResult.Timeout.getMessage
|
|
}
|
|
|
|
def event(moves: Int, e: Option[Exception]) =
|
|
Event(
|
|
moves = moves,
|
|
error = e map {
|
|
case _: java.util.concurrent.TimeoutException => "Request timeout"
|
|
case e: Exception => e.getMessage take 100
|
|
},
|
|
at = DateTime.now
|
|
)
|
|
}
|