use raw ExpireSetMemo for storing online user ids

This commit is contained in:
Thibault Duplessis 2013-05-19 11:27:32 -03:00
parent f3c537a6df
commit 20a4822028
4 changed files with 8 additions and 30 deletions

View file

@ -25,12 +25,12 @@ object Monitor extends LilaController {
Async {
(~get("key", req) match {
case "elo"
lila.user.UserRepo.idsAverageElo(Env.user.usernameMemo.keys) zip
lila.user.UserRepo.idsAverageElo(Env.user.onlineUserIdMemo.keys) zip
lila.game.GameRepo.recentAverageElo(5) map {
case (users, (rated, casual)) List(users, rated, casual) mkString " "
}
case "moves" (env.reporting ? GetNbMoves).mapTo[Int]
case "players" (env.reporting ? GetNbMembers).mapTo[Int] map { "%d %d".format(_, Env.user.usernameMemo.count) }
case "players" (env.reporting ? GetNbMembers).mapTo[Int] map { "%d %d".format(_, Env.user.onlineUserIdMemo.count) }
case _ (env.reporting ? GetStatus).mapTo[String]
}) map { x Ok(x.toString) }
}

View file

@ -118,6 +118,5 @@ object User extends LilaController {
}
}
private val onlineUsers: Fu[List[UserModel]] =
$find byIds env.usernameMemo.keys
private def onlineUsers: Fu[List[UserModel]] = $find byIds env.onlineUserIdMemo.keys
}

View file

@ -1,6 +1,7 @@
package lila.user
import lila.common.PimpedConfig._
import lila.memo.ExpireSetMemo
import chess.EloCalculator
import com.typesafe.config.Config
@ -31,7 +32,7 @@ final class Env(
lazy val eloUpdater = new EloUpdater(floor = EloUpdaterFloor)
lazy val usernameMemo = new UsernameMemo(ttl = OnlineTtl)
lazy val onlineUserIdMemo = new ExpireSetMemo(ttl = OnlineTtl)
val forms = DataForm
@ -39,9 +40,9 @@ final class Env(
def usernameOrAnonymous(id: String): Fu[String] = cached usernameOrAnonymous id
def setOnline(user: User) { usernameMemo put user.id }
def setOnline(user: User) { onlineUserIdMemo put user.id }
def isOnline(userId: String) = usernameMemo get userId
def isOnline(userId: String) = onlineUserIdMemo get userId
def countEnabled = cached.countEnabled
@ -60,7 +61,7 @@ final class Env(
import lila.hub.actorApi.WithUserIds
scheduler.effect(3 seconds, "refresh online user ids") {
socketHub ! WithUserIds(usernameMemo.putAll)
socketHub ! WithUserIds(onlineUserIdMemo.putAll)
}
}

View file

@ -1,22 +0,0 @@
package lila.user
import lila.memo.ExpireSetMemo
import scala.concurrent.duration._
final class UsernameMemo(ttl: Duration) {
private val internal = new ExpireSetMemo(ttl)
private def normalize(name: String) = name.toLowerCase
def get(key: String): Boolean = internal get normalize(key)
def put(key: String) { internal put normalize(key) }
def putAll(keys: Iterable[String]) { internal putAll (keys map normalize) }
def keys = internal.keys
def count = internal.count
}