NORDUnet Network Inventory project

NORDUnet Network inventory project is divided in to three parts.

  • Producers that produce data files in the NERDS format.
  • Consumers that uses the collected data. NOCLook is one of those consumers.
  • Repository for version control. We use git.

NERDS project

NERDS stand for Network Enterprise Resource Discovery System. A collaborative effort between initially NORDUnet and Stockholm University to collect reusable data about "stuff" on our networks. The collected data is saved in a JSON format by the producers. The thought is that you then can create consumers for data that was collected by someone else or use a producer that you have not written yourself.

https://github.com/fredrikt/nerds

nerdsPhilosophy

NERDS JSON structure
{   
   "host": {
      "name": "hostname-or-other-unique-identifier",
      "version": 1,
      "name-of-producer": { ... any private data ... }
   }
}
JSON data from the Alcatel ISIS producer
{
    "host": {
        "alcatel_isis": {
            "data": {
                "ip_address": "", 
                "link": "", 
                "name": "NU-TUG-LM-02", 
                "osi_address": "4700230000000100010001000100206066D6F81D", 
                "ots": "NA", 
                "type": "ne1626LM"
            }, 
            "name": "NU-TUG-LM-02", 
            "neighbours": [
                {
                    "metric": "12", 
                    "name": "NU-ORE-TSS-01"
                }
            ]
        }, 
        "name": "NU-TUG-LM-02", 
        "version": 1
    }
}

NOCLook

NOCLook is one of the possible consumer for the collected NERDS data. It is a web app built with Django and the Neo4j graph database.

All nodes have a SQL node handle to make it easy to use regular Django reusable apps like Django Comments or Taggit.
The nodes also have a node type that is stored in the SQL database.

NodeHandle model properties
# Handle <-> Node data
    handle_id = models.AutoField(primary_key=True)
    # Data shared with the node
    node_name = models.CharField(max_length=200)
    node_type = models.ForeignKey(NodeType)
    node_meta_type = models.CharField(max_length=255,
        choices=NODE_META_TYPE_CHOICES)
    # Meta information
    creator = models.ForeignKey(User, related_name='creator')
    created = models.DateTimeField(auto_now_add=True)
    modifier = models.ForeignKey(User, related_name='modifier')
    modified = models.DateTimeField(auto_now=True)
    .
    .
    methods

http://git.nordu.net/?p=norduni.git

https://portal.nordu.net/display/NI/

Graph Data Model

Data model

Actual Data in model

Actual data in model