diff --git a/plugins/mail/imapproxy_ b/plugins/mail/imapproxy_ new file mode 100755 index 00000000..bd9a7d5c --- /dev/null +++ b/plugins/mail/imapproxy_ @@ -0,0 +1,153 @@ +#!/usr/bin/env python + +"""=cut +=head1 NAME + + imapproxy - Munin Plugin to monitor imapproxy using pimpstat + +=head1 CONFIGURATION + + This plugin should require no addition configuration. + +=head1 MAGIC MARKERS + + #%# family=auto + #%# capabilities=autoconf suggest + +=head1 Author + +Niall Donegan + +=head1 LICENSE + +GPLv2 + +=cut""" + +import sys +import os +import re +from subprocess import Popen,PIPE + + +def print_autoconf(): + which = Popen("which pimpstat", shell=True, stdout=PIPE) + which.communicate() + if not bool(which.returncode): + print "yes" + else: + print "no (pimpstat not found)" + sys.exit(0) + + +def print_config(graph): + if graph == "cache": + print "graph_title Cache Statistics For ImapProxy" + print "graph_args -l 0 --base 1000" + print "graph_total total" + print "graph_vlabel Cache Connections / ${graph_period}" + print "graph_category imapproxy" + print "cache_hits.draw AREA" + print "cache_hits.type DERIVE" + print "cache_hits.label Cache Hits" + print "cache_hits.min 0" + print "cache_misses.draw STACK" + print "cache_misses.type DERIVE" + print "cache_misses.label Cache Misses" + print "cache_misses.min 0" + if graph == "connections": + print "graph_title Connection Statistics For ImapProxy" + print "graph_args -l 0 --base 1000" + print "graph_total total" + print "graph_vlabel Connections / ${graph_period}" + print "graph_category imapproxy" + print "connections_reused.draw AREA" + print "connections_reused.type DERIVE" + print "connections_reused.label Reused Connections" + print "connections_reused.min 0" + print "connections_created.draw STACK" + print "connections_created.type DERIVE" + print "connections_created.label Created Connections" + print "connections_created.min 0" + sys.exit(0) + + +def print_suggest(): + print "cache" + print "connections" + sys.exit(0) + +def print_fetch(graph): + if graph == "cache": + hits = 0 + misses = 0 + cache = Popen( + "pimpstat -c | egrep 'Cache (Hits|Misses)'", + shell=True, + stdout=PIPE + ) + for line in cache.stdout: + if re.search(r'Hits', line): + hits = line.split()[0] + if re.search(r'Misses', line): + misses = line.split()[0] + print "cache_hits.value %s" % hits + print "cache_misses.value %s" % misses + if graph == "connections": + created = 0 + reused = 0 + connections = Popen( + "pimpstat -c | egrep 'Total (Reused|Created)'", + shell=True, + stdout=PIPE + ) + for line in connections.stdout: + if re.search(r'Created', line): + created = line.split()[0] + if re.search(r'Reused', line): + reused = line.split()[0] + print "connections_created.value %s" % created + print "connections_reused.value %s" % resused + + sys.exit(0) + +def main(): + basename = "imapproxy_" + calledname = os.path.basename(sys.argv[0]) + + if len(sys.argv) > 1: + command = sys.argv[1] + else: + command = "fetch" + + if calledname == basename and command == "fetch": + print >> sys.stderr, "Please use either suggest or autoconf" + sys.exit(1) + if calledname == basename and command not in ["autoconf","suggest"]: + print >> sys.stderr, "Command %s not known, please use either autoconf or suggest" % command + sys.exit(1) + + + graph = calledname[calledname.find("_")+1:] + if calledname != basename and graph not in ["cache","connections"]: + print >> sys.stderr, "%s is not a known graph" % graph + sys.exit(1) + + if calledname != basename and command not in ["config", "fetch"]: + print >> sys.stderr, "Command %s not known, please use either config or fetch" % command + sys.exit(1) + + if command == "autoconf": + print_autoconf() + elif command == "config": + print_config(graph) + elif command =="suggest": + print_suggest() + else: + print_fetch(graph) + + +if __name__ == '__main__': + main() + +# vim:syntax=python