From cad3fd0518fbc08d179d4f86ad0f102bdcbf68a8 Mon Sep 17 00:00:00 2001 From: payet_s Date: Sat, 1 Aug 2015 13:51:03 +0200 Subject: [PATCH] Cleaned: internal_stats_server.py --- internal_stats_server.py | 86 +++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 33 deletions(-) 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 = """ + + + + """ + row = """ + + + + """ # % (game, len(server_list[game])) + footer = """
Game ID# Players
%s
%d
+
+ 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 += "" - output += "" - + output = self.header if server_list is not None: - for game in server_list: - if not server_list[game]: - continue - - output += "" - output += "" - output += "" % (len(server_list[game])) - output += "" - - output += "
Game ID# Players
" + game + "
%d
" - - 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()