log_parser.py
changeset 83 a34e9f56ddda
parent 65 8b50694f841e
child 86 645cf9c4441e
equal deleted inserted replaced
82:afd3120ec71e 83:a34e9f56ddda
    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