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 |