#!/usr/bin/env python # Munin Plugin for Cherokee in Python # Based on the work of Mateusz Pawlowski: http://www.mobygeek.net/projects/files/cherokee__type_.rb # Coded by the not-python-programmer Jose Luis Salas <> ;) #%# family=contrib # Cherokee has to have $host/about enabled with server info set to normal # Or you can change the variables below as you wish # Handling arguments # # cherokee_host_type_data Shows data transferred # cherokee_host_type_rate Shows data rate transfer # cherokee_host_type_mod Shows Modules # cherokee_host_type_conn Shows connections # USAGE: # cp /home/user/cherokee__type_.py /usr/share/munin/plugins/cherokee__type_ # chmod +x /usr/share/munin/plugins/cherokee__type_ # ln -s /usr/share/munin/plugins/cherokee__type_ cherokee_host_type_data # ln -s /usr/share/munin/plugins/cherokee__type_ cherokee_localhost_type_data # ln -s /usr/share/munin/plugins/cherokee__type_ cherokee_localhost_type_conn # ln -s /usr/share/munin/plugins/cherokee__type_ cherokee_localhost_type_mod # ln -s /usr/share/munin/plugins/cherokee__type_ cherokee_localhost_type_rate import urllib import os import sys import re about_location = "/about/info/py" host = os.getenv('host'); type = 'data'; host="localhost" match = re.match('^(?:|.*\/)cherokee_([^_]+)_type_(.+)$', sys.argv[0]) if match: host=match.group(1) type=match.group(2) if re.match('^([^:]+):(\d+)$', host): host=match.group(1) type=match.group(2) #print "HOST: " + host + " TYPE: " + type def output_values(response): if type == "mod" : section = response["modules"] for key in section: print key + '.value ' + str(section[key]) elif type == "data" : section = response["traffic"] print "sent.value " + str(section["tx"]) print "received.value " + str(section["rx"]) elif type == "rate" : section = response["traffic"] print "sent.value " + str(section["tx"]) print "received.value " + str(section["rx"]) elif type == "conn" : section = response["connections"] for key in section: print key + '.value ' + str(section[key]) def get_data(): raw_data = urllib.urlopen( "http://%s%s" % (host,about_location)).read() # print "DEBUG: " + raw_data return eval(raw_data) def munin_values(res): output_values(res) def munin_config(response): print "graph_category cherokee" if type == "rate": print "graph_title Cherokee Data Transfer Rate" print "graph_vlabel Bits sent(+) / received(-) per ${graph_period}" print "graph_args --base 1000" print "graph_info" print "received.label Received" print "received.graph no" print "received.type COUNTER" print "received.cdef received,8,*" print "sent.label bps" print "sent.type COUNTER" print "sent.negative received" print "sent.cdef sent,8,*" elif type == "conn": print "graph_title Cherokee Connections" print "graph_vlabel Connections" #print "graph_args --base 1000 --logarithmic" print "graph_args --base 1000" section = response["connections"] for key in section: print key.strip() + '.label ' + key.capitalize() print key + '.draw AREASTACK' elif type == "data": print "graph_title Cherokee Data Transferred" print "graph_vlabel Bytes" print "sent.label Sent" print "received.label Received" elif type == "mod": print "graph_title Cherokee Loaded Modules" print "graph_vlabel Modules" print "graph_args --base 1000 --lower-limit 0" section = response["modules"] for key in section: print key + '.label ' + key.capitalize() print key + '.draw AREASTACK' if len(sys.argv) > 1 and sys.argv[1] == "config": munin_config(get_data()) else: munin_values(get_data())