From 2ad359012494596daa8c933251e589229e1f3cf7 Mon Sep 17 00:00:00 2001 From: gifrerenom <lluis.gifre@cttc.es> Date: Fri, 14 Oct 2022 07:47:57 +0000 Subject: [PATCH] Hackfest - updated tapi_app to plot topologies --- hackfest/tapi/tapi_app/Figure_1.png | Bin 28650 -> 0 bytes hackfest/tapi/tapi_app/ols-topo.dot | 16 +++++++++ hackfest/tapi/tapi_app/ols-topo.png | Bin 0 -> 27342 bytes hackfest/tapi/tapi_app/requirements.sh | 4 +++ hackfest/tapi/tapi_app/tapi_app.py | 44 +++++++++++++++---------- 5 files changed, 46 insertions(+), 18 deletions(-) delete mode 100644 hackfest/tapi/tapi_app/Figure_1.png create mode 100644 hackfest/tapi/tapi_app/ols-topo.dot create mode 100644 hackfest/tapi/tapi_app/ols-topo.png create mode 100644 hackfest/tapi/tapi_app/requirements.sh diff --git a/hackfest/tapi/tapi_app/Figure_1.png b/hackfest/tapi/tapi_app/Figure_1.png deleted file mode 100644 index 19f6ed978fb270e2d29d8547e5704c7d094ce961..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28650 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%0D9`&F@T4V6~7l-Ee%j>qCZA|g= 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 S&4>5$Q9o|9Hod)p7V<Cpo8Ex{ diff --git a/hackfest/tapi/tapi_app/ols-topo.dot b/hackfest/tapi/tapi_app/ols-topo.dot new file mode 100644 index 000000000..89122169f --- /dev/null +++ b/hackfest/tapi/tapi_app/ols-topo.dot @@ -0,0 +1,16 @@ +strict digraph { +"node-1"; +"node-2"; +"node-3"; +"node-4"; +"node-1" -> "node-3"; +"node-1" -> "node-4"; +"node-2" -> "node-3"; +"node-2" -> "node-4"; +"node-3" -> "node-1"; +"node-3" -> "node-2"; +"node-3" -> "node-4"; +"node-4" -> "node-1"; +"node-4" -> "node-2"; +"node-4" -> "node-3"; +} diff --git a/hackfest/tapi/tapi_app/ols-topo.png b/hackfest/tapi/tapi_app/ols-topo.png new file mode 100644 index 0000000000000000000000000000000000000000..94ac969f94679d1bc9e7bad7f5810b153106a517 GIT binary patch literal 27342 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i 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 ZjtbFC%dPozgcnpvY^Tk#I%Da%{eL4nGXekr literal 0 HcmV?d00001 diff --git a/hackfest/tapi/tapi_app/requirements.sh b/hackfest/tapi/tapi_app/requirements.sh new file mode 100644 index 000000000..95832bb66 --- /dev/null +++ b/hackfest/tapi/tapi_app/requirements.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +sudo apt install graphviz +pip install -r requirements.txt diff --git a/hackfest/tapi/tapi_app/tapi_app.py b/hackfest/tapi/tapi_app/tapi_app.py index d9fc4b279..08d6facf4 100644 --- a/hackfest/tapi/tapi_app/tapi_app.py +++ b/hackfest/tapi/tapi_app/tapi_app.py @@ -4,11 +4,8 @@ import requests from requests.auth import HTTPBasicAuth import json -import matplotlib.pyplot as plt import networkx as nx -from networkx.drawing.nx_pydot import write_dot - IP = '127.0.0.1' PORT = 8080 USER = '' @@ -26,21 +23,32 @@ def retrieveTopology(ip, port, user, password, topo_uuid): print ("Retrieved Topology: " + json.dumps(response.json(), indent=4)) return topologies -def draw_topologies (topo) : - nwk_graph = nx.Graph() - - for node in topo[0]['node']: - if node['owned-node-edge-point']: - nwk_graph.add_node(node['uuid']) - - for link in topo[0]['link']: - node1 = link['node-edge-point'][0]['node-uuid'] - node2 = link['node-edge-point'][1]['node-uuid'] - nwk_graph.add_edge(node1, node2) - - nx.draw(nwk_graph, pos=nx.spring_layout(nwk_graph, scale=500)) - plt.show(block=False) - plt.savefig('{:s}.png'.format(TOPO_UUID), format='PNG') +def draw_topologies (topologies): + nwk_graph = nx.DiGraph() + + for topo in topologies: + topo_uuid = topo['uuid'] + for node in topo['node']: + if node['owned-node-edge-point']: + nwk_graph.add_node(node['uuid']) + + for link in topo['link']: + node1 = link['node-edge-point'][0]['node-uuid'] + node2 = link['node-edge-point'][1]['node-uuid'] + nwk_graph.add_edge(node1, node2) + + # Using Matplotlib + #import matplotlib.pyplot as plt + #nx.draw(nwk_graph, pos=nx.spring_layout(nwk_graph, scale=500)) + #plt.show(block=False) + #plt.savefig('{:s}.png'.format(TOPO_UUID), format='PNG') + + # Using Pydot and Graphviz + from networkx.drawing.nx_pydot import write_dot, to_pydot + write_dot(nwk_graph, '{:s}.dot'.format(topo_uuid)) + dot_graph = to_pydot(nwk_graph) + with open('{:s}.png'.format(topo_uuid), 'wb') as f: + f.write(dot_graph.create(format='png')) if __name__ == "__main__": topologies = retrieveTopology(IP, PORT, USER, PASS, TOPO_UUID) -- GitLab