class MatchAnalyzer: def __init__(self): self.log = Log() self.msgQueue = Queue(account_name=config.AZURE_STORAGE_ACCOUNT_NAME, account_key=config.AZURE_STORAGE_ACCOUNT_KEY, queue_name=config.HALO_QUEUE_MATCH) self.summary = SummaryTable(config.AZURE_STORAGE_ACCOUNT_NAME, config.AZURE_STORAGE_ACCOUNT_KEY, config.AZURE_STORAGE_SUMMARY_TABLE_NAME) def processMatch(self, match): gamertag = match["Players"][0]["Player"]["Gamertag"] result_code = match["Players"][0]["Result"] if result_code == 3: result = 'won' elif result_code == 2: result = 'tied' elif result_code == 1: result = 'lost' else: result = 'DNF' count_type = gamertag + 'match' + result count = self.summary.getCount(count_type) count = count + 1 self.summary.updateCount(count_type, count) print(count_type + ' is now ' + str(count)) def fullAnalysis(self): while True: matches = self.msgQueue.dequeue() if len(matches) > 0: for match_event_raw in matches: match_event = json.loads(match_event_raw.message_text) match = json.loads(match_event["data"]) # print("Processing:\n" + json.dumps(match, sort_keys=True, indent=4)) try: self.processMatch(match) self.msgQueue.delete(match_event_raw) except: e = sys.exc_info()[0] self.log.error("Could not process: " + match_event_raw.message_text + " because %s" % e) traceback.print_exc(file=sys.stdout) else: break def getPlayerStats(self, gamertag): stats = {} stats.player = {"gamertag": gamertag} count_type = gamertag + "won" count = self.summary, getCount(count_type) print(str(count), wins)
class Analyzer: def __init__(self): self.log = Log() self.log.debug("Storage account for analyzer: {0}".format(config.AZURE_STORAGE_ACCOUNT_NAME)) self.msgQueue = Queue(account_name = config.AZURE_STORAGE_ACCOUNT_NAME, account_key=config.AZURE_STORAGE_ACCOUNT_KEY, queue_name=config.AZURE_STORAGE_QUEUE_NAME) self.summary = SummaryTable(config.AZURE_STORAGE_ACCOUNT_NAME, config.AZURE_STORAGE_ACCOUNT_KEY, config.AZURE_STORAGE_SUMMARY_TABLE_NAME) self.keep_running = bool(config.ANALYZER_KEEP_RUNNING) self.log.debug("Analyzer keep running: {0}".format(self.keep_running)) if self.keep_running: self.sleep_time = float(config.ANALYZER_SLEEP_TIME) self.log.debug("Sleep time between analyses: {0}".format(self.sleep_time)) def incrementCount(self, event_type): count = self.summary.getCount(event_type) count = count + 1 self.summary.updateCount(event_type, count) self.log.info(event_type + " count is now " + str(count)) def processEvent(self, message): msg = message.message_text split = msg.find(" - ") if (not split): event_type = "OTHER" else: event_type = msg[:split] # Sleep to simulated a longer running process time.sleep(self.sleep_time) self.incrementCount(event_type) def fullAnalysis(self): hostname = socket.gethostname() msg = hostname + ': Analyzing log event queue' notify.info(msg) while True: events = self.msgQueue.dequeue() if len(events) > 0: for event in events: self.log.info("Dequeued: " + event.message_text) try: self.processEvent(event) self.msgQueue.delete(event) self.log.info("Counted and deleted: " + event.message_text) except: e = sys.exc_info()[0] self.log.error("Could not process: " + event.message_text + " because %s" % e) traceback.print_exc(file=sys.stdout) else: break time.sleep(self.sleep_time)
class MatchAnalyzer: def __init__(self): self.log = Log() self.msgQueue = Queue(account_name = config.AZURE_STORAGE_ACCOUNT_NAME, account_key=config.AZURE_STORAGE_ACCOUNT_KEY, queue_name=config.HALO_QUEUE_MATCH) self.summary = SummaryTable(config.AZURE_STORAGE_ACCOUNT_NAME, config.AZURE_STORAGE_ACCOUNT_KEY, config.AZURE_STORAGE_SUMMARY_TABLE_NAME) def processMatch(self, match): gamertag = match["Players"][0]["Player"]["Gamertag"] result_code = match["Players"][0]["Result"] if result_code == 3: result = 'won' elif result_code == 2: result = 'tied' elif result_code == 1: result = 'lost' else: result = 'DNF' count_type = gamertag + 'match' + result count = self.summary.getCount(count_type) count = count + 1 self.summary.updateCount(count_type, count) print(count_type + ' is now ' + str(count)) def fullAnalysis(self): while True: matches = self.msgQueue.dequeue() if len(matches) > 0: for match_event_raw in matches: match_event = json.loads(match_event_raw.message_text) match = json.loads(match_event["data"]) # print("Processing:\n" + json.dumps(match, sort_keys=True, indent=4)) try: self.processMatch(match) self.msgQueue.delete(match_event_raw) except: e = sys.exc_info()[0] self.log.error("Could not process: " + match_event_raw.message_text + " because %s" % e) traceback.print_exc(file=sys.stdout) else: break def getPlayerStats(self, gamertag): stats = {} stats.player = { "gamertag": gamertag } count_type = gamertag + "won" count = self.summary,getCount(count_type) print(str(count), wins)
class Analyzer: def __init__(self): self.log = Log() self.msgQueue = Queue(account_name = config.AZURE_STORAGE_ACCOUNT_NAME, account_key=config.AZURE_STORAGE_ACCOUNT_KEY, queue_name=config.AZURE_STORAGE_QUEUE_NAME) self.summary = SummaryTable(config.AZURE_STORAGE_ACCOUNT_NAME, config.AZURE_STORAGE_ACCOUNT_KEY, config.AZURE_STORAGE_SUMMARY_TABLE_NAME) def incrementCount(self, event_type): count = self.summary.getCount(event_type) count = count + 1 self.summary.updateCount(event_type, count) self.log.info(event_type + " count is now " + str(count)) def processEvent(self, message): msg = message.message_text if msg.startswith("ERROR"): event_type = "ERROR" elif msg.startswith("WARNING"): event_type = "WARNING" elif msg.startswith("INFO"): event_type = "INFO" elif msg.startswith("DEBUG"): event_type = "DEBUG" else: event_type = "OTHER" self.incrementCount(event_type) def fullAnalysis(self): hostname = socket.gethostname() msg = hostname + ': Analyzing log event queue' notify.info(msg) while True: events = self.msgQueue.dequeue() if len(events) > 0: for event in events: self.log.info("Dequeued: " + event.message_text) try: self.processEvent(event) self.msgQueue.delete(event) self.log.info("Counted and deleted: " + event.message_text) except: e = sys.exc_info()[0] self.log.error("Could not process: " + event.message_text + " because %s" % e) traceback.print_exc(file=sys.stdout) else: break
class Analyzer: time_since_last_event = None last_event_time = time.time() current_length = 0 last_length = 0 max_length = 10 def __init__(self): self.log = Log() self.log.debug("Storage account for analyzer: {0}".format( config.AZURE_STORAGE_ACCOUNT_NAME)) self.msgQueue = Queue(account_name=config.AZURE_STORAGE_ACCOUNT_NAME, account_key=config.AZURE_STORAGE_ACCOUNT_KEY, queue_name=config.AZURE_STORAGE_QUEUE_NAME) self.current_length = self.msgQueue.getLength() self.summary = SummaryTable(config.AZURE_STORAGE_ACCOUNT_NAME, config.AZURE_STORAGE_ACCOUNT_KEY, config.AZURE_STORAGE_SUMMARY_TABLE_NAME) self.sleep_time = float(config.ANALYZER_SLEEP_TIME) self.log.debug("Sleep time between analyses: {0}".format( self.sleep_time)) def incrementCount(self, event_type): count = self.summary.getCount(event_type) count = count + 1 self.summary.updateCount(event_type, count) self.log.info(event_type + " count is now " + str(count)) def processEvent(self, message): # Sleep to simulated a longer running process time.sleep(self.sleep_time) data = json.loads(message.message_text) event_type = data["type"] now = time.time() * 1000.0 duration = now - data["time"] print("Duration of last event processing: " + str(duration)) self.incrementCount(event_type) self.summary.updateLastProcessingTime(duration) def fullAnalysis(self): hostname = socket.gethostname() msg = hostname + ': Analyzing log event queue' notify.info(msg) while True: self.last_length = self.current_length self.current_length = self.msgQueue.getLength() if self.current_length > 0: events = self.msgQueue.dequeue() if len(events) > 0: now = time.time() for event in events: self.time_since_last_event = now - self.last_event_time self.last_event_time = now self.log.info("Dequeued: " + event.message_text) try: self.processEvent(event) self.msgQueue.delete(event) self.current_length = self.current_length - 1 self.log.info("Counted and deleted: " + event.message_text) except: e = sys.exc_info() self.log.error("Could not process: " + event.message_text + " because %s" % e[0]) self.log.error(traceback.format_tb(e[2])) time.sleep(self.sleep_time)