diff --git a/internal_stats_server.py b/internal_stats_server.py
index 27b991f..88f48d8 100644
--- a/internal_stats_server.py
+++ b/internal_stats_server.py
@@ -32,32 +32,56 @@ logger_output_to_console = True
logger_output_to_file = True
logger_name = "InternalStatsServer"
logger_filename = "internal_stats_server.log"
-logger = utils.create_logger(logger_name, logger_filename, -1, logger_output_to_console, logger_output_to_file)
+logger = utils.create_logger(logger_name, logger_filename, -1,
+ logger_output_to_console, logger_output_to_file)
+
class GameSpyServerDatabase(BaseManager):
pass
GameSpyServerDatabase.register("get_server_list")
+
class StatsPage(resource.Resource):
+ """Servers statistics webpage.
+
+ Format attributes:
+ - header
+ - row
+ - footer
+ """
isLeaf = True
+ header = """
+
+
+ | Game ID | # Players |
+
"""
+ row = """
+
+ | %s |
+ %d |
+
""" # % (game, len(server_list[game]))
+ footer = """
+
+ Last updated: %s
+ """ # % (self.stats.get_last_update_time())
def __init__(self, stats):
self.stats = stats
def render_GET(self, request):
- raw = False
- force_update = False
-
- if '/'.join(request.postpath) == "json":
+ if "/".join(request.postpath) == "json":
raw = True
force_update = True
+ else:
+ raw = False
+ force_update = False
server_list = self.stats.get_server_list(force_update)
- if raw == True:
+ if raw:
# List of keys to be removed
- restricted = [ "publicip", "__session__", "localip0", "localip1" ]
+ restricted = ["publicip", "__session__", "localip0", "localip1"]
# Filter out certain fields before displaying raw data
if server_list is not None:
@@ -70,57 +94,52 @@ class StatsPage(resource.Resource):
output = json.dumps(server_list)
else:
- output = ""
- output += ""
- output += ""
- output += "| Game ID | # Players | "
- output += "
"
-
+ output = self.header
if server_list is not None:
- for game in server_list:
- if not server_list[game]:
- continue
-
- output += ""
- output += "| " + game + " | "
- output += "%d | " % (len(server_list[game]))
- output += "
"
-
- output += "
"
-
- output += "
"
- output += "Last updated: %s
" % (self.stats.get_last_update_time())
- output += ""
+ output += "".join(self.row % (game, len(server_list[game]))
+ for game in server_list
+ if not server_list[game])
+ output += self.footer % (self.stats.get_last_update_time())
return output
+
class InternalStatsServer(object):
+ """Internal Statistics server.
+
+ Running on port 9001 by default: http://127.0.0.1:9001/
+ Can be displayed in json format: http://127.0.0.1:9001/json"""
+
def __init__(self):
self.last_update = 0
self.next_update = 0
self.server_list = None
- self.seconds_per_update = 60 # The number of seconds to wait before updating the server list
+ # The number of seconds to wait before updating the server list
+ self.seconds_per_update = 60
def start(self):
manager_address = ("127.0.0.1", 27500)
manager_password = ""
- self.server_manager = GameSpyServerDatabase(address = manager_address, authkey= manager_password)
+ self.server_manager = GameSpyServerDatabase(address=manager_address,
+ authkey=manager_password)
self.server_manager.connect()
site = server.Site(StatsPage(self))
reactor.listenTCP(9001, site)
try:
- if reactor.running is False:
+ if not reactor.running:
reactor.run(installSignalHandlers=0)
except ReactorAlreadyRunning:
pass
- def get_server_list(self, force_update = False):
- if force_update == True or self.next_update == 0 or self.next_update - time.time() <= 0:
+ def get_server_list(self, force_update=False):
+ if force_update or self.next_update == 0 or \
+ self.next_update - time.time() <= 0:
self.last_update = time.time()
self.next_update = time.time() + self.seconds_per_update
- self.server_list = self.server_manager.get_server_list()._getvalue()
+ self.server_list = self.server_manager.get_server_list() \
+ ._getvalue()
logger.log(logging.DEBUG, self.server_list)
@@ -129,6 +148,7 @@ class InternalStatsServer(object):
def get_last_update_time(self):
return str(datetime.datetime.fromtimestamp(self.last_update))
+
if __name__ == "__main__":
stats = InternalStatsServer()
stats.start()