diff -r 13fc80450862 -r 21ab25ffa1e8 fixbot/logwatch/message.py --- a/fixbot/logwatch/message.py Fri Feb 05 20:38:44 2010 +0200 +++ b/fixbot/logwatch/message.py Fri Feb 05 21:16:19 2010 +0200 @@ -71,7 +71,7 @@ + r"(?P\w{3} [0-9 ]\d \d{2}:\d{2}:\d{2}) (?P\S+)" # the message, including possible tag/pid - + r" (?P(?P(?P[^:\]]+)(?:\[(?P\d+)\])?: )?(?P.+))\n?" + + r" (?P(?P(?P[^:\]]+)(?:\[(?P\d+)\])?: )?(?P.*))\n?" ) # strptime format of timestamp @@ -158,7 +158,65 @@ # the raw line as matched self.raw = match.group(0) + + def properties (self) : + """ + Return a dict containing the attributes specified for this message + """ + + # XXX: ugh... doesn't do @property + return dict( + facility = self.facility, + priority = self.priority, + timestamp = self.timestamp, + hostname = self.hostname, + tag = self.tag, + program = self.program, + pid = self.pid, + text = self.text, + message = self.message, + ) + def match (self, regexp=None, program=None) : + """ + Evaluate a match against this message using the given criteria + + regexp - match regexp against the message's contents + program - match program component of tag against given value, may also be False + """ + + params = {} + + ## program + if program is False : + # only match if no tag + if self.program is not None : + return False + + elif program is not None : + # case-insensitive match + if self.program.lower() != program.lower() : + return False + + else : + # params + params['program'] = self.program + + ## pattern + if regexp is not None : + # apply regexp + match = regexp.match(self.text) + + if not match : + # no match + return False + + # good, params + params.update(match.groupdict()) + + # we appear to have a match + return params + def __str__ (self) : """ Format to default format