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
|
|
|
|
}
|
|
|
|
}
|