from pvl.syslog.filter import SyslogFilter
import re
import logging; log = logging.getLogger('pvl.syslog.rule')
class SyslogRule (object) :
"""
A rule matches syslog lines, and formats them.
tag - apply given tag to matches
"""
def __init__ (self, tag, program=None, pattern=None, format=None, flags=0) :
pattern = re.compile(pattern, flags)
self.filter = SyslogFilter(prog=program)
self.tag = tag
self.format = format
self.pattern = pattern
def apply (self, item) :
"""
Apply rule against given item.
"""
# filter
match = self.filter.filter(item)
log.debug("filter: %s", match)
if not match :
# ignore
return None
if self.pattern :
match = self.pattern.match(item['msg'])
if not match :
# ignore
return None
# apply
item.update(match.groupdict())
if self.tag is False :
# drop
return False
if self.format :
# return
return self.tag, self.format.format(**item)