From 110998180073733a814ff0dd627e2db339c03e3d Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Tue, 4 Jun 2013 16:27:07 +0200 Subject: [PATCH] improve ai server --- app/Env.scala | 42 ++++++++++++++------------- app/controllers/Ai.scala | 16 +++++----- app/controllers/RequestGetter.scala | 6 ---- bin/prod/ubuntu/lila.conf | 16 ++++------ conf/application.conf.ai_dist | 14 ++++----- modules/common/src/main/PlayApp.scala | 2 +- modules/user/src/main/Ranking.scala | 2 +- todo | 2 -- 8 files changed, 42 insertions(+), 58 deletions(-) diff --git a/app/Env.scala b/app/Env.scala index c3b49496c8..34edb044d4 100644 --- a/app/Env.scala +++ b/app/Env.scala @@ -4,9 +4,9 @@ import akka.actor._ import com.typesafe.config.Config final class Env( - config: Config, - system: ActorSystem, - appPath: String) { + config: Config, + system: ActorSystem, + appPath: String) { val CliUsername = config getString "cli.username" @@ -40,23 +40,25 @@ final class Env( domain = Env.api.Net.Domain )), name = RouterName) - loginfo("[boot] Preloading modules") - (Env.site, - Env.tournament, - Env.lobby, - Env.game, - Env.ai, - Env.setup, - Env.round, - Env.team, - Env.message, - Env.socket, - Env.timeline, - Env.gameSearch, - Env.teamSearch, - Env.forumSearch, - Env.relation) - loginfo("[boot] Preloading complete") + if (!Env.ai.isServer) { + loginfo("[boot] Preloading modules") + (Env.site, + Env.tournament, + Env.lobby, + Env.game, + Env.ai, + Env.setup, + Env.round, + Env.team, + Env.message, + Env.socket, + Env.timeline, + Env.gameSearch, + Env.teamSearch, + Env.forumSearch, + Env.relation) + loginfo("[boot] Preloading complete") + } if (Env.ai.isServer) println("Running as AI server") } diff --git a/app/controllers/Ai.scala b/app/controllers/Ai.scala index e0de2f57d6..52a9fa70ec 100644 --- a/app/controllers/Ai.scala +++ b/app/controllers/Ai.scala @@ -10,12 +10,12 @@ object Ai extends LilaController { private def stockfishServer = Env.ai.stockfishServer private def isServer = Env.ai.isServer - def playStockfish = Open { implicit ctx ⇒ + def playStockfish = Action { req ⇒ IfServer { stockfishServer.play( - pgn = getOr("pgn", ""), - initialFen = get("initialFen"), - level = getIntOr("level", 1) + pgn = ~get("pgn", req), + initialFen = get("initialFen", req), + level = getInt("level", req) | 1 ) fold ( err ⇒ { logwarn("[ai] stochfish server play: " + err) @@ -26,11 +26,11 @@ object Ai extends LilaController { } } - def analyseStockfish = Open { implicit ctx ⇒ + def analyseStockfish = Action { req ⇒ IfServer { stockfishServer.analyse( - pgn = getOr("pgn", ""), - initialFen = get("initialFen") + pgn = ~get("pgn", req), + initialFen = get("initialFen", req) ) fold ( err ⇒ { logwarn("[ai] stochfish server analyse: " + err) @@ -42,5 +42,5 @@ object Ai extends LilaController { } private def IfServer(result: ⇒ Fu[Result]) = - isServer.fold(result, BadRequest("Not an AI server").fuccess) + isServer.fold(Async(result), BadRequest("Not an AI server")) } diff --git a/app/controllers/RequestGetter.scala b/app/controllers/RequestGetter.scala index 49498f60dd..bb784f4764 100644 --- a/app/controllers/RequestGetter.scala +++ b/app/controllers/RequestGetter.scala @@ -17,10 +17,4 @@ trait RequestGetter { protected def getInt(name: String, req: RequestHeader): Option[Int] = req.queryString get name flatMap (_.headOption) flatMap parseIntOption - - protected def getOr(name: String, default: String)(implicit ctx: Context) = - get(name)(ctx) getOrElse default - - protected def getIntOr(name: String, default: Int)(implicit ctx: Context) = - getInt(name)(ctx) getOrElse default } diff --git a/bin/prod/ubuntu/lila.conf b/bin/prod/ubuntu/lila.conf index 6c69f29fb6..8618f6ebf3 100644 --- a/bin/prod/ubuntu/lila.conf +++ b/bin/prod/ubuntu/lila.conf @@ -1,19 +1,13 @@ -# /etc/init/lila.conf -# -# Assumes lila is deployed to /home/lila -# -# Start lila: service lila start -# Stop lila: service lila stop -# Restart lila: service lila restart +# /etc/init/lila limit nofile 65536 65536 kill timeout 3 # wait between SIGTERM and SIGKILL. pre-start script - rm -f /home/lila/RUNNING_PID - mkdir -p /home/lila/logs - chown -R lila:users /home/lila/logs + rm -f /home/lila4/RUNNING_PID + mkdir -p /home/lila4/logs + chown -R lila:users /home/lila4/logs end script start on runlevel [2345] @@ -21,4 +15,4 @@ stop on runlevel [06] respawn -exec su -s /bin/sh -c 'exec "$0" "$@"' lila -- /home/lila/start -Dfile.encoding=UTF8 -Xms512M -Xmx8192M -Xss4M -XX:MaxPermSize=4096M > /home/lila/logs/output.log +exec su -s /bin/sh -c 'exec "$0" "$@"' lila -- /home/lila4/target/start -Dconfig.file=/home/lila4/application.conf -Dhttp.port=9004 -Dfile.encoding=UTF8 -Xms512M -Xmx8192M -Xss4M -XX:MaxPermSize=4096M > /home/lila4/logs/output.log diff --git a/conf/application.conf.ai_dist b/conf/application.conf.ai_dist index 77c4d5c582..a5f28084cd 100644 --- a/conf/application.conf.ai_dist +++ b/conf/application.conf.ai_dist @@ -1,18 +1,14 @@ include "base" +mongodb { + servers = [] +} ai { server = true client = false stockfish { hash_size = 8192 - analyse { - movetime = 500 - } - play { - movetime = 400 - } + analyse.movetime = 500 + play.movetime = 400 } } -app { - scheduler.enabled = false -} diff --git a/modules/common/src/main/PlayApp.scala b/modules/common/src/main/PlayApp.scala index 12e0a5cdd6..c0ada07e4e 100644 --- a/modules/common/src/main/PlayApp.scala +++ b/modules/common/src/main/PlayApp.scala @@ -16,7 +16,7 @@ object PlayApp { play.api.libs.concurrent.Akka.system } - private def enableScheduler = loadConfig getBoolean "app.scheduler.enabled" + private def enableScheduler = !(loadConfig getBoolean "app.scheduler.disabled") def scheduler = new Scheduler(system, enabled = enableScheduler && isServer) diff --git a/modules/user/src/main/Ranking.scala b/modules/user/src/main/Ranking.scala index 472771041c..6fbc3f93e1 100644 --- a/modules/user/src/main/Ranking.scala +++ b/modules/user/src/main/Ranking.scala @@ -20,5 +20,5 @@ final class Ranking(ttl: Duration) { UserRepo.enabledQuery ++ Json.obj("elo" -> $gt(User.STARTING_ELO)), "_id", _ sort UserRepo.sortEloDesc - )(_.asOpt[String]) map { _.pp.zipWithIndex.toMap } + )(_.asOpt[String]) map { _.zipWithIndex.toMap } } diff --git a/todo b/todo index 5be0bb4188..e4b45f2088 100644 --- a/todo +++ b/todo @@ -56,9 +56,7 @@ show teams in user mini badges for top players in ELO and number of games the forum search user:mephostophilis returns no result check team average elo http://en.lichess.org/inbox/benuegti#bottom -if game ends during move -> bug challenge friends -computer players ranks once a day players world map ---