diff --git a/NetworkListener.py b/NetworkListener.py index e342ef8..ca4b19f 100644 --- a/NetworkListener.py +++ b/NetworkListener.py @@ -29,5 +29,5 @@ def t_listen(conn): if type(ret) == str: ret = ret.encode("utf-8") conn.send(ret) - except Exception: + except IOError: pass diff --git a/Player.py b/Player.py index 97f11a7..0bd143a 100644 --- a/Player.py +++ b/Player.py @@ -62,7 +62,7 @@ class PlayerInRound(Player): return PlayerInRound(steamid, name, team, active_time) class PlayerForDatabase(Player): - def __init__(self,steamid,name,rating,player=None): + def __init__(self,steamid, name, rating, lastUpdate=None, player=None): if player: self.steamid = player.steamid self.name = player.name @@ -71,6 +71,7 @@ class PlayerForDatabase(Player): self.steamid = steamid self.name = name self.rating = rating + self.lastUpdate = lastUpdate self.games = 0 self.wins = 0 def winratio(self): diff --git a/StorrageBackend.py b/StorrageBackend.py index 6a6f2a6..1dcd980 100644 --- a/StorrageBackend.py +++ b/StorrageBackend.py @@ -31,6 +31,8 @@ def get_player_rank(p): def dumpRatings(top=0, forceMeanSort=False, enforceWhitelist=None): global known_players ret = "" + updatePlayerRanks(force=True) + if forceMeanSort: sort = sorted(known_players.values(),key=lambda x: x.rating.mu,reverse=True) else: @@ -58,7 +60,11 @@ def sync_from_database(players): if type(players) == dict: players[p] = p.rating else: - known_players.update({Player.DummyPlayer(p.steamid, p.name):Player.PlayerForDatabase(None,None,None,player=p)}) + lastUpdate = datetime.now() + known_players.update(\ + { Player.DummyPlayer(p.steamid, p.name) : \ + Player.PlayerForDatabase(None, None, None, player=p, lastUpdate=lastUpdate)\ + }) def sync_to_database(players, win): for p in players: @@ -66,6 +72,7 @@ def sync_to_database(players, win): if win: known_players[p].wins += 1 known_players[p].games += 1 + known_players[p].lastUpdate = datetime.now() updatePlayerRanks() @@ -75,7 +82,9 @@ def updatePlayerRanks(force=False): if force or last_rank_update - datetime.now() > timedelta(seconds=240): last_rank_update = datetime.now() - s = sorted(known_players.values(),key=lambda x: TS.get_env().expose(x.rating),reverse=True) + s = sorted(known_players.values(), key=lambda x: TS.get_env().expose(x.rating),reverse=True) + now = datetime.now() + s = filter(lambda p: now - p.lastUpdate < timedelta(days=60), s) rank = 1 for p in s: if p in player_ranks: diff --git a/insurgencyParsing.py b/insurgencyParsing.py index 6ff9bae..81d0e21 100644 --- a/insurgencyParsing.py +++ b/insurgencyParsing.py @@ -190,7 +190,7 @@ def create_event(etype,line,timestamp): else: raise Exception("Cannot create event from logline. (etype was: '{}')".format(etype)) -def parseDate(line): +def parseDate(l): if ": L " in l.split("0x42")[0]: timestamp = datetime.strptime(l.split(": L ")[1].split(": [")[0],"%m/%d/%Y - %H:%M:%S") else: @@ -202,12 +202,12 @@ def parse_line_to_event(l): tmp = l.split("0x42,")[1].strip("\n") etype = tmp.split(",")[0].split("|")[0] try: + timestamp = parseDate(l) event = create_event(etype,tmp,timestamp) - timestamp = parseDate(line) except ValueError: print(" ---- NO TIME ---- | WARNING: Failed to parse time for event, SKIP") return None - except Exception as e: + except IndexError as e: print("Failed to parse Event in line, skipping: {}".format(str(e))) return None