Cleaned: internal_stats_server.py

This commit is contained in:
payet_s
2015-08-01 13:51:03 +02:00
committed by Sepalani
parent 2ba6518669
commit cad3fd0518

View File

@@ -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 = """<html>
<table border='1'>
<tr>
<td>Game ID</td><td># Players</td>
</tr>"""
row = """
<tr>
<td>%s</td>
<td><center>%d</center></td>
</tr>""" # % (game, len(server_list[game]))
footer = """</table>
<br>
<i>Last updated: %s</i><br>
</html>""" # % (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 = "<html>"
output += "<table border='1'>"
output += "<tr>"
output += "<td>Game ID</td><td># Players</td>"
output += "</tr>"
output = self.header
if server_list is not None:
for game in server_list:
if not server_list[game]:
continue
output += "<tr>"
output += "<td>" + game + "</td>"
output += "<td><center>%d</center></td>" % (len(server_list[game]))
output += "</tr>"
output += "</table>"
output += "<br>"
output += "<i>Last updated: %s</i><br>" % (self.stats.get_last_update_time())
output += "</html>"
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()