42 """ |
42 """ |
43 Parse the given lines, yielding LogEvents. |
43 Parse the given lines, yielding LogEvents. |
44 """ |
44 """ |
45 |
45 |
46 for offset, line in enumerate(lines) : |
46 for offset, line in enumerate(lines) : |
47 # status lines |
47 # offset? |
48 if line.startswith('---') : |
48 if starting_offset : |
49 # XXX: handle these |
49 offset = starting_offset + offset |
50 continue |
50 |
|
51 else : |
|
52 offset = None |
51 |
53 |
52 # normal lines |
54 # try and parse |
|
55 try : |
|
56 line = self.parse_line(line, date, offset) |
|
57 |
|
58 except Exception, e : |
|
59 raise Exception("Parsing line failed: %r@%d: %s" % (line, offset, e)) |
|
60 |
53 else : |
61 else : |
54 # XXX: only parse timestamps for now |
62 # yield unless None |
55 timestamp, data = line.split(' ', 1) |
63 if line : |
56 |
64 yield line |
57 # parse timestamp into naive datetime |
|
58 dt = datetime.datetime.strptime(timestamp, self.timestamp_fmt) |
|
59 |
|
60 # override date? |
|
61 if date : |
|
62 dt = dt.replace(year=date.year, month=date.month, day=date.day) |
|
63 |
|
64 # now localize with timezone |
|
65 dtz = self.tz.localize(dt) |
|
66 |
65 |
67 # offset? |
66 def parse_line (self, line, date, offset=None) : |
68 if starting_offset : |
67 """ |
69 offset = starting_offset + offset |
68 Parse a single line, and return the resulting LogLine, or None, to ignore the line |
|
69 """ |
|
70 |
|
71 # empty line |
|
72 if not line : |
|
73 return |
70 |
74 |
71 else : |
75 # status lines |
72 offset = None |
76 elif line.startswith('---') : |
|
77 # XXX: handle these |
|
78 return |
|
79 |
|
80 # normal lines |
|
81 else : |
|
82 # XXX: only parse timestamps for now |
|
83 timestamp, data = line.split(' ', 1) |
|
84 |
|
85 # parse timestamp into naive datetime |
|
86 dt = datetime.datetime.strptime(timestamp, self.timestamp_fmt) |
|
87 |
|
88 # override date? |
|
89 if date : |
|
90 dt = dt.replace(year=date.year, month=date.month, day=date.day) |
|
91 |
|
92 # now localize with timezone |
|
93 dtz = self.tz.localize(dt) |
73 |
94 |
74 # yield raw events |
95 # build raw event |
75 yield log_line.LogLine(offset, LogTypes.RAW, dtz, None, data) |
96 return log_line.LogLine(offset, LogTypes.RAW, dtz, None, data) |
76 |
97 |