openwisp / django-netjsongraph

Network Topology Visualizer & Network Topology Collector
MIT License
139 stars 64 forks source link

Search feature #14

Open acoul opened 7 years ago

acoul commented 7 years ago

is it possible to have a search feature, menu ?

it would be great to be able to select a specific node and also be able to set the depth of the next hops for each link to be solely displayed

something similar perhaps to http://bgpmap.ozo.com/?nodeID=3298

nemesifier commented 7 years ago

I can't see that URL, you linked an hostname that is not public but used inside the AWMN network.

acoul commented 7 years ago

sorry about that, fixed the above link.

acoul commented 7 years ago

bumping this request with the following wishlist extra features:

1). select links by status: display only up or down links 2). when selecting a node, in the menu, additional display up & down links for that node 3). selecting a link, up or down, display the uptime/downtime

real time django-netjsongraph for AWMN here: http://nmsbgp.ozo.com/

nemesifier commented 7 years ago

@acoul, thanks for sending your feedback! Unfortunately I can't see the link you posted, I get an internal server error.

Regarding 3), to display uptime/downtime we should start collecting this information somehow. This can become a separate issue.

Regarding 2), which menu?

Regarding 1), you mean you want to be able to do this in the visualizer, right?

Bytheway: in general I think it's better to open one issue for each request.

We are working to improve this app and the visualizer (https://github.com/netjson/netjsongraph.js), but I can't say when we'll be able to address these issues.

Can you or someone of your community help out with contributions and patches?

acoul commented 7 years ago

Fixed the internal server error issue, you may now hopefully see it in action. It's a bit messy since it's trying to graph a big BGP network.

Regarding 2), when selecting a node, I mean the little display window that pops up on the upper right corner

Regarding 1), yes

as far as AWMN community, we are talking about a quite old community (15+ years) and we are going through a 4th generation participants who unfortunately lack the enthusiasm and commitment of the AWMN original pioneers.

Regards from the sunny Athens, Greece

nemesifier commented 7 years ago

I've seen it in action, pretty impressive. You may benefit of the work we are doing in the next version of the visualizer (netjsongraph.js) because we are refactoring the javascript code to use canvas instead of SVG which is better suited for graphs with lots of points and lines.

For 1) I think we have to come up with some kind of filtering mechanism in the netjsongraph.js library.

For 2) also something may be needed to be done in netjsongraph.js before being able to implement it properly.

Regarding 3), could you open a separate issue on this repository please? That's doable and I may try to implement it in my free time in the coming weeks.

Regarding AWMN, I know the community, I've been to the battlemesh in Athens in 2012 :-). Glad to see the community is still alive and kicking, I know how hard it is to find contributors in this type of community. Let's keep in touch and if you find anybody interested in helping us out we will be here!

nemesifier commented 7 years ago

@acoul PS: how did you convert the BGP network to NetJSON? If you wrote some software we could include it in netdiff (the library we are using in this app to convert OLSRd/Batman/etc to NetJSON)

acoul commented 7 years ago

Regarding 3), I opened a new ticket #43

for converting BGP network to NetJSON I used this handy tool: aspath_graph

nemesifier commented 7 years ago

@acoul great to know you used @coxley's tool!

I suppose you are converting the BGP data to NetJSON and storing the NetJSON on some file and then feeding data file into this app. Is my supposition correct?

I ask this because I think that without too much effort we could add this mechanism so is available out of the box.

acoul commented 7 years ago

In order to have a better, more reliable view of the network, we created a so-called SupperQuagga. A passive BGP collector that multihop connects to 100+ different BGP speakers from all around the network.

after a bit of trial & error, here is the hackish script that generates a NetJSON output that makes django-netjsongraph happy :

vtysh -c "sh ip bgp 10.0.0.0/8 long" | cut -c 62-900 | grep " i" | awk -F " i" '{printf $1"\n"}' | awk 'NF > 1 && NF < 24' > /tmp/awmn-bgp-all
cat /tmp/awmn-bgp-all | tr ' ' '\n' | sort -n | uniq > /tmp/awmn-full-uniq-as
rm -f /tmp/awmn-tottal-full-links
for i in cat /tmp/awmn-full-uniq-as
do
    grep " $i | $i$" /tmp/awmn-bgp-all | awk -v FS=" ${i} | ${i}$" 'NF > 1 {print $1}' | awk -F " " '{printf $NF"\n"}' | grep -vw $i | grep . | sort -n | uniq > /tmp/as-tmp
    grep "^$i | $i " /tmp/awmn-bgp-all | awk -v FS="^${i} | ${i} " 'NF > 1 {print $2}' | awk -F " " '{printf $1"\n"}' | grep -vw $i | grep . | sort -n | uniq >> /tmp/as-tmp
    cat /tmp/as-tmp | sort -n | uniq | awk -v var="$i" '{printf var" "$0"\n"}' >> /tmp/awmn-tottal-full-links
done
rm -f /tmp/awmn-bgp-all /tmp/awmn-full-uniq-as /tmp/as-tmp
aspath_graph -m txt --pprint --yaml /opt/lg-bin/config-awmn-new.yaml -o /var/www/ozo.com/htdocs/cacti//awmn.json /tmp/awmn-tottal-full-links
cd /var/www/ozo.com/htdocs/cacti/birdlg/nmsbgp
./manage.py update_topology

and here is the NetJSON output: http://spq.ozo.com/awmn.json

nemesifier commented 7 years ago

@acoul impressive work, thanks for sharing it. I think you guys should talk more about your work so other community networks can find out and reuse what you do because it's great stuff. I think over time with more work we'll be able to make the process you are using to collect the BGP graph easier.