pvl/syslog/filter.py
changeset 216 c0dbd44bd463
parent 209 cf883e2e1bff
equal deleted inserted replaced
214:e314447c5621 216:c0dbd44bd463
     5 
     5 
     6 class SyslogFilter (object) :
     6 class SyslogFilter (object) :
     7     """
     7     """
     8         Match syslog messages fields against given patterns.
     8         Match syslog messages fields against given patterns.
     9     """
     9     """
       
    10     
       
    11     @classmethod
       
    12     def build (cls, **filters) :
       
    13         """
       
    14             Match using given non-None fields.
       
    15         """
    10 
    16 
    11     def __init__ (self, **filters) :
    17         # drop None's
       
    18         return cls(dict((attr, regex) for attr, regex in filters.iteritems() if regex is not None))
       
    19 
       
    20     def __init__ (self, filters) :
    12         """
    21         """
    13             Match using given { field: regex }.
    22             Match using given { field: regex }.
    14         """
    23         """
    15         
    24 
    16         # drop None's
    25         self.filters = filters
    17         self.filters = dict((attr, regex) for attr, regex in filters.iteritems() if regex is not None)
       
    18 
    26 
    19     def match_glob (self, attr, glob, value=None) :
    27     def match_glob (self, attr, glob, value=None) :
    20         """
    28         """
    21             Match prog as glob.
    29             Match prog as glob.
    22         """
    30         """
       
    31         
       
    32         if not glob :
       
    33             return { attr: value }
    23 
    34 
    24         if not value :
    35         if not value :
    25             # require
    36             # require
    26             return False
    37             return False
    27 
    38 
    57     def match_regex (self, attr, regex, value=None) :
    68     def match_regex (self, attr, regex, value=None) :
    58         """
    69         """
    59             Match given value against given pattern.
    70             Match given value against given pattern.
    60         """
    71         """
    61 
    72 
       
    73         if not regex :
       
    74             return { attr: value }
       
    75 
    62         if not value :
    76         if not value :
    63             # XXX: optional = match empty string?
    77             # XXX: optional = match empty string?
    64             value = ''
    78             value = ''
    65         else :
    79         else :
    66             # normalize; XXX: unicode?
    80             # normalize; XXX: unicode?
    90 
   104 
    91         for attr in self.filters :
   105         for attr in self.filters :
    92             # filter
   106             # filter
    93             filter = self.filters[attr]
   107             filter = self.filters[attr]
    94 
   108 
    95             if not filter :
       
    96                 # ignore
       
    97                 continue
       
    98             
       
    99             # lookup match-func
   109             # lookup match-func
   100             match = getattr(self, 'match_{attr}'.format(attr=attr), None)
   110             match = getattr(self, 'match_{attr}'.format(attr=attr), None)
   101 
   111 
   102             if match :
   112             if match :
   103                 pass
   113                 pass