mirror of
https://github.com/barronwaffles/dwc_network_server_emulator.git
synced 2026-09-07 18:56:01 -05:00
Cleaned: internal_stats_server.py
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user