pvl.syslog.SyslogFilter: move filter-filtering to SyslogFilter.build(**filters) and fix match_* funcs to normalize on non-filter
--- a/pvl/syslog/args.py Sun Feb 10 19:57:00 2013 +0200
+++ b/pvl/syslog/args.py Sun Feb 10 23:27:04 2013 +0200
@@ -90,7 +90,7 @@
)
# TODO: filter optional
- filter = SyslogFilter(
+ filter = SyslogFilter.build(
# glob pattern
prog = options.syslog_prog,
facility = options.syslog_facility,
--- a/pvl/syslog/filter.py Sun Feb 10 19:57:00 2013 +0200
+++ b/pvl/syslog/filter.py Sun Feb 10 23:27:04 2013 +0200
@@ -7,19 +7,30 @@
"""
Match syslog messages fields against given patterns.
"""
+
+ @classmethod
+ def build (cls, **filters) :
+ """
+ Match using given non-None fields.
+ """
- def __init__ (self, **filters) :
+ # drop None's
+ return cls(dict((attr, regex) for attr, regex in filters.iteritems() if regex is not None))
+
+ def __init__ (self, filters) :
"""
Match using given { field: regex }.
"""
-
- # drop None's
- self.filters = dict((attr, regex) for attr, regex in filters.iteritems() if regex is not None)
+
+ self.filters = filters
def match_glob (self, attr, glob, value=None) :
"""
Match prog as glob.
"""
+
+ if not glob :
+ return { attr: value }
if not value :
# require
@@ -59,6 +70,9 @@
Match given value against given pattern.
"""
+ if not regex :
+ return { attr: value }
+
if not value :
# XXX: optional = match empty string?
value = ''
@@ -92,10 +106,6 @@
# filter
filter = self.filters[attr]
- if not filter :
- # ignore
- continue
-
# lookup match-func
match = getattr(self, 'match_{attr}'.format(attr=attr), None)
--- a/pvl/syslog/rule.py Sun Feb 10 19:57:00 2013 +0200
+++ b/pvl/syslog/rule.py Sun Feb 10 23:27:04 2013 +0200
@@ -105,7 +105,7 @@
filters = dict(cls.config_filters(**filters))
- filter = SyslogFilter(**filters)
+ filter = SyslogFilter(filters)
log.debug("%s: %s %s", name, rules, filter)