use raw ExpireSetMemo for storing online user ids
This commit is contained in:
parent
f3c537a6df
commit
20a4822028
|
@ -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) }
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
Loading…
Reference in a new issue