From 47d4cee55a86a56b12bb47ebbefa3ad2ad4dec2e Mon Sep 17 00:00:00 2001 From: grisel-davy Date: Mon, 14 May 2018 20:03:04 +0200 Subject: [PATCH] Gestion des boucles dans le graph et des doublons dans les liens --- .../templates/topologie/graph_switch.dot | 4 +-- topologie/views.py | 25 +++++++++++-------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/topologie/templates/topologie/graph_switch.dot b/topologie/templates/topologie/graph_switch.dot index bf638d70..46c6a766 100644 --- a/topologie/templates/topologie/graph_switch.dot +++ b/topologie/templates/topologie/graph_switch.dot @@ -1,8 +1,8 @@ {% block graph_dot %} -digraph { +strict digraph { graph [label="TOPOLOGIE DU RÉSEAU", labelloc=t, fontsize=40]; node [fontname=Helvetica fontsize=8 shape=plaintext]; -edge[arrowhead=odot,arrowtail=dot]; +edge[arrowhead=none]; {% block subgraphs %} diff --git a/topologie/views.py b/topologie/views.py index 7d0fad53..4254146d 100644 --- a/topologie/views.py +++ b/topologie/views.py @@ -1010,6 +1010,7 @@ def make_machine_graph(): #Tant que la liste des oubliés n'est pas vide i.e on les a pas tous passer while missing: + links, new_detected = recursive_switchs(missing[0].ports.filter(related=None).first(), None, [missing[0]]) for link in links: dico['links'].append(link) @@ -1053,21 +1054,23 @@ def recursive_switchs(port_start, switch_before, detected): """ Parcour récursivement le switchs auquel appartient port_start pour trouver les ports suivants liés """ - links_return=[]#Liste de dictionaires qui stockes les nouveaux liens détéctés - l_ports=port_start.switch.ports.filter(related__isnull=False)#Liste des ports dont le related est non null - for port in l_ports: - #Pas le switch dont on vient, pas le switch actuel - if port.related.switch!=switch_before and port.related.switch != port.switch: - detected.append(port_start.switch) - detected.append(port.related.switch) + detected.append(port_start.switch) + links_return=[]#Liste de dictionaires qui stockes les nouveaux liens trouvés + for port in port_start.switch.ports.filter(related__isnull=False):#Liste des ports dont le related est non null + + if port.related.switch!=switch_before and port.related.switch != port.switch:#Pas le switch dont on descend, pas le switch actuel + links = { 'depart':port_start.switch.id, 'arrive':port.related.switch.id } - links_down, detected = recursive_switchs(port.related, port_start.switch, detected) + if(port.related.switch not in detected): + links_down, detected = recursive_switchs(port.related, port_start.switch, detected) + for link in links_down: + if link: + links_return.append(link) + detected.append(port.related.switch) + links_return.append(links) - for link in links_down: - if link: - links_return.append(link) return (links_return, detected)