diff --git a/plugins/other/spamd-tarpit-bsd b/plugins/other/spamd-tarpit-bsd new file mode 100755 index 00000000..6989aea5 --- /dev/null +++ b/plugins/other/spamd-tarpit-bsd @@ -0,0 +1,71 @@ +#!/usr/bin/env python + +# Copyright (c) 2008, Net Easy, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of Net Easy, Inc. nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY Net Easy, Inc. ''AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL Net Easy, Inc. BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# requires logcheck from ports + +import re, os +from sys import argv + +logfile = "/var/log/daemon" + +class checker(object): + def __init__(self): + self.tarpit_count = 0 + self.tarpit_total = 0 + + def __repr__(self): + return "tarpit.value %s" % (self.tarpit_average()) + + def tarpit_average(self): + if self.tarpit_count > 0: + return "%.1f" % (self.tarpit_total / self.tarpit_count) + else: + return 0 + + def process_line(self, line): + if re.search(' disconnected after ', line): + self.tarpit_count += 1 + tarpit_time = re.sub('^.*after ','',re.sub(' second.*$','',line)) + self.tarpit_total += int(tarpit_time) + + def process_lines(self, file): + for line in os.popen('logtail %s %s.tp.offset' % (file, file)).readlines(): + self.process_line(line) + +if __name__ == "__main__": + if len(argv) > 1 and argv[1] == 'config': + print """graph_title spamd delay +graph_vlabel Average delay. +graph_category Mail +graph_info Average time spammers delayed by spamd +tarpit.label Average tarpit delay""" + + else: + processor = checker() + processor.process_lines(logfile) + print processor +