--- 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)
+