Models related to the main index page.
"""
+import datetime
from xonstat.util import html_colors
A record in the "Most Active Servers" list.
"""
- def __init__(self, sort_order=None, server_id=None, server_name=None, games=None):
+ def __init__(self, sort_order=None, server_id=None, server_name=None, play_time=None):
self.sort_order = sort_order
self.server_id = server_id
self.server_name = server_name
- self.games = games
+ self.play_time = play_time
+
+ def play_time_str(self, max_segments=3):
+ if not self.play_time:
+ return "0m"
+
+ days, seconds = divmod(self.play_time.total_seconds(), 60*60*24)
+ hours, seconds = divmod(seconds, 60*60)
+ mins, seconds = divmod(seconds, 60)
+
+ parts = []
+ if days > 0 and len(parts) < max_segments:
+ parts.append("{}d".format(int(days)))
+
+ if hours > 0 and len(parts) < max_segments:
+ if len(parts) > 0:
+ prefix = ", "
+ else:
+ prefix = ""
+
+ parts.append("{}{}h".format(prefix, int(hours)))
+
+ if mins > 0 and len(parts) < max_segments:
+ if len(parts) > 0:
+ prefix = ", "
+ else:
+ prefix = ""
+
+ parts.append("{}{}m".format(prefix, int(mins)))
+
+ return "".join(parts)
def __repr__(self):
return "<ActiveServer({0.sort_order}, {0.server_id})>".format(self)
<tr>
<th class="small-2">#</th>
<th class="small-7">Server</th>
- <th class="small-3">Games</th>
+ <th class="small-3" title="Total accumulated player time on the server">Time</th>
</tr>
</thead>
<tbody>
<tr>
<td>${ts.sort_order}</td>
<td class="no-stretch"><a href="${request.route_url('server_info', id=ts.server_id)}" title="Go to the server info page for ${ts.server_name}">${ts.server_name}</a></td>
- <td>${ts.games}</td>
+ <td>${ts.play_time_str(max_segments=2)}</td>
</tr>
% endfor
</tbody>
<tr>
<th class="small-2">#</th>
<th class="small-7">Server</th>
- <th class="small-3">Games</th>
+ <th class="small-3" title="Total accumulated player time on the server">Time</th>
</tr>
</thead>
<tbody>
<tr>
<td>${ts.sort_order}</td>
<td class="no-stretch"><a href="${request.route_url('server_info', id=ts.server_id)}" title="Go to the server info page for ${ts.server_name}">${ts.server_name}</a></td>
- <td>${ts.games}</td>
+ <td>${ts.play_time_str()}</td>
</tr>
% endfor
</tbody>
@cache_region('hourly_term')
-def get_top_servers_by_games(limit=None, start=None):
+def get_top_servers_by_play_time(limit=None, start=None):
"""
- The top servers by the number of games played during a date range.
+ The top servers by the cumulative amount of time played on them during a given interval.
"""
q = DBSession.query(ActiveServer)
top_players = get_top_players_by_time(10)
# top servers by number of games
- top_servers = get_top_servers_by_games(10)
+ top_servers = get_top_servers_by_play_time(10)
# top maps by total times played
top_maps = get_top_maps_by_games(10)
except:
start = None
- top_servers = get_top_servers_by_games(20, start)
+ top_servers = get_top_servers_by_play_time(20, start)
# building a query string
query = {}