]> git.pld-linux.org Git - packages/xen.git/blob - xen-init-list
Merge branch 'xen-4.6'
[packages/xen.git] / xen-init-list
1 #!/usr/bin/python
2
3 from __future__ import print_function
4
5 import json
6 import re
7 import sys
8 import subprocess
9
10
11 class SXPParser(object):
12     tokenizer_rules = r""" (?P<open> \( ) | (?P<close> \) ) | (?P<whitespace> \s+ ) | [^()^\s]+ """
13     tokenizer_re = re.compile(tokenizer_rules, re.X)
14
15     def __init__(self):
16         self.stack = []
17         self.data = []
18
19     def __call__(self, input):
20         for match in self.tokenizer_re.finditer(input):
21             if match.group('open'):
22                 self.stack.append([])
23             elif match.group('close'):
24                 top = self.stack.pop()
25                 if self.stack:
26                     self.stack[-1].append(top)
27                 else:
28                     self.data.append(top)
29             elif match.group('whitespace'):
30                 pass
31             else:
32                 if self.stack:
33                     self.stack[-1].append(match.group())
34         return self.data
35
36
37 class Data(object):
38     def __call__(self, out):
39         for domid, info in sorted(self.data.iteritems(), reverse=True):
40             print(str(domid), *info)
41
42
43 class DataJSON(Data):
44     def __init__(self, p):
45         s = json.loads(p)
46         self.data = d = {}
47         for i in s:
48             domid = i['domid']
49             name = i['config']['c_info']['name']
50             d[domid] = (name, )
51
52
53 class DataSXP(Data):
54     def __init__(self, p):
55         s = SXPParser()(p)
56         self.data = d = {}
57         for i in s:
58             if i and i[0] == 'domain':
59                 try:
60                     data = dict(j for j in i if len(j) == 2)
61                     domid = int(data['domid'])
62                     name = data['name']
63                     if domid == 0:
64                         continue
65                     d[domid] = (name, )
66                 except (KeyError, ValueError) as e:
67                     pass
68
69
70 if __name__ == '__main__':
71     p = subprocess.check_output(('/usr/lib/xen/bin/xen-toolstack', 'list', '-l'))
72     if p[0] == '(':
73         d = DataSXP(p)
74     else:
75         d = DataJSON(p)
76     d(sys.stdout)
77
This page took 0.091828 seconds and 3 git commands to generate.