Index: /tools/gformat.py
===================================================================
--- /tools/gformat.py	(revision 10269)
+++ /tools/gformat.py	(revision 10270)
@@ -73,4 +73,33 @@
 DOWN = 20
 UNKNOWN = 90
+
+
+def make_graph():
+  """ Process _ALL_ yaml files to get connection relations """
+  errors = ""
+  poel = {}
+  for host in get_hostlist():
+    try:
+      datadump = get_yaml(host)
+      for iface_key in datadump['autogen_iface_keys']:
+        l = datadump[iface_key]['ip']
+        addr, mask = l.split('/')
+
+        # Not parsing of these folks please
+        if not valid_addr(addr):
+          continue
+
+        addr = parseaddr(addr)
+        mask = int(mask)
+        addr = addr & ~((1 << (32 - mask)) - 1)
+        if poel.has_key(addr): 
+          poel[addr] += [host]
+        else: 
+          poel[addr] = [host]
+    except (KeyError, ValueError), e:
+      errors += "[FOUT] in '%s' interface '%s'" % (host,iface_key) 
+      errors += e
+      continue
+  return (poel, errors)
 
 
@@ -192,4 +221,27 @@
   return "\n".join(files)
 
+def generate_node_overview(host):
+  """ Print overview of all files available for node """
+  datadump = get_yaml(host)
+  params = { 'host' : host }
+  output = "<em><a href='..'>Back to overview</a></em><hr />"
+  output += "<h2>Available files:</h2><ul>"
+  for cf in files:
+    params['cf'] = cf
+    output += '<li><a href="%(host)s/%(cf)s">%(cf)s</a></li>\n' % params
+  output += "</ul>"
+
+  # Generate and connection listing
+  output += "<h2>Connected To:</h2><ul>"
+  (poel, errors) = make_graph()
+  for addr, hosts in poel.iteritems():
+    if host in hosts and len(hosts) > 1:
+      for remote in [x for x in hosts if x != host]:
+        params = { 'remote': remote}
+        output += '<li><a href="%(remote)s">%(remote)s</a></li>\n' % params
+  output += "</ul>"
+
+  output += "<hr /><em><a href='..'>Back to overview</a></em>"
+  return output
 
 
@@ -656,5 +708,7 @@
 
 
-  uri = os.environ['PATH_INFO'].strip('/').split('/')
+  base_uri = os.environ['PATH_INFO']
+  uri = base_uri.strip('/').split('/')
+
   output = ""
   if not uri[0]:
@@ -666,6 +720,10 @@
       output += generate_title(get_hostlist())
   elif len(uri) == 1:
-    output += "Content-type:text/plain\r\n\r\n"
-    output += generate_node(uri[0])
+    if is_text_request():
+      output += "Content-type:text/plain\r\n\r\n"
+      output += generate_node(uri[0])
+    else:
+      output += "Content-type:text/html\r\n\r\n"
+      output += generate_node_overview(uri[0])
   elif len(uri) == 2:
     output += "Content-type:text/plain\r\n\r\n"
@@ -868,5 +926,5 @@
 \ttest CNodeRick dnsmasq.conf  =  Receive output of CGI script
 \t                                for arguments CNodeRick/dnsmasq.conf
-\tlist <nodes|proxies>         =  List systems which marked up.
+\tlist <all|nodes|proxies>     =  List systems which marked up.
 """
   exit(0)
@@ -1012,4 +1070,6 @@
       elif sys.argv[2] == "proxies":
         systems = get_proxylist()
+      elif sys.argv[2] == "all":
+        systems = get_hostlist()
       else:
         usage()
