diff --git a/sip/asterisk-graph.py b/sip/asterisk-graph.py index 9262ca41c60c0f5f276ecd074c35d469d869402b..50e431472fd76f75c253e7858aeb756f89d6d870 100755 --- a/sip/asterisk-graph.py +++ b/sip/asterisk-graph.py @@ -1,72 +1,83 @@ #!/usr/bin/env python -from __future__ import print_function -from sh import neato -from sh import date -from sh import dot +# -*- coding: utf-8 -*- +""" +Génère un graphe de dépendance des extensions +du plan de numérotation d'asterisk -tmp_file = '/tmp/graph.gv' -exten_file = '/etc/asterisk/extensions.conf' -start_nodes = ["crans-sip", "crans-from-external", "ovh-sip", "crans-sms" ] +Auteur: Valentin Samir -out = file(tmp_file,'w') -arrow={} -iarrow={} +""" -print("""digraph G { -rankdir=LR -edge [len=2.50, ratio=fill] -""", file=out) -for node in start_nodes: - print('"%s" [style=filled];' % node, file=out) +from subprocess import Popen, PIPE, STDOUT +import time -file=open(exten_file).read() -file=file.split('\n[') -del(file[0]) -for context in file: - context=context.split('\n') - context_name = context[0].strip()[:-1] - arrow[context_name]= arrow.get(context_name, set()) - iarrow[context_name]= iarrow.get(context_name, set()) - del(context[0]) - print('"%s";' % context_name, file=out) - for line in context: - if line.startswith('include'): - dest=line.split('=>', 1)[1].strip() - iarrow[context_name].add(dest) - line=line.split(',') - if len(line)>2 and line[2].strip().startswith('Goto('): - dest=line[2].strip()[5:] - arrow[context_name].add(dest) +def gen_extentions_graph(exten_file, start_nodes, svg_file): + out="" + arrow={} + iarrow={} -for (context_name, dests) in arrow.items(): - for dest in dests: - print('"%s" -> "%s" [arrowhead=normal];' % (context_name, dest), file=out) -for (context_name, dests) in iarrow.items(): - for dest in dests: - print('"%s" -> "%s" [arrowhead=crow, style=dashed];' % (context_name, dest), file=out) + out+="""digraph G { + rankdir=LR + edge [len=2.50, ratio=fill] + """ + for node in start_nodes: + out+='"%s" [style=filled];' % node -print(""" - node [shape=plaintext] - subgraph cluster_01 { - key [label=< - - -
B inclus dans A : A
Saut de A vers B : A
>]; - key2 [label=< - - -
B
B
>]; - key:i1:e -> key2:j1:e [style=dashed, arrowhead=crow] - key:i2:e -> key2:j2:w [] - } -""", file=out) + file=open(exten_file).read() + file=file.split('\n[') + del(file[0]) + for context in file: + context=context.split('\n') + context_name = context[0].strip()[:-1] + arrow[context_name]= arrow.get(context_name, set()) + iarrow[context_name]= iarrow.get(context_name, set()) + del(context[0]) + out+='"%s";' % context_name + for line in context: + if line.startswith('include'): + dest=line.split('=>', 1)[1].strip() + iarrow[context_name].add(dest) + line=line.split(',') + if len(line)>2 and line[2].strip().startswith('Goto('): + dest=line[2].strip()[5:] + arrow[context_name].add(dest) -print(""" -label = "\\n\\nAsterisk extensions\\nLes Nounous\\n%s"; -}""" % str(date())[0:-1], file=out) -out.close() + for (context_name, dests) in arrow.items(): + for dest in dests: + out+='"%s" -> "%s" [arrowhead=normal];' % (context_name, dest) + for (context_name, dests) in iarrow.items(): + for dest in dests: + out+='"%s" -> "%s" [arrowhead=crow, style=dashed];' % (context_name, dest) -dot("-Tsvg", tmp_file, "-o", "/usr/scripts/var/doc/asterisk/extensions.svg") -#neato("-Tsvg", tmp_file, "-o", "/usr/scripts/var/doc/asterisk/extensions.svg") + out+=""" + node [shape=plaintext] + subgraph cluster_01 { + key [label=< + + +
B inclus dans A : A
Saut de A vers B : A
>]; + key2 [label=< + + +
B
B
>]; + key:i1:e -> key2:j1:e [style=dashed, arrowhead=crow] + key:i2:e -> key2:j2:w [] + } + """ + + out+=""" + label = "\\n\\nAsterisk extensions\\nLes Nounous\\n%s"; + }""" % time.strftime('%A %d %B %Y, %H:%M:%S') + + + p = Popen(['dot', '-Tsvg', '-o', svg_file], stdout=PIPE, stdin=PIPE, stderr=STDOUT) + p.communicate(input=out) + +if __name__ == '__main__' : + import sys + if len(sys.argv)>1: + import locale + locale.setlocale(locale.LC_TIME, 'fr_FR.UTF-8') + gen_extentions_graph('/etc/asterisk/extensions.conf', ["crans-sip", "crans-from-external", "ovh-sip", "crans-sms"], sys.argv[1])