Add a demo script originally written by Amador Pahim to parse topology
of the host from data provided in the capabilities XML.
---
examples/python/topology.py | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
create mode 100755 examples/python/topology.py
diff --git a/examples/python/topology.py b/examples/python/topology.py
new file mode 100755
index 0000000..1b678bc
--- /dev/null
+++ b/examples/python/topology.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+# Parse topology information from the capabilities XML and use
+# them to calculate host topology
+#
+# Authors:
+# Amador Pahim <apahim(a)redhat.com>
+# Peter Krempa <pkrempa(a)redhat.com>
+
+import libvirt
+import sys
+from xml.dom import minidom
+
+try:
+ conn = libvirt.openReadOnly(None)
+except libvirt.libvirtError:
+ print 'Failed to connect to the hypervisor'
+ sys.exit(1)
+
+try:
+ capsXML = conn.getCapabilities()
+except libvirt.libvirtError:
+ print 'Failed to request capabilities'
+ sys.exit(1)
+
+caps = minidom.parseString(capsXML)
+host = caps.getElementsByTagName('host')[0]
+cells = host.getElementsByTagName('cells')[0]
+total_cpus = cells.getElementsByTagName('cpu').length
+
+socketIds = []
+siblingsIds = []
+
+socketIds = [ proc.getAttribute('socket_id')
+ for proc in cells.getElementsByTagName('cpu')
+ if proc.getAttribute('socket_id') not in socketIds ]
+
+siblingsIds = [ proc.getAttribute('siblings')
+ for proc in cells.getElementsByTagName('cpu')
+ if proc.getAttribute('siblings') not in siblingsIds ]
+
+print "Host topology"
+print "NUMA nodes:", cells.getAttribute('num')
+print " Sockets:",len(set(socketIds))
+print " Cores:",len(set(siblingsIds))
+print " Threads:",total_cpus
--
1.8.3.2