return ranks
+
+@cache_region('hourly_term')
+def top_players_by_time(cutoff_days):
+ """
+ The top players by the amount of time played during a date range.
+
+ Games older than cutoff_days days old are ignored.
+ """
+ # how many to retrieve
+ count = 10
+
+ # only games played during this range are considered
+ right_now = datetime.utcnow()
+ cutoff_dt = right_now - timedelta(days=cutoff_days)
+
+ top_players = DBSession.query(Player.player_id, Player.nick,
+ func.sum(PlayerGameStat.alivetime)).\
+ filter(Player.player_id == PlayerGameStat.player_id).\
+ filter(Player.player_id > 2).\
+ filter(expr.between(PlayerGameStat.create_dt, cutoff_dt, right_now)).\
+ order_by(expr.desc(func.sum(PlayerGameStat.alivetime))).\
+ group_by(Player.nick).\
+ group_by(Player.player_id).limit(count).all()
+
+ top_players = [(player_id, html_colors(nick), score) \
+ for (player_id, nick, score) in top_players]
+
+ return top_players
+
+
+@cache_region('hourly_term')
+def top_servers_by_players(cutoff_days):
+ """
+ The top servers by the amount of players active during a date range.
+
+ Games older than cutoff_days days old are ignored.
+ """
+ # how many to retrieve
+ count = 10
+
+ # only games played during this range are considered
+ right_now = datetime.utcnow()
+ cutoff_dt = right_now - timedelta(days=cutoff_days)
+
+ top_servers = DBSession.query(Server.server_id, Server.name,
+ func.count()).\
+ filter(Game.server_id==Server.server_id).\
+ filter(expr.between(Game.create_dt, cutoff_dt, right_now)).\
+ order_by(expr.desc(func.count(Game.game_id))).\
+ group_by(Server.server_id).\
+ group_by(Server.name).limit(count).all()
+
+ return top_servers
+
+
+@cache_region('hourly_term')
+def top_maps_by_times_played(cutoff_days):
+ """
+ The top maps by the amount of times it was played during a date range.
+
+ Games older than cutoff_days days old are ignored.
+ """
+ # how many to retrieve
+ count = 10
+
+ # only games played during this range are considered
+ right_now = datetime.utcnow()
+ cutoff_dt = right_now - timedelta(days=cutoff_days)
+
+ top_maps = DBSession.query(Game.map_id, Map.name,
+ func.count()).\
+ filter(Map.map_id==Game.map_id).\
+ filter(expr.between(Game.create_dt, cutoff_dt, right_now)).\
+ order_by(expr.desc(func.count())).\
+ group_by(Game.map_id).\
+ group_by(Map.name).limit(count).all()
+
+ return top_maps
+
+
def _main_index_data(request):
try:
leaderboard_lifetime = int(
back_then = datetime.utcnow() - timedelta(days=leaderboard_lifetime)
# top players by playing time
- top_players = DBSession.query(Player.player_id, Player.nick,
- func.sum(PlayerGameStat.alivetime)).\
- filter(Player.player_id == PlayerGameStat.player_id).\
- filter(Player.player_id > 2).\
- filter(expr.between(PlayerGameStat.create_dt, back_then, right_now)).\
- order_by(expr.desc(func.sum(PlayerGameStat.alivetime))).\
- group_by(Player.nick).\
- group_by(Player.player_id).limit(leaderboard_count).all()
-
- top_players = [(player_id, html_colors(nick), score) \
- for (player_id, nick, score) in top_players]
+ top_players = top_players_by_time(leaderboard_lifetime)
# top servers by number of total players played
- top_servers = DBSession.query(Server.server_id, Server.name,
- func.count()).\
- filter(Game.server_id==Server.server_id).\
- filter(expr.between(Game.create_dt, back_then, right_now)).\
- order_by(expr.desc(func.count(Game.game_id))).\
- group_by(Server.server_id).\
- group_by(Server.name).limit(leaderboard_count).all()
+ top_servers = top_servers_by_players(leaderboard_lifetime)
# top maps by total times played
- top_maps = DBSession.query(Game.map_id, Map.name,
- func.count()).\
- filter(Map.map_id==Game.map_id).\
- filter(expr.between(Game.create_dt, back_then, right_now)).\
- order_by(expr.desc(func.count())).\
- group_by(Game.map_id).\
- group_by(Map.name).limit(leaderboard_count).all()
+ top_maps = top_maps_by_times_played(leaderboard_lifetime)
# recent games played in descending order
rgs = recent_games_q(cutoff=back_then).limit(recent_games_count).all()