Example #1
0
class ParseLog(object):
    def __init__(self, event, filename, outpath, parser, forever=False):
        self.event = event
        self.filename = filename
        self.formatter = StandardJSONFormatter()
        self.logger = RotatingFileLogger(outpath, self.formatter)
        self.analytics = Analytics(self.logger)
        self.parser = parser
        self.forever = forever

    def run(self):
        stat = os.stat(self.filename)
        
        fp = None
        
        while True:
            if not fp:
                if not os.path.exists(self.filename):
                    time.sleep(5)
                    continue
                
                try:
                    if self.filename.endswith('.gz'):
                        fp = gzip.GzipFile(self.filename, "r")
                    else:
                        fp = open(self.filename, "r")
                    stat = os.stat(self.filename)
                except OSError:
                    time.sleep(2)
                    if fp:
                        fp.close()
                        fp = None
                    continue
            
            line = fp.readline()
            if not line:
                if not self.forever:
                    return
                time.sleep(1)

                try:
                    stat2 = os.stat(self.filename)
                    if (stat.st_dev != stat2.st_dev) or (stat.st_ino != stat2.st_ino):
                        fp.close()
                        fp = None
                        continue
                except OSError:
                    fp.close()
                    fp = None
                    continue

                continue

            ts, row = self.parser(line)
            self.analytics.record(self.event, row, ts)
Example #2
0
 def __init__(self, event, filename, outpath, parser, forever=False):
     self.event = event
     self.filename = filename
     self.formatter = StandardJSONFormatter()
     self.logger = RotatingFileLogger(outpath, self.formatter)
     self.analytics = Analytics(self.logger)
     self.parser = parser
     self.forever = forever