Skip to main content

Calculates a diff of a network topology

Project description

https://travis-ci.org/ninuxorg/netdiff.png https://coveralls.io/repos/ninuxorg/netdiff/badge.png Code Health Requirements Status https://badge.fury.io/py/netdiff.png https://pypip.in/d/netdiff/badge.png

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

  1. Join the ninux-dev mailing list

  2. Fork this repo and install it

  3. Follow PEP8, Style Guide for Python Code

  4. Write code

  5. Write tests for your code

  6. Ensure all tests pass

  7. Ensure test coverage is not under 90%

  8. Document your changes

  9. Send pull request

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

netdiff-0.2.tar.gz (27.3 kB view details)

Uploaded Source

Built Distribution

netdiff-0.2-py2.py3-none-any.whl (11.6 kB view details)

Uploaded Python 2 Python 3

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

Hashes for netdiff-0.2.tar.gz
Algorithm Hash digest
SHA256 44277c62d93608a2eee1b9b852983b6aa925dae779f458b035a64cd02e9dbef1
MD5 4db3acbb033524d63e42b6dfc62dc27a
BLAKE2b-256 bd3e639cb20d2841b889e7419c8dd2a60ca0be1664206ccd0a590a48f69e9735

See more details on using hashes here.

Provenance

File details

Details for the file netdiff-0.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for netdiff-0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 3cc56c331bd0ed3e47b7fca06c44ef12c0b87805b5956d28372f31a563e1259a
MD5 582c4e6d5305de179cee6df8105b2039
BLAKE2b-256 5dc97956ce44bdbc9299738a256ea7d4968c7845a07a6da86d19f07d1e0561cf

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page