summaryrefslogtreecommitdiffstats
path: root/retiolum/hosts/.scripts/parse.py
blob: 951fce949fe5f5f3a54f3d187be375e06794823a (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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/python2

import sys

def write_digraph(nodes):
  print ('digraph retiolum {')
  print ('  node[shape=box,style=filled,fillcolor=grey]')
  for k,v in nodes.iteritems():
    write_node(k,v)
  print ('}')
def write_node(k,v):
  node = "  "+k+"[label=\""
  node += k+"\\l"
  node += "external:"+v['external-ip']+":"+v['external-port']+"\\l"
  node += "internal:"+v['internal-ip']+"\\l\""
  if v['external-ip'] == "MYSELF":
    node += ",fillcolor=steelblue1"
  node += "]"
  print (node)
  for con in v.get('to',[]):
    print "  "+k+ "->" +con['name'] + "[weight="+str(10/float(con['weight']))+"]"

def parse_input():
  nodes={}
  for line in sys.stdin:
    line = line.replace('\n','')
    if line == 'Nodes:':
      nodes={}
      for line in sys.stdin:
        if line == 'End of nodes.\n':
          break
        l = line.replace('\n','').split() #TODO unhack me
        nodes[l[0]]= { 'external-ip': l[2], 'external-port' : l[4] }
    if line == 'Subnet list:':
      for line in sys.stdin:
        if line == 'End of subnet list.\n':
          break
        l = line.replace('\n','').split() 
        nodes[l[2]]['internal-ip'] = l[0].split('#')[0]
    if line == 'Edges:':
      edges = {}
      for line in sys.stdin:
        if line == 'End of edges.\n':
          break
        l = line.replace('\n','').split() 

        if not nodes[l[0]].has_key('to') :
          nodes[l[0]]['to'] = []
        nodes[l[0]]['to'].append(
            {'name':l[2],'addr':l[4],'port':l[6],'weight' : l[10] })
  return nodes
nodes = parse_input()
write_digraph(nodes)