Example #1
0
  def _update_events(self):
    earliestTime = get_current_gmtime()
    curTime = time.time()
    
    for logTypeName, remoteFolder in self.serverList.iteritems():
      try:
        log_msg("Updating logs from %s..." % (logTypeName))
        dataDir = os.path.join(self.baseDataDir, logTypeName)
        if not os.path.exists(dataDir):
          os.makedirs(dataDir)

        #get the changes from the remote server:
        os.system('rsync --append -rtz -e "ssh -i %s" %s/ %s' % (IDENTITY, remoteFolder, dataDir))
        
        #for each file in the folder
        fileNames = glob.glob(dataDir + "/*")
        for fileName in fileNames:
          baseFileName = os.path.split(fileName)[1]
          
          #ignore really old files:
          if self._file_is_old(fileName, curTime):
            self._remove_file(fileName, baseFileName, logTypeName)
            continue
          
          #look up the database row
          results = self._get_file_row(baseFileName, logTypeName)
          
          #if the row existed, figure out if it is old enough to be deleted
          if len(results) > 0:
            assert len(results) == 1, "Why are there two rows for %s and %s?" % (baseFileName, logTypeName)
            numEvents, lastMTimeString = results[0]
            rowExisted = True
            if not self._file_was_modified(fileName, lastMTimeString):
              #don't bother continuing to parse the file if it hasnt been modified
              continue
          #otherwise, just note that we've obviously never parsed any events from this file
          else:
            numEvents = 0
            rowExisted = False
            
          #load all lines
          cur = self.conn.cursor()
          try:
            startTime, newNumEvents = EventLogging.parse_events(cur, fileName, numEvents)
            if startTime < earliestTime:
              earliestTime = startTime
            log_msg("Parsed %s events" % (newNumEvents-numEvents))
          #if any line fails, abort everything and log the failure
          except Exception, error:
            self._log_failure(error, "Failure (%s) while processing line from %s" % (error, fileName))
          #otherwise update the file row in the database to note that we've successfully parsed newNumEvents events
          else:
            newMTimeString = str(os.path.getmtime(fileName))
            if rowExisted:
              self._update_file_row(cur, baseFileName, logTypeName, newNumEvents, newMTimeString)
            else:
              self._insert_file_row(cur, baseFileName, logTypeName, newNumEvents, newMTimeString)
          finally:
            cur.close()
            self.conn.commit()