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=<>];
- 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=<>];
+ 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])