Ticket #869: lighttpd_

File lighttpd_, 3.7 KB (added by yonas, at 2010-02-21T01:01:56+01:00)

Add support for Basic and Digest authentication

Line 
1#!/usr/bin/python
2#%# family=auto
3#%# capabilities=suggest autoconf
4
5
6"""
7Munin plugin to monitor lighttpd statistics
8Ryan Tucker <rtucker@gmail.com>, 2009/07/12
9
10To use:
11ln -s path_to_this_script /etc/munin/plugins/lighttpd_accesses
12ln -s path_to_this_script /etc/munin/plugins/lighttpd_busyservers
13ln -s path_to_this_script /etc/munin/plugins/lighttpd_idleservers
14ln -s path_to_this_script /etc/munin/plugins/lighttpd_kbytes
15ln -s path_to_this_script /etc/munin/plugins/lighttpd_uptime
16
17Also ensure that lighttpd has mod_status enabled and that your
18status.status-url is set appropriately.  Adjust the url below if
19needed.
20"""
21
22import os
23import sys
24import urllib2
25
26STATUS_URL = os.environ.get('statusurl', 'http://127.0.0.1/server-status?auto')
27AUTH_TYPE = os.environ.get('auth_type', '')
28AUTH_REALM = os.environ.get('auth_realm', '')
29AUTH_USER = os.environ.get('auth_user', '')
30AUTH_PASSWORD = os.environ.get('auth_password', '')
31
32def print_config(name):
33    """Generates and prints a munin config for a given chart."""
34    counters = ['accesses', 'kbytes']
35   
36    #                         title       vert. label         description     
37    typedict = {'accesses': ['Requests', 'requests / s', 'Requests per second', 'Requests'],
38                'kbytes': ['Traffic', 'bytes / s', 'Traffic in bytes per second', 'Bytes transfered'],
39                'uptime': ['Uptime', 'seconds', 'Uptime in seconds', 'Uptime'],
40                'busyservers': ['Active connections', 'connections', 'Number of active connections', 'Active connections'],
41                'idleservers': ['Idle connections', 'connections', 'Number of idle connections', 'Idle connections']}
42
43    print "graph_title %s" % (typedict[name][0])
44    print "graph_vlabel %s" % (typedict[name][1])
45    print "graph_category lighttpd"
46    print "graph_info %s" % (typedict[name][2])
47    print "data.label %s" % (typedict[name][3])
48
49    if name in counters:
50        print "data.type DERIVE\ndata.min 0"
51
52    if name == 'kbytes':
53        print "data.cdef data,8000,*"
54
55
56def print_status(name, url):
57    """Gets lighttpd's status and prints the requested value."""
58
59    statuslist = urllib2.urlopen(url).readlines()
60    mappings = {'Total Accesses': 'accesses',
61                'Total kBytes': 'kbytes',
62                'Uptime': 'uptime',
63                'BusyServers': 'busyservers',
64                'IdleServers': 'idleservers'}
65
66    for i in statuslist:
67        key, value = i.split(':')
68        if key in mappings.keys():
69            if mappings[key] == name:
70                print 'data.value %s' % value.strip()
71
72if __name__ == '__main__':
73    if len(sys.argv) > 1:
74        if sys.argv[1] == 'suggest':
75            print "accesses\nkbytes\nuptime\nbusyservers\nidleservers"
76            sys.exit(0)
77        elif  sys.argv[1] == 'autoconf':
78            print 'yes'
79            sys.exit(0)
80
81    try:
82        param = os.path.split(sys.argv[0])[-1].split('_')[1]
83    except IndexError:
84        param = 'accesses'
85
86    if param not in ['accesses', 'kbytes', 'uptime', 'busyservers', 'idleservers']:
87        print 'unknown parameter %s' % (param)
88        sys.exit(1)
89
90    if len(sys.argv) > 1 and sys.argv[1] == 'config':
91        print_config(param)
92        sys.exit(0)
93
94    if (AUTH_TYPE == 'basic' or AUTH_TYPE == 'digest'):
95        if (AUTH_TYPE == 'basic'):
96            auth_handler = urllib2.HTTPBasicAuthHandler()
97        else:
98            auth_handler = urllib2.HTTPDigestAuthHandler()
99
100        auth_handler.add_password(realm=AUTH_REALM,
101                                  uri=STATUS_URL,
102                                  user=AUTH_USER,
103                                  passwd=AUTH_PASSWORD)
104
105        opener = urllib2.build_opener(auth_handler)
106        urllib2.install_opener(opener)
107
108    print_status(param, STATUS_URL)