Calculates a diff of a network topology
Project description
Netdiff is an experimental Python library that provides utilities for parsing network topologies of open source dynamic routing protocols and calculating changes in these topologies.
It was developed to abstract the differences between the different JSON structures of the open source dynamic routing protocols (like OLSR and batman-advanced).
Install stable version from pypi
Install from pypi:
pip install netdiff
Install development version
Install tarball:
pip install https://github.com/ninuxorg/netdiff/tarball/master
Alternatively you can install via pip using git:
pip install -e git+git://github.com/ninuxorg/netdiff#egg=netdiff
If you want to contribute, install your cloned fork:
git clone git@github.com:<your_fork>/netdiff.git
cd netdiff
python setup.py develop
Basic Usage Example
Calculate diff of an OLSR 0.6.x topology:
from netdiff import OlsrParser
from netdiff import diff
stored = OlsrParser('./stored-olsr.json')
latest = OlsrParser('telnet://127.0.0.1:9090')
diff(stored, latest)
The output will be a dictionary with the following structure:
{
"added": []
"removed": []
}
Parsers
Parsers are classes that extend netdiff.base.BaseParser and implement a parse method which is in charge of converting a python data structure into networkx.Graph object.
Parsers also have a json method which returns valid NetJSON output.
The available parsers are:
netdiff.OlsrParser: parser for the OLSR 0.6.x jsoninfo plugin
netdiff.BatmanParser: parser for the batman-advanced alfred tool
netdiff.NetJsonParser: parser for the NetworkGraph NetJSON object.
Parsers must be initialized with a string which can represent one of the following:
path to JSON file
HTTP url to JSON file
telnet url to JSON file
JSON formatted string
python dictionary representing a JSON structure
Local file example:
from netdiff import BatmanParser
BatmanParser('./my-stored-topology.json')
HTTP example:
from netdiff import NetJsonParser
url = 'https://raw.githubusercontent.com/interop-dev/json-for-networks/master/examples/network-graph.json'
NetJsonParser(url)
NetJSON output
Netdiff parsers can return a valid NetJSON NetworkGraph object:
from netdiff import OlsrParser
olsr = OlsrParser('telnet://127.0.0.1:9090')
# will return a dict
olsr.json(dict=True)
# will return a JSON formatted string
print(olsr.json(indent=4))
Output:
{
"type": "NetworkGraph",
"protocol": "OLSR",
"version": "0.6.6",
"revision": "5031a799fcbe17f61d57e387bc3806de",
"metric": "ETX",
"nodes": [
{
"id": "10.150.0.3"
},
{
"id": "10.150.0.2"
},
{
"id": "10.150.0.4"
}
],
"links": [
{
"source": "10.150.0.3",
"target": "10.150.0.2",
"weight": 28334
},
{
"source": "10.150.0.3",
"target": "10.150.0.4",
"weight": 1024
}
]
}
Running tests
Install your forked repo:
git clone git://github.com/<your_fork>/netdiff
cd diff/
python setup.py develop
Install test requirements:
pip install -r requirements-test.txt
Run tests with:
./runtests.py
Alternatively, you can use the nose command (which has a ton of available options):
nosetests
See test coverage with:
coverage run --source=netdiff runtests.py && coverage report
Contribute
Join the ninux-dev mailing list
Fork this repo and install it
Write code
Write tests for your code
Ensure all tests pass
Ensure test coverage is not under 90%
Document your changes
Send pull request
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file netdiff-0.2.tar.gz
.
File metadata
- Download URL: netdiff-0.2.tar.gz
- Upload date:
- Size: 27.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 44277c62d93608a2eee1b9b852983b6aa925dae779f458b035a64cd02e9dbef1 |
|
MD5 | 4db3acbb033524d63e42b6dfc62dc27a |
|
BLAKE2b-256 | bd3e639cb20d2841b889e7419c8dd2a60ca0be1664206ccd0a590a48f69e9735 |
Provenance
File details
Details for the file netdiff-0.2-py2.py3-none-any.whl
.
File metadata
- Download URL: netdiff-0.2-py2.py3-none-any.whl
- Upload date:
- Size: 11.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3cc56c331bd0ed3e47b7fca06c44ef12c0b87805b5956d28372f31a563e1259a |
|
MD5 | 582c4e6d5305de179cee6df8105b2039 |
|
BLAKE2b-256 | 5dc97956ce44bdbc9299738a256ea7d4968c7845a07a6da86d19f07d1e0561cf |