From 04e5530aa1e4a40383c06bfda36fb1701ed9e0ff Mon Sep 17 00:00:00 2001 From: Ant Zucaro Date: Sun, 30 Oct 2011 20:43:29 -0400 Subject: [PATCH] Fix issue where servers on the same host resolve to the only one server (the one who registered first under that hash key). --- xonstat/models.py | 15 +++------------ xonstat/views/submission.py | 30 ++++++++++++++---------------- 2 files changed, 17 insertions(+), 28 deletions(-) diff --git a/xonstat/models.py b/xonstat/models.py index 34d3862..4116b81 100755 --- a/xonstat/models.py +++ b/xonstat/models.py @@ -40,8 +40,10 @@ class Weapon(object): class Server(object): - def __init__(self, name=None): + def __init__(self, name=None, hashkey=None, ip_addr=None): self.name = name + self.hashkey = hashkey + self.ip_addr = ip_addr def __repr__(self): return "" % (self.server_id, self.name.encode('utf-8')) @@ -136,15 +138,6 @@ class PlayerNick(object): return "" % (self.player_id, self.stripped_nick) -class ServerHashkey(object): - def __init__(self, server_id=None, hashkey=None): - self.server_id = server_id - self.hashkey = hashkey - - def __repr__(self): - return "" % (self.server_id, self.hashkey) - - def initialize_db(engine=None): DBSession.configure(bind=engine) Base.metadata.bind = engine @@ -165,7 +158,6 @@ def initialize_db(engine=None): player_weapon_stats_table = MetaData.tables['player_weapon_stats'] servers_table = MetaData.tables['servers'] player_nicks_table = MetaData.tables['player_nicks'] - server_hashkeys_table = MetaData.tables['server_hashkeys'] # now map the tables and the objects together mapper(PlayerAchievement, achievements_table) @@ -180,4 +172,3 @@ def initialize_db(engine=None): mapper(PlayerWeaponStat, player_weapon_stats_table) mapper(Server, servers_table) mapper(PlayerNick, player_nicks_table) - mapper(ServerHashkey, server_hashkeys_table) diff --git a/xonstat/views/submission.py b/xonstat/views/submission.py index b969b82..df246d0 100755 --- a/xonstat/views/submission.py +++ b/xonstat/views/submission.py @@ -132,26 +132,24 @@ def get_or_create_server(session=None, name=None, hashkey=None): name - server name of the server to be found or created hashkey - server hashkey """ - # see if the server is already in the database - # if not, create one and the hashkey along with it try: - hashkey = session.query(ServerHashkey).filter_by( - hashkey=hashkey).one() - server = session.query(Server).filter_by( - server_id=hashkey.server_id).one() - log.debug("Found existing server {0} with hashkey {1}".format( - server.server_id, hashkey.hashkey)) - except: - server = Server() - server.name = name + # find one by that name, if it exists + server = session.query(Server).filter_by(name=name).one() + log.debug("Found existing server {0}".format(server.server_id)) + + except MultipleResultsFound, e: + # multiple found, so also filter by hashkey + server = session.query(Server).filter_by(name=name).\ + filter_by(hashkey=hashkey).one() + log.debug("Found existing server {0}".format(server.server_id)) + + except NoResultFound, e: + # not found, create one + server = Server(name=name, hashkey=hashkey) session.add(server) session.flush() - - hashkey = ServerHashkey(server_id=server.server_id, - hashkey=hashkey) - session.add(hashkey) log.debug("Created server {0} with hashkey {1}".format( - server.server_id, hashkey.hashkey)) + server.server_id, server.hashkey)) return server -- 2.39.2