]> git.xonotic.org Git - xonotic/xonstat.git/commitdiff
Merge branch 'top-servers'
authorAnt Zucaro <azucaro@gmail.com>
Sat, 25 Nov 2017 22:08:05 +0000 (17:08 -0500)
committerAnt Zucaro <azucaro@gmail.com>
Sat, 25 Nov 2017 22:08:05 +0000 (17:08 -0500)
xonstat/models/main.py
xonstat/templates/main_index.mako
xonstat/templates/top_servers_index.mako
xonstat/views/main.py

index 6eec9ac1254665ca06f0282bd93441603cc5d1b3..3eb5e536f951b17eb73bbbb40218a191a92e3977 100644 (file)
@@ -2,6 +2,7 @@
 Models related to the main index page.
 """
 
+import datetime
 from xonstat.util import html_colors
 
 
@@ -38,11 +39,41 @@ class ActiveServer(object):
     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)
index 6641d96aedec7a64b5f1048d5c22fb19785ffecd..321b8e187d0727f063a5dfa49e5ec89fad028d57 100644 (file)
         <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>
index 4adba45451ce9a4216b516fd0f978a172c70c956..e2b6c0e86e9506523201f2611d861e3c30fd6c8e 100644 (file)
@@ -24,7 +24,7 @@
           <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>
@@ -32,7 +32,7 @@
           <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>
index c842a554421565b605d7f0e37f8dfd2c9c4d980d..c002f51e75027ed4c6f817c97e5ccfe2c2e08630 100644 (file)
@@ -123,9 +123,9 @@ def get_top_players_by_time(limit=None, start=None):
 
 
 @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)
 
@@ -187,7 +187,7 @@ def _main_index_data(request):
     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)
@@ -246,7 +246,7 @@ def top_servers_index(request):
     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 = {}