import logging; log = logging.getLogger('pvl.syslog.filter')
class SyslogFilter (object) :
"""
Match syslog messages.
XXX: do we need more than just prog?
"""
def __init__ (self, prog=None) :
"""
prog - match tag (process name)
"""
self.prog = prog
def match_prog (self, prog) :
"""
Match given prog?
"""
if not self.prog :
return
# normalize
prog = prog.lower()
if prog.startswith('/') :
# base
prog = prog.split('/')[-1]
# match
if not prog :
# never matches non-tagged lines
return False
elif self.prog.endswith('*') :
# prefix match
return prog.startswith(self.prog[:-1])
else :
return prog == self.prog
def filter (self, item) :
"""
Match given item?
"""
for attr, func in (
( 'prog', self.match_prog),
) :
match = func(item[attr])
if match :
continue
elif match is None :
pass
else :
break
# ok
if match is None :
# XXX: empty filter!?
return True
else :
return match
def __call__ (self, items) :
for item in items:
if self.filter(item) :
yield item