From e0ec5d2e8560ae433ee677622b24ba82dbe7630b Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 29 May 2011 15:47:21 +0200 Subject: lowered filesystem hierarchy--everything are modules --- retiolum/scripts/adv_graphgen/parse.py | 101 +++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100755 retiolum/scripts/adv_graphgen/parse.py (limited to 'retiolum/scripts/adv_graphgen/parse.py') diff --git a/retiolum/scripts/adv_graphgen/parse.py b/retiolum/scripts/adv_graphgen/parse.py new file mode 100755 index 00000000..639c5316 --- /dev/null +++ b/retiolum/scripts/adv_graphgen/parse.py @@ -0,0 +1,101 @@ +#!/usr/bin/python2 +# -*- coding: utf8 -*- + +import sys +""" TODO: Refactoring needed to pull the edges out of the node structures again, +it should be easier to handle both structures""" + +def write_digraph(nodes): + """ + writes the complete digraph in dot format + """ + print ('digraph retiolum {') + print (' node[shape=box,style=filled,fillcolor=grey]') + generate_stats(nodes) + nodes = delete_unused_nodes(nodes) + merge_edges(nodes) + for k,v in nodes.iteritems(): + write_node(k,v) + print ('}') +def generate_stats(nodes): + """ Generates some statistics of the network and nodes + """ + for k,v in nodes.iteritems(): + v['num_conns'] = len(v.get('to',[])) +def delete_unused_nodes(nodes): + new_nodes = {} + for k,v in nodes.iteritems(): + if v.get('to',[]): + new_nodes[k] = v + return new_nodes +def merge_edges(nodes): + """ merge back and forth edges into one + DESTRUCTS the current structure by deleting "connections" in the nodes + + """ + for k,v in nodes.iteritems(): + for con in v.get('to',[]): + for i,secon in enumerate(nodes[con['name']].get('to',[])): + if k == secon['name']: + del (nodes[con['name']]['to'][i]) + con['bidirectional'] = True + + +def write_node(k,v): + """ writes a single node and its edges + edges are weightet with the informations inside the nodes provided by + tinc + """ + node = " "+k+"[label=\"" + node += k+"\\l" + node += "external:"+v['external-ip']+":"+v['external-port']+"\\l" + if v.has_key('num_conns'): + node += "Num Connects:"+str(v['num_conns'])+"\\l" + for addr in v.get('internal-ip',['¯\\\\(°_o)/¯']): + node += "internal:"+addr+"\\l" + node +="\"" + if v['external-ip'] == "MYSELF": + node += ",fillcolor=steelblue1" + node += "]" + print node + + for con in v.get('to',[]): + edge = " "+k+ " -> " +con['name'] + "[weight="+str(float(con['weight'])) + if con.get('bidirectional',False): + edge += ",dir=both" + edge += "]" + print edge + +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() + if not nodes[l[2]].get('internal-ip',False): + nodes[l[2]]['internal-ip'] = [] + nodes[l[2]]['internal-ip'].append(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) -- cgit v1.2.3 From 8f3a8ad37da0d683a851a11fe6b55d0a45403b5c Mon Sep 17 00:00:00 2001 From: Felix Richter Date: Mon, 30 May 2011 18:12:42 +0200 Subject: added overlap=false fix, neato grapher --- retiolum/scripts/adv_graphgen/parse.py | 1 + 1 file changed, 1 insertion(+) (limited to 'retiolum/scripts/adv_graphgen/parse.py') diff --git a/retiolum/scripts/adv_graphgen/parse.py b/retiolum/scripts/adv_graphgen/parse.py index 639c5316..9c2dd051 100755 --- a/retiolum/scripts/adv_graphgen/parse.py +++ b/retiolum/scripts/adv_graphgen/parse.py @@ -11,6 +11,7 @@ def write_digraph(nodes): """ print ('digraph retiolum {') print (' node[shape=box,style=filled,fillcolor=grey]') + print (' overlap=false') generate_stats(nodes) nodes = delete_unused_nodes(nodes) merge_edges(nodes) -- cgit v1.2.3 From 02824eed4f957e25bf9bfda6bf09e093447abb68 Mon Sep 17 00:00:00 2001 From: makefu Date: Mon, 8 Aug 2011 23:36:42 +0200 Subject: retiolum/scripts/adv_graphgen: verb krebs output retiolum/scripts/adv_graphgen/parse.py: add the group info to the krebs parser retiolum/scripts/adv_graphgen/sanitize.sh: fixed bug which prevents generation of 4 graph new graph setter at retiolum_4.png --- retiolum/scripts/adv_graphgen/parse.py | 1 + 1 file changed, 1 insertion(+) (limited to 'retiolum/scripts/adv_graphgen/parse.py') diff --git a/retiolum/scripts/adv_graphgen/parse.py b/retiolum/scripts/adv_graphgen/parse.py index 9c2dd051..0744b262 100755 --- a/retiolum/scripts/adv_graphgen/parse.py +++ b/retiolum/scripts/adv_graphgen/parse.py @@ -57,6 +57,7 @@ def write_node(k,v): node +="\"" if v['external-ip'] == "MYSELF": node += ",fillcolor=steelblue1" + node +=",group="+v['external-ip'].replace(".","")+"" node += "]" print node -- cgit v1.2.3 From 9a7a3afcb949ebe807965d154c00836c462177ff Mon Sep 17 00:00:00 2001 From: EUcancER Date: Thu, 1 Sep 2011 11:00:15 +0200 Subject: adv_graphgen: fix sanitize and parse sanitze.sh now creates dot file in temp directory parse now correctly creates group attribute --- retiolum/scripts/adv_graphgen/parse.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'retiolum/scripts/adv_graphgen/parse.py') diff --git a/retiolum/scripts/adv_graphgen/parse.py b/retiolum/scripts/adv_graphgen/parse.py index 4b9314cc..0bcf42a0 100755 --- a/retiolum/scripts/adv_graphgen/parse.py +++ b/retiolum/scripts/adv_graphgen/parse.py @@ -47,6 +47,7 @@ def write_node(k,v): edges are weightet with the informations inside the nodes provided by tinc """ + node = " "+k+"[label=\"" node += k+"\\l" node += "external:"+v['external-ip']+":"+v['external-port']+"\\l" @@ -57,7 +58,7 @@ def write_node(k,v): node +="\"" if v['external-ip'] == "MYSELF": node += ",fillcolor=steelblue1" - node +=",group="+v['external-ip'].replace(".","")+"" + node +=",group=\""+v['external-ip'].replace(".","")+"\"" node += "]" print node -- cgit v1.2.3