diff -r afd3120ec71e -r a34e9f56ddda log_parser.py --- a/log_parser.py Tue Feb 10 04:27:22 2009 +0200 +++ b/log_parser.py Tue Feb 10 05:56:57 2009 +0200 @@ -44,33 +44,54 @@ """ for offset, line in enumerate(lines) : - # status lines - if line.startswith('---') : - # XXX: handle these - continue - - # normal lines + # offset? + if starting_offset : + offset = starting_offset + offset + else : - # XXX: only parse timestamps for now - timestamp, data = line.split(' ', 1) - - # parse timestamp into naive datetime - dt = datetime.datetime.strptime(timestamp, self.timestamp_fmt) - - # override date? - if date : - dt = dt.replace(year=date.year, month=date.month, day=date.day) - - # now localize with timezone - dtz = self.tz.localize(dt) + offset = None + + # try and parse + try : + line = self.parse_line(line, date, offset) - # offset? - if starting_offset : - offset = starting_offset + offset + except Exception, e : + raise Exception("Parsing line failed: %r@%d: %s" % (line, offset, e)) + + else : + # yield unless None + if line : + yield line - else : - offset = None + def parse_line (self, line, date, offset=None) : + """ + Parse a single line, and return the resulting LogLine, or None, to ignore the line + """ + + # empty line + if not line : + return - # yield raw events - yield log_line.LogLine(offset, LogTypes.RAW, dtz, None, data) + # status lines + elif line.startswith('---') : + # XXX: handle these + return + + # normal lines + else : + # XXX: only parse timestamps for now + timestamp, data = line.split(' ', 1) + + # parse timestamp into naive datetime + dt = datetime.datetime.strptime(timestamp, self.timestamp_fmt) + + # override date? + if date : + dt = dt.replace(year=date.year, month=date.month, day=date.day) + + # now localize with timezone + dtz = self.tz.localize(dt) + # build raw event + return log_line.LogLine(offset, LogTypes.RAW, dtz, None, data) +