pvl/syslog/rule.py
changeset 100 0f34cf81b9f1
parent 87 70edcd13a447
child 216 c0dbd44bd463
equal deleted inserted replaced
99:8d60eb5604e4 100:0f34cf81b9f1
    56         """
    56         """
    57 
    57 
    58         rules = [cls.config_section(subsection, section[subsection]) for subsection in section.sections]
    58         rules = [cls.config_section(subsection, section[subsection]) for subsection in section.sections]
    59         attrs = dict((name, section[name]) for name in section.scalars)
    59         attrs = dict((name, section[name]) for name in section.scalars)
    60          
    60          
    61         return cls.config(name, rules, **attrs)
    61         try :
    62 
    62             return cls.config(name, rules, **attrs)
    63     @classmethod
    63 
    64     def config (cls, name, rules=None, format=None, irk=None, program=None, facility=None, pattern=None, **filters) :
    64         except ValueError as ex :
       
    65             raise ValueError("[%s] %s" % (name, ex))
       
    66 
       
    67     @classmethod
       
    68     def config_filters (cls, program=None, facility=None, pattern=None, **filters) :
       
    69         """
       
    70             Return filter expression from given attr/value in config.
       
    71         """
       
    72 
       
    73         # XXX: get rid of these special cases
       
    74         if facility :
       
    75             yield 'facility', facility # glob
       
    76 
       
    77         if program :
       
    78             yield 'prog', program # glob
       
    79 
       
    80         if pattern :
       
    81             filters['msg'] = pattern
       
    82         
       
    83         # generic
       
    84         for attr, value in filters.iteritems() :
       
    85             try :
       
    86                 # regex
       
    87                 yield attr, re.compile(value)
       
    88             
       
    89             except re.error as ex :
       
    90                 raise ValueError("%s: %s" % (attr, ex))
       
    91 
       
    92     @classmethod
       
    93     def config (cls, name, rules=None, format=None, irk=None, **filters) :
    65         """
    94         """
    66             Build SyslogRule from config options
    95             Build SyslogRule from config options
    67         """
    96         """
    68 
    97 
    69         if format is not None :
    98         if format is not None :
    71         else :
   100         else :
    72             format = { }
   101             format = { }
    73 
   102 
    74         if irk :
   103         if irk :
    75             format['irk'] = irk
   104             format['irk'] = irk
    76 
   105         
    77         filters = dict(
   106         filters = dict(cls.config_filters(**filters))
    78             (attr, re.compile(regex)) for attr, regex in filters.iteritems()
       
    79         )
       
    80 
       
    81         if facility :
       
    82             filters['facility'] = facility # glob
       
    83 
       
    84         if program :
       
    85             filters['prog'] = program # glob
       
    86 
       
    87         if pattern :
       
    88             filters['msg'] = re.compile(pattern)
       
    89 
   107 
    90         filter = SyslogFilter(**filters)
   108         filter = SyslogFilter(**filters)
    91         
   109         
    92         log.debug("%s: %s %s", name, rules, filter)
   110         log.debug("%s: %s %s", name, rules, filter)
    93 
   111