--- /usr/share/pyshared/spye/plugins/sikkerhedorg/log/watcher.py 2012-05-14 23:01:07.000000000 +0200 +++ /home/tdn/wc/software/spye-sikkerhedorg/spye-sikkerhedorg/plugins/sikkerhedorg/log/watcher.py 2012-08-20 22:14:50.211761437 +0200 @@ -26,8 +26,16 @@  patterns = self.config_get("patterns", require = True)  return [(x, re.compile(x)) for x in patterns]   + def exclude_patterns_load(self): + patterns = self.config_get("exclude_patterns", require = False) + if patterns: + return [(x, re.compile(x)) for x in patterns] + else: + return None +  def meta_check(self, filename='-'): - patterns = self.patterns_load() + patterns = self.patterns_load() + exclude_patterns = self.exclude_patterns_load()    if filename == '-':  fh = sys.stdin @@ -40,11 +48,20 @@  line = line.strip()    for p, re in patterns: - if re.search(line): + if re.search(line) and not self.exclude_match(line, exclude_patterns):  self.print_hint("Line [%s] matched pattern [%s]", line, p)  else:  self.print_debug("Line [%s] does not match pattern [%s]", line, p)   + def exclude_match(self, line, exclude_patterns): + """Returns True if line matches any pattern in exclude_patterns + Returns False otherwise""" + if exclude_patterns: + for ep, ere in exclude_patterns: + if ere.search(line): + return True + return False +  def meta_tail(self):  patterns = self.patterns_load()  mailfrom = self.config_get_string("mailfrom", require = True) @@ -57,7 +74,7 @@  line = line.strip()    for p, re in patterns: - if re.search(line): + if re.search(line) and not self.exclude_match(line, exclude_patterns):  self.print_hint("Line [%s] matched pattern [%s]", line, p)    subject = "[%s] logwatch alert [%s]" % (hostname_fqdn, p) @@ -66,3 +83,4 @@  mail.set_envelope(From = mailfrom, To = mailto)  mail.set_headers (From = mailfrom, To = mailto, Subject = subject)  mail.send(template % (line, p)) +