lila/modules/relay/src/main/RelaySync.scala

45 lines
1006 B
Scala
Raw Normal View History

2017-09-19 20:24:59 -06:00
package lila.relay
import akka.actor._
import play.api.libs.ws.WS
import play.api.Play.current
import scala.concurrent.duration._
private final class RelaySync(
api: RelayApi
) extends Actor {
override def preStart {
logger.info("Start RelaySync")
context setReceiveTimeout 15.seconds
scheduleNext
}
case object Tick
def scheduleNext =
2017-09-20 13:25:05 -06:00
context.system.scheduler.scheduleOnce(3 seconds, self, Tick)
2017-09-19 20:24:59 -06:00
def receive = {
case ReceiveTimeout =>
val msg = "RelaySync timed out!"
logger.error(msg)
throw new RuntimeException(msg)
case Tick =>
val startAt = nowMillis
api.currents.map { relay =>
WS.url(relay.url).get().flatMap { res =>
api.sync(relay, res.body)
} recover {
case e: Exception =>
2017-09-20 13:25:05 -06:00
logger.info(s"Can't fetch $relay")
2017-09-19 20:24:59 -06:00
()
}
}.sequenceFu.chronometer
.logIfSlow(3000, logger)(_ => "RelaySync.tick")
.result addEffectAnyway scheduleNext
}
}