source: trunk/packages/xvm-munin-config/host/usr/share/xvm-munin-host-config/plugins/xen_cpu @ 1767

Last change on this file since 1767 was 1765, checked in by quentin, 16 years ago

Add xen_cpu plugin for monitoring domain CPU usage

  • Property svn:executable set to *
File size: 2.4 KB
Line 
1#!/usr/bin/python
2
3from xen.xm.main import SERVER_LEGACY_XMLRPC, SERVER_XEN_API, parseServer
4from xen.xend import sxp
5
6serverType, serverURI = parseServer()
7
8if serverType == SERVER_XEN_API:
9    from xen.xm import XenAPI
10    server = XenAPI.Session(serverURI)
11    username, password = parseAuthentication()
12    server.login_with_password(username, password)
13    def logout():
14        try:
15            server.xenapi.session.logout()
16        except:
17            pass
18    atexit.register(logout)
19else:
20    from xen.util.xmlrpcclient import ServerProxy
21    server = ServerProxy(serverURI)
22
23import sys
24
25if len(sys.argv) > 1:
26    cmd = sys.argv[1]
27else:
28    cmd = None
29
30def getDomains():
31    ret = {}
32    if serverType == SERVER_XEN_API:
33        domains = server.xenapu.VM.get_all_records()
34        metrics = server.xenapi.VM_metrics.get_all_records()
35        for d in domains.values():
36            ret[d['uuid']] = {'name': d['name_label'],
37                              'cpu_time': sum(metrics[d['metrics']]['VCPUs_utilisation'].values()),
38                              'domid': d['domid'],
39                              }
40        return ret
41    else:
42        domains = server.xend.domains_with_state(True, 'all', True)
43        for d in domains:
44            ret[sxp.child_value(d, 'uuid', 'NONE')] = {'name': sxp.child_value(d, 'name', 'UNKNOWN'),
45                                                       'cpu_time': sxp.child_value(d, 'cpu_time', 0.0),
46                                                       'domid': sxp.child_value(d, 'domid', -1),
47                                                       }
48        return ret
49
50if cmd == 'config':
51    print """
52graph_title Xen domain CPU usage
53graph_args --base 1000 -r --lower-limit 0 --upper-limit 800
54graph_vlabel %
55graph_scale no
56graph_info This graph shows how CPU time is spent by Xen domains.
57graph_category system
58graph_period second"""
59    domains = getDomains()
60    for d in sorted(domains):
61        name = domains[d]['name']
62        if name[0:2] == 'd_':
63            name = 'user domain'
64        print "%s.label %s" % (d, name)
65        if domains[d]['domid'] == 0:
66            print "%s.draw AREA" % d
67        else:
68            print "%s.draw STACK" % d
69        print "%s.max 5000" % d
70        print "%s.min 0" % d
71        print "%s.type DERIVE" % d
72        print "%s.info %s" % (d, name)
73    sys.exit(0)
74
75domains = getDomains()
76for d in sorted(domains):
77    print "%s.value %s" % (d, domains[d]['cpu_time'])
Note: See TracBrowser for help on using the repository browser.