-def _server_info_data(request):
- server_id = request.matchdict['id']
-
- try:
- leaderboard_lifetime = int(
- request.registry.settings['xonstat.leaderboard_lifetime'])
- except:
- leaderboard_lifetime = 30
-
- leaderboard_count = 10
- recent_games_count = 20
-
- try:
- server = DBSession.query(Server).filter_by(server_id=server_id).one()
-
- # 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(Game.server_id==server.server_id).\
- filter(Game.create_dt >
- (datetime.utcnow() - timedelta(days=leaderboard_lifetime))).\
- order_by(expr.desc(func.count())).\
- group_by(Game.map_id).\
- group_by(Map.name).all()[0:leaderboard_count]
-
- # top players by score
- top_scorers = DBSession.query(Player.player_id, Player.nick,
- func.sum(PlayerGameStat.score)).\
- filter(Player.player_id == PlayerGameStat.player_id).\
- filter(Game.game_id == PlayerGameStat.game_id).\
- filter(Game.server_id == server.server_id).\
- filter(Player.player_id > 2).\
- filter(PlayerGameStat.create_dt >
- (datetime.utcnow() - timedelta(days=leaderboard_lifetime))).\
- order_by(expr.desc(func.sum(PlayerGameStat.score))).\
- group_by(Player.nick).\
- group_by(Player.player_id).all()[0:leaderboard_count]
-
- top_scorers = [(player_id, html_colors(nick), score) \
- for (player_id, nick, score) in top_scorers]
-
- # 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(Game.game_id == PlayerGameStat.game_id).\
- filter(Game.server_id == server.server_id).\
- filter(Player.player_id > 2).\
- filter(PlayerGameStat.create_dt >
- (datetime.utcnow() - timedelta(days=leaderboard_lifetime))).\
- order_by(expr.desc(func.sum(PlayerGameStat.alivetime))).\
- group_by(Player.nick).\
- group_by(Player.player_id).all()[0:leaderboard_count]
-
- top_players = [(player_id, html_colors(nick), score) \
- for (player_id, nick, score) in top_players]
-
- # recent games played in descending order
- rgs = recent_games_q(server_id=server_id).limit(recent_games_count).all()
- recent_games = [RecentGame(row) for row in rgs]
-
- except Exception as e:
- server = None
- recent_games = None
- top_players = None
- raise e
- return {'server':server,
- 'recent_games':recent_games,
- 'top_players': top_players,
- 'top_scorers': top_scorers,
- 'top_maps': top_maps,
- }