Changeset 11753 in genesis


Ignore:
Timestamp:
Feb 14, 2013, 10:52:07 PM (12 years ago)
Author:
rick
Message:

Make pretty NS connection graphs.

Example: ../tools/make-network-graph.py Watertoren Kempers RecPark Kaag2 Herman HMKerk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/make-network-graph.py

    r10890 r11753  
    2121  pass
    2222
     23def pass_filter(host):
     24  for t in sys.argv:
     25    if t in host:
     26       return True
     27  return False
     28
     29nodes = {}
     30
    2331def make_graph():
    2432  poel = {}
     
    2735  try:
    2836    for host in gformat.get_hostlist():
     37      if not pass_filter(host):
     38        continue
    2939      print "## Processing host", host
    3040      datadump = gformat.get_yaml(host)
     41      nodename = datadump['nodename']
    3142      iface_keys = [elem for elem in datadump.keys() if (elem.startswith('iface_') and not "lo0" in elem)]
     43      nodes[nodename] = datadump
    3244      for iface_key in iface_keys:
    3345        l = datadump[iface_key]['ip']
     
    4153        mask = int(mask)
    4254        addr = addr & ~((1 << (32 - mask)) - 1)
     55        nk = nodename + ':' + datadump[iface_key]['autogen_ifname']
    4356        if poel.has_key(addr):
    44           poel[addr] += [host]
     57          poel[addr] += [nk]
    4558        else:
    46           poel[addr] = [host]
     59          poel[addr] = [nk]
    4760          # Assume all ns_ip to be 11a for a moment
    4861          if datadump[iface_key].has_key('ns_ip'):
     
    5366          link_data[addr] = 1
    5467          iface = datadump[iface_key]['autogen_ifname']
    55           nodename = datadump['nodename']
    5668          print nodename, iface
    5769          INTERVAL = 60 * 10
     
    7183    sys.exit(1)
    7284
    73   #f = tempfile.NamedTemporaryFile(bufsize=0)
    7485  f = open('/tmp/test.dot','w')
    7586  sys.stderr.write("# Building temponary graph file\n")
    76   print >> f, "Graph WirelessLeidenNetwork {"
     87  print >> f, "digraph WirelessLeidenNetwork {"
    7788  print >> f ,"""
    78 graph [ fontsize = 36,
     89graph [ fontsize = 10,
    7990        overlap = scalexy,
    8091        splines = true,
     92        rankdir = LR,
    8193      ]
     94node [ fontsize = 10, ]
     95edge [ fontsize = 10, ]
    8296"""
     97  for node, datadump in nodes.iteritems():
     98    lines = [node]
     99    for ik in datadump['autogen_iface_keys']:
     100      if 'alias' in ik or 'wlan' in datadump[ik]['autogen_ifname']:
     101        continue
     102      if datadump[ik].has_key('ns_mac'):
     103        lines.append('<%(autogen_ifname)s> %(bridge_type)s at %(autogen_ifname)s - %(ns_mac)s\\n%(ssid)s\\n%(ns_ip)s' % datadump[ik])
     104      else:
     105        lines.append('<%(autogen_ifname)s> %(autogen_ifname)s' % datadump[ik])
     106    print >> f,"""
     107"%s" [
     108shape = "record"
     109label = "%s"
     110];
     111""" % (node, "|".join(lines))
     112
     113
    83114  for addr,leden in poel.iteritems():
    84115    if link_type[addr] == '11a':
     
    95126    for index,lid in enumerate(leden[:-1]):
    96127      for buur in leden[index + 1:]:
    97         print >> f,'  %s -- %s [label="%s", color="%s", weight="%s", style="setlinewidth(%s)"]' % (lid, buur, gformat.showaddr(addr), color, weight, width)
     128        print >> f,'  %s -> %s [color="%s", weight="%s", style="setlinewidth(%s)"]' % (lid, buur, color, weight, width)
    98129  print >> f, "}"
    99130  f.flush()
Note: See TracChangeset for help on using the changeset viewer.