diff --git a/analyze.py b/analyze.py index e521d94..da76dbe 100644 --- a/analyze.py +++ b/analyze.py @@ -29,8 +29,9 @@ if __name__ == '__main__': #f = open('output.txt', 'w') rex_combat = {} rex_game = {} + rex_chat = {} for logf in coll.sessions: - logf.parse_files(['game.log', 'combat.log']) + logf.parse_files(['game.log', 'combat.log', 'chat.log']) print "----- Log %s -----" % logf.idstr if logf.combat_log: for l in logf.combat_log.lines: @@ -54,12 +55,22 @@ if __name__ == '__main__': else: rex_game[l.__class__.__name__] = rex_game.get(l.__class__.__name__, 0) + 1 print l.values['log'] - # ClientInfo introspection for ping - #if isinstance(l, ClientInfo) and l.values.get('clinfo', '') == 'avgPing': - # print l.values - # # fix avgPing parsing! + if logf.chat_log: + for l in logf.chat_log.lines: + if isinstance(l, dict): + rex_chat['dict'] = rex_chat.get('dict', 0) + 1 + elif isinstance(l, str): + print l + else: + if l.unpack(): + pass + else: + rex_chat[l.__class__.__name__] = rex_chat.get(l.__class__.__name__, 0) + 1 + print l.values['log'] print 'Analysis complete:' print '#'*20+' RexCombat ' + '#' *20 print rex_combat print '#'*20+' RexGame ' + '#' *20 print rex_game + print '#'*20+' RexChat ' + '#' *20 + print rex_chat diff --git a/logs/chat.py b/logs/chat.py index aef8a61..7269ba3 100644 --- a/logs/chat.py +++ b/logs/chat.py @@ -24,6 +24,7 @@ class ChatLog(Log): def __init__(self, values=None): self.values = values or {} + self.reviewed = False def unpack(self, force=False): if self.reviewed and not force: @@ -48,6 +49,19 @@ class ChatLog(Log): ''' returns a String readable by humans explaining this Log ''' return self.values.get('log', 'Unknown Chat Log') +class SystemMessage(ChatLog): + matcher = re.compile(r"^<\s+SYSTEM>\s(?P.*)") + + @classmethod + def _is_handler(cls, log): + if log.get('log', '').lstrip().startswith('< SYSTEM>'): + return True + return False + + def explain(self): + return '[SYSTEM]: %(message)s' % self.values + + class PrivateMessageReceived(ChatLog): matcher = re.compile(r"^<\s\s\s\sPRIVATE From>\[\s*(?P[^\]]+)\]\s(?P.*)") @@ -146,6 +160,7 @@ class ChatServerDisconnect(ChatLog): return '[disconnected]' CHAT_LOGS = [ + SystemMessage, PrivateMessageReceived, PrivateMessageSent, ChatMessage, # private messages need to be before chatmessage. diff --git a/logs/combat.py b/logs/combat.py index f0a5c0f..fd22623 100644 --- a/logs/combat.py +++ b/logs/combat.py @@ -39,6 +39,7 @@ class CombatLog(Log): def __init__(self, values=None): self.values = values or {} + self.reviewed = False def unpack(self, force=False): if self.reviewed and not force: diff --git a/logs/game.py b/logs/game.py index 8658817..ea6bd6b 100644 --- a/logs/game.py +++ b/logs/game.py @@ -58,6 +58,7 @@ class GameLog(Log): def __init__(self, values=None): self.values = values + self.reviewed = False def unpack(self, force=False): if self.reviewed and not force: diff --git a/logs/session.py b/logs/session.py index 49b8bac..194f5fc 100644 --- a/logs/session.py +++ b/logs/session.py @@ -117,6 +117,11 @@ class LogFileSession(LogSession): self.game_log.set_data(z.read(filename)) self.game_log.parse() self.files_parsed.append('game.log') + elif fn == 'chat.log' and (not files or fn in files) and not 'chat.log' in self.files_parsed: + self.chat_log = ChatLogFile(fn) + self.chat_log.set_data(z.read(filename)) + self.chat_log.parse() + self.files_parsed.append('chat.log') except: self._error = True return