summaryrefslogtreecommitdiffstats
path: root/tools/groups-to-dot.py
blob: 91230c5ddf7130a8abf35d01cb9d291ec8488f5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env python

'''This script generates graphviz diagrams using bcfg2 metadata'''
__revision__ = '$Revision$'

import lxml.etree, sys

colors = ['aquamarine', 'chartreuse', 'gold', 'magenta', 'indianred1', 'limegreen', 'midnightblue',
          'lightblue', 'limegreen']

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print "Usage groups-to-dot.py <groupsfile>"
        raise SystemExit, 1
    groups = lxml.etree.parse(sys.argv[1]).getroot()
    categories = {'default':'grey83'}
    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 {"
    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)
        else:
            print '\tnode [style="filled", fillcolor=%s];' % (color)
        print '\t"%s";' % (group.get('name'))

    for group in groups.findall('Group'):
        for parent in group.findall('Group'):
            print '\t"%s" -> "%s" ;' % (group.get('name'), parent.get('name'))
    print "}"