Use more efficient python API to get VM information
[invirt/packages/invirt-remote.git] / files / usr / sbin / sipb-xen-listvms
1 #!/usr/bin/python
2
3 import sys
4 sys.path.insert(0, '/usr/lib/xen-3.1-1/lib/python')
5 from xen.lowlevel.xs import xs
6
7 trans = xs()
8
9 def live_vms():
10     domids = set(trans.ls('', '/local/domain'))
11     domids.remove('0')
12
13     vms = dict()
14
15     for domid in domids:
16         name, data = get_dom(int(domid))
17         if name.startswith('d_'):
18             name = name[2:]
19             vms[name] = data
20     return vms
21
22 def get_dom(domid):
23     name = trans.read('', '/local/domain/%d/name' % domid)
24     data = dict()
25     data['domid'] = domid
26     # presence of a graphical console
27     data['console'] = trans.read('', '/local/domain/%d/device/vfb/0/state' % domid)
28     # uptime
29     data['vm'] = trans.read('', '/local/domain/%d/vm' % domid)
30     data['start_time'] = float(trans.read('', '%s/start_time' % data['vm']))
31     
32     return name, data
33
34 if __name__ == '__main__':
35     vms = live_vms()
36     if '--pickle' in sys.argv[1:]:
37         import cPickle
38         cPickle.dump(vms, sys.stdout)
39     else:
40         print vms