diff options
Diffstat (limited to 'tools/groups-to-dot.py')
-rwxr-xr-x | tools/groups-to-dot.py | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/tools/groups-to-dot.py b/tools/groups-to-dot.py index 91230c5dd..164d5599d 100755 --- a/tools/groups-to-dot.py +++ b/tools/groups-to-dot.py @@ -10,24 +10,48 @@ colors = ['aquamarine', 'chartreuse', 'gold', 'magenta', 'indianred1', 'limegree if __name__ == '__main__': if len(sys.argv) < 2: - print "Usage groups-to-dot.py <groupsfile>" + print "Usage groups-to-dot.py [-h] <metadatadir>" raise SystemExit, 1 - groups = lxml.etree.parse(sys.argv[1]).getroot() + groups = lxml.etree.parse(sys.argv[-1] + '/groups.xml').getroot() + clients= lxml.etree.parse(sys.argv[-1] + '/clients.xml').getroot() categories = {'default':'grey83'} + instances = {} for group in groups.findall('Group'): if group.get('category', False): if not categories.has_key(group.get('category')): categories[group.get('category')] = colors.pop() print "digraph groups {" + if '-h' in sys.argv: + print '\trankdir="LR";' + for client in clients.findall('Client'): + if instances.has_key(client.get('profile')): + instances[client.get('profile')].append(client.get('name')) + else: + instances[client.get('profile')] = [client.get('name')] + for profile, clist in instances.iteritems(): + clist.sort() + print '''\t"%s-instances" [ label="%s", shape="record" ];''' % (profile, '|'.join(clist)) + print '''\t"%s-instances" -> "%s";''' % (profile, profile) + + if '-b' in sys.argv: + bundles = [] + [bundles.append(bund.get('name')) for bund in groups.findall('.//Bundle') + if bund.get('name') not in bundles] + bundles.sort() + for bundle in bundles: + print '''\t"%s" [ shape="rect"];''' % (bundle) + for group in groups.findall('Group'): color = categories[group.get('category', 'default')] if group.get('profile', 'false') == 'true': - print '\tnode [style="filled,bold", fillcolor=%s];' % (color) + print '\t"%s" [style="filled,bold", fillcolor=%s];' % (group.get('name'), color) else: - print '\tnode [style="filled", fillcolor=%s];' % (color) - print '\t"%s";' % (group.get('name')) - + print '\t"%s" [style="filled", fillcolor=%s];' % (group.get('name'), color) + if '-b' in sys.argv: + for bundle in group.findall('Bundle'): + print '\t"%s" -> "%s";' % (group.get('name'), bundle.get('name')) + for group in groups.findall('Group'): for parent in group.findall('Group'): print '\t"%s" -> "%s" ;' % (group.get('name'), parent.get('name')) |