diff options
| author | makefu <github@syntax-fehler.de> | 2011-11-04 14:21:26 +0100 | 
|---|---|---|
| committer | makefu <github@syntax-fehler.de> | 2011-11-04 14:21:26 +0100 | 
| commit | 0ed905da208ff9eed13878485325ea26ae2e2c8f (patch) | |
| tree | 81eb6ea1808eae5a83e3635cc8cbd553574d0020 | |
| parent | 7f69a51022ae7456c20ec5d4f0b84843561d0116 (diff) | |
//retiolum/adv_graphgen: replace old parsing style, refactoring
tinc_stats now writes the current tinc state into stdout as json
sanitize.sh uses tinc_stats and pipes the output to parse_tinc_stats.py (the name is a lie)
| -rwxr-xr-x | retiolum/scripts/adv_graphgen/parse_tinc_stats.py (renamed from retiolum/scripts/adv_graphgen/parse.py) | 52 | ||||
| -rwxr-xr-x | retiolum/scripts/adv_graphgen/sanitize.sh | 8 | ||||
| -rwxr-xr-x | retiolum/scripts/adv_graphgen/tinc_stats.py | 8 | 
3 files changed, 25 insertions, 43 deletions
| diff --git a/retiolum/scripts/adv_graphgen/parse.py b/retiolum/scripts/adv_graphgen/parse_tinc_stats.py index e99a5573..c02c9a84 100755 --- a/retiolum/scripts/adv_graphgen/parse.py +++ b/retiolum/scripts/adv_graphgen/parse_tinc_stats.py @@ -49,11 +49,14 @@ def write_stat_node(nodes):  def generate_stats(nodes):    """ Generates some statistics of the network and nodes    """ -  f = open(DUMP_FILE,'r') +  try: +    f = open(DUMP_FILE,'r') +    f.close() +  except Exception,e: +    f = []    jlines = []    for line in f:      jlines.append(json.loads(line)) -  f.close()    for k,v in nodes.iteritems():      conns = v.get('to',[])      v['num_conns'] = len(conns) @@ -89,7 +92,10 @@ def get_node_availability(name,jlines):        #sys.stderr.write("%s offline at timestamp %f\n" %(name,current))      last = ts    all_the_time = last - begin -  return uptime/ all_the_time +  try: +    return uptime/ all_the_time +  except: +    return 1  def delete_unused_nodes(nodes):    new_nodes = {} @@ -156,38 +162,12 @@ def write_node(k,v):      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() +def decode_input(FILE): +  return json.load(FILE) +nodes = decode_input(sys.stdin)  nodes = delete_unused_nodes(nodes) -dump_graph(nodes) +try: +  dump_graph(nodes) +except Exception,e: +  sys.stderr.write("Cannot dump graph: %s" % str(e))  write_digraph(nodes) diff --git a/retiolum/scripts/adv_graphgen/sanitize.sh b/retiolum/scripts/adv_graphgen/sanitize.sh index 3fddb605..16479304 100755 --- a/retiolum/scripts/adv_graphgen/sanitize.sh +++ b/retiolum/scripts/adv_graphgen/sanitize.sh @@ -1,18 +1,18 @@  #!/bin/sh -HERE=$(dirname `readlink -f $0`) +cd $(dirname `readlink -f $0`)  GRAPH_SETTER1=dot  GRAPH_SETTER2=circo  GRAPH_SETTER3='neato -Goverlap=prism '  GRAPH_SETTER4=sfdp -LOG_FILE=/var/log/syslog +#LOG_FILE=/var/log/syslog  TYPE=svg  TYPE2=png  OPENER=/bin/true  DOTFILE=`mktemp`  trap 'rm $DOTFILE' SIGINT SIGTERM  sudo pkill -USR2 tincd -sudo sed -n '/tinc.retiolum/{s/.*tinc.retiolum\[[0-9]*\]: //gp}' $LOG_FILE |\ -    $HERE/parse.py > $DOTFILE +sudo python tinc_stats.py |\ +    python parse_tinc_stats.py > $DOTFILE  $GRAPH_SETTER1 -T$TYPE -o $1/retiolum_1.$TYPE $DOTFILE  $GRAPH_SETTER2 -T$TYPE -o $1/retiolum_2.$TYPE $DOTFILE diff --git a/retiolum/scripts/adv_graphgen/tinc_stats.py b/retiolum/scripts/adv_graphgen/tinc_stats.py index 0d3ebb11..fb238abe 100755 --- a/retiolum/scripts/adv_graphgen/tinc_stats.py +++ b/retiolum/scripts/adv_graphgen/tinc_stats.py @@ -2,6 +2,8 @@  from BackwardsReader import BackwardsReader  import os  import re +import sys +import json  TINC_NETWORK = os.environ.get("TINC_NETWORK","retiolum") @@ -30,7 +32,6 @@ def get_tinc_block(log_file):      line = BOL.sub('',line).strip()      if END_SUBNET in line: -      print("Found end of block")        in_block = True      if not in_block: @@ -39,7 +40,6 @@ def get_tinc_block(log_file):      tinc_block.append(line)      if BEGIN_NODES in line: -      print("Found begin of block")        break    return reversed(tinc_block) @@ -74,4 +74,6 @@ def parse_input(log_data):              {'name':l[2],'addr':l[4],'port':l[6],'weight' : l[10] })    return nodes -print parse_input((get_tinc_block(SYSLOG_FILE))) + +if __name__ == '__main__': +  print json.dumps(parse_input((get_tinc_block(SYSLOG_FILE)))) | 
