Exemple #1
0
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)
Exemple #2
0
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)   
Exemple #3
0
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 
Exemple #5
0
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)