--- /dev/null
+#!/usr/bin/python
+
+from xen.xm.main import SERVER_LEGACY_XMLRPC, SERVER_XEN_API, parseServer
+from xen.xend import sxp
+
+serverType, serverURI = parseServer()
+
+if serverType == SERVER_XEN_API:
+ from xen.xm import XenAPI
+ server = XenAPI.Session(serverURI)
+ username, password = parseAuthentication()
+ server.login_with_password(username, password)
+ def logout():
+ try:
+ server.xenapi.session.logout()
+ except:
+ pass
+ atexit.register(logout)
+else:
+ from xen.util.xmlrpcclient import ServerProxy
+ server = ServerProxy(serverURI)
+
+import sys
+
+if len(sys.argv) > 1:
+ cmd = sys.argv[1]
+else:
+ cmd = None
+
+def getDomains():
+ ret = {}
+ if serverType == SERVER_XEN_API:
+ domains = server.xenapu.VM.get_all_records()
+ metrics = server.xenapi.VM_metrics.get_all_records()
+ for d in domains.values():
+ ret[d['uuid']] = {'name': d['name_label'],
+ 'cpu_time': sum(metrics[d['metrics']]['VCPUs_utilisation'].values()),
+ 'domid': d['domid'],
+ }
+ return ret
+ else:
+ domains = server.xend.domains_with_state(True, 'all', True)
+ for d in domains:
+ ret[sxp.child_value(d, 'uuid', 'NONE')] = {'name': sxp.child_value(d, 'name', 'UNKNOWN'),
+ 'cpu_time': sxp.child_value(d, 'cpu_time', 0.0),
+ 'domid': sxp.child_value(d, 'domid', -1),
+ }
+ return ret
+
+if cmd == 'config':
+ print """
+graph_title Xen domain CPU usage
+graph_args --base 1000 -r --lower-limit 0 --upper-limit 800
+graph_vlabel %
+graph_scale no
+graph_info This graph shows how CPU time is spent by Xen domains.
+graph_category system
+graph_period second"""
+ domains = getDomains()
+ for d in sorted(domains):
+ name = domains[d]['name']
+ if name[0:2] == 'd_':
+ name = 'user domain'
+ print "%s.label %s" % (d, name)
+ if domains[d]['domid'] == 0:
+ print "%s.draw AREA" % d
+ else:
+ print "%s.draw STACK" % d
+ print "%s.max 5000" % d
+ print "%s.min 0" % d
+ print "%s.type DERIVE" % d
+ print "%s.info %s" % (d, name)
+ sys.exit(0)
+
+domains = getDomains()
+for d in sorted(domains):
+ print "%s.value %s" % (d, domains[d]['cpu_time'])