2011-05-19 12:31:10 +02:00
|
|
|
#!/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 <<josacar at gmail dot com>> ;)
|
|
|
|
|
|
|
|
#%# 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
|
|
|
|
|
|
|
|
|
2014-02-14 13:13:04 +01:00
|
|
|
import urllib2
|
|
|
|
import base64
|
2011-05-19 12:31:10 +02:00
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
import re
|
2014-02-14 13:13:04 +01:00
|
|
|
import json
|
2011-05-19 12:31:10 +02:00
|
|
|
|
2014-02-14 13:13:04 +01:00
|
|
|
#py returns invalid json
|
|
|
|
about_location = "/about/info/js"
|
|
|
|
|
|
|
|
#Leave empty if not required
|
|
|
|
http_user = "admin"
|
|
|
|
http_pass = "pass"
|
2011-05-19 12:31:10 +02:00
|
|
|
|
|
|
|
host = os.getenv('host');
|
|
|
|
type = 'data';
|
|
|
|
|
2014-02-14 13:13:04 +01:00
|
|
|
host = "localhost"
|
2011-05-19 12:31:10 +02:00
|
|
|
|
|
|
|
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():
|
2014-02-14 13:13:04 +01:00
|
|
|
global host
|
|
|
|
global about_location
|
|
|
|
global http_user
|
|
|
|
global http_pass
|
|
|
|
url = "http://%s%s" % ( host , about_location )
|
|
|
|
request = urllib2.Request(url)
|
|
|
|
base64string = base64.standard_b64encode('%s:%s' % (http_user, http_pass))
|
|
|
|
if len(http_user) > 0 and len(http_pass) > 0:
|
|
|
|
#print "DEBUG: AUTH: " + base64string
|
|
|
|
request.add_header("Authorization", "Basic %s" % base64string)
|
|
|
|
#print "DEBUG: GET: " + url
|
|
|
|
raw_data = urllib2.urlopen(request).read()
|
|
|
|
#print "DEBUG: " + raw_data
|
|
|
|
return json.loads(raw_data)
|
2011-05-19 12:31:10 +02:00
|
|
|
|
|
|
|
def munin_values(res):
|
|
|
|
output_values(res)
|
|
|
|
|
|
|
|
def munin_config(response):
|
2014-02-14 13:13:04 +01:00
|
|
|
global type
|
2011-05-19 12:31:10 +02:00
|
|
|
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:
|
2014-02-14 13:13:04 +01:00
|
|
|
munin_values(get_data())
|