Requirements

  • Entity with unique name
  • contains properties
  • filterable (logical and between properties), pagable(size: 10, 20, 50, 100), sortable (multiple properties,ascending, descending, default)
  • properties have unique names per entity (not translated - will be translated through seperate service if neccessary)
  • CRUD (Create, Read, Update, Delete)-functionalities
  • auth required, token based (has to be optimized - maybe independent from odl)
  • export function
  • additional result information:
  • page number (1..n,  if requested page>n page=n)
  • page size (number of current filtered elements)
  • result size (number of all elements for filter)
  • payload: JSON (no '-' for properties, entities)
  • yang spec !
  • Language 
  •  Localization
  • change events via websocket (needs subscription for this entity)
  • Term "Mountpoint" code consolidation
    • Server: The terms "mountpoint", "mountpoint-id" (different writings)  and "node-name" will be consolidated and replaced by the single term "node-id" in the code and in the database types.
    • ODLUX Apps: There are different names used for the same id. Should be consolidated to "Nodename"
  • Filter specification according to UX-Framework Tablefilter

Further points&questions:   

Entities: 

  • NetworkElementConnection (filter: isRequired:boolean, connectionState: enum<string>)
    • connection-state=enum("connected","mounted","unmounted","connecting","disconnected",("idle"))
  • NetworkElementConnectionLog
  • NetworkElementConfiguration (only proxy for restconf) → implemented in APIGateway
  • FaultCurrent
  • FaultLog
  • (Log)
  • PMData15m
  • PMData24h
  • MediatorServer
  • Inventory
  • Maintenance
  • Status

Request-Url:

POST /restconf/operations/data-provider:{lowercase(REQ_METHOD)}-{entity}[-list]

e.g.:

POST /restconf/operations/data-provider:read-mediator-server-list
POST /restconf/operations/data-provider:create-mediator-server
POST /restconf/operations/data-provider:update-mediator-server
POST /restconf/operations/data-provider:delete-mediator-server


for default request-methods:

CREATE, READ, UPDATE, DELETE


Filter-Object: (See UX-Framework Tablefilter)

Each answer contains "output" to specify the request related to the table behind:

"output": { 
     "pagination":{      
           "size":20, <-- Number of requested objects
           "page":1,  <-- Page delivered back
           "total": 3 <-- Total number of Objects in overall list
      },
     { <-- List of objects on this page. Number of objects are the really available one's on this page. Could be less requested.

Request Entity-Example:

POST /restconf/operations/data-provider:read-faultcurrent-list
{
  "input":{
    "filter":[],
    "sortorder":[],
    "pagination":{
      "size":20,
      "page":1
    }
  }
}

Response:

{
  "output": {
    "pagination":{
       "size":20,
       "page":1,
	   "total": 3    
    },
    "data": [
        {
            "id": "Sim2230/LP-MWPS-TTP-RADIO/rslIsExceeded",
            "node-id": "Sim2230",
            "counter": "2",
            "timestamp": "2017-01-01T01:00:00.0Z",
            "object-id": "LP-MWPS-TTP-RADIO",
            "problem": "rslIsExceeded",
            "severity": "Critical",
            "type": "ProblemNotificationXml"
        },
        {
            "id": "Sim2231/LP-MWPS-TTP-RADIO/rslIsExceeded",
            "node-id": "Sim2231",
            "counter": "3",
            "timestamp": "2017-01-01T02:00:00.0Z",
            "object-id": "LP-MWPS-TTP-RADIO",
            "problem": "rslIsExceeded",
            "severity": "Critical",
            "type": "ProblemNotificationXml"
        },
        {
            "id": "Sim2230/LP-MWPS-TTP-RADIO/signalLost",
            "node-id": "Sim2230",
            "counter": "4",
            "timestamp": "2017-01-01T03:00:00.0Z",
            "object-id": "LP-MWPS-TTP-RADIO",
            "problem": "signalLost",
            "severity": "Major",
            "type": "ProblemNotificationXml"
        }
    ]
  }
}


POST /restconf/operations/data-provider:read-faultcurrent-list
{
  "filter":[],
  "sortorder":[{
     "property":"timeStamp",
     "sortorder":"descending"
   },
   { 
     "property":"nodeName",
     "sortorder":"ascending"
  }],
  "pagination":{
    "size":20,
    "page":1
  }
}

Response:

{
    "pagination":{
       "size":20,
       "page":1,
	   "total": 3    
    },
    "data": [
        {
            "id": "Sim2230/LP-MWPS-TTP-RADIO/signalLost",
            "node-id": "Sim2230",
            "counter": "4",
            "timestamp": "2017-01-01T03:00:00.0Z",
            "object-id": "LP-MWPS-TTP-RADIO",
            "problem": "signalLost",
            "severity": "Major",
            "type": "ProblemNotificationXml"
        },
        {
            "id": "Sim2231/LP-MWPS-TTP-RADIO/rslIsExceeded",
            "nodeName": "Sim2231",
            "counter": "3",
            "timestamp": "2017-01-01T02:00:00.0Z",
            "object-id": "LP-MWPS-TTP-RADIO",
            "problem": "rslIsExceeded",
            "severity": "Critical",
            "type": "ProblemNotificationXml"
        },
        {
            "id": "Sim2230/LP-MWPS-TTP-RADIO/rslIsExceeded",
            "nodeName": "Sim2230",
            "counter": "2",
            "timestamp": "2017-01-01T01:00:00.0Z",
            "object-id": "LP-MWPS-TTP-RADIO",
            "problem": "rslIsExceeded",
            "severity": "Critical",
            "type": "ProblemNotificationXml"
        }
    ]
}

Entities

NetworkElementConnection (network-element-connection)

{
    "id": "safnoincaosnf",
    "node-id": "sim2",
    "host": "10.20.5.2",
    "port": 12600,
    "status": "connected",
	"core-model-capability":"2017-03-20",
	"device-type":"wireless transport",
	"is-required":true,
    "node-details": {
        "available-capabilites": [
            {
                "capability-origin": "device-advertised",
                "capability": "urn:ietf:params:netconf:base:1.0"
            }
        ],
        "unavailable-capabilities": [
            {
                "capability": "(urn:ietf:params:xml:ns:yang:ietf-system?revision=2014-08-06)ietf-system",
                  "failure-reason": "unable-to-resolve"
            }
        ]
    }
}

create: (create-network-element-connection)

POST /restconf/operations/data-provider:create-network-element-connection

{
	"input": {
    	"node-id": "sim2",
    	"host": "10.20.5.2",
    	"port": 12600,
		"username":"user",
		"password":"password",
        "is-required":true
    }
}

ConnectionLog (connectionlog)

{
    "id":"AW0kpBcp8r4e_0bbEEpk",
	"node-id":"sim1",
	"status":"connected",
	"timestamp":"2019-09-12T08:43:16.6Z"
}

FaultCurrent (faultcurrent)

{
	"id": "Sim2230/LP-MWPS-TTP-RADIO/rslIsExceeded",
    "node-id": "Sim2230",
    "counter": "2",
    "timestamp": "2017-01-01T01:00:00.0Z",
    "object-id": "LP-MWPS-TTP-RADIO",
    "problem": "rslIsExceeded",
    "severity": "Critical",
     "type": "ProblemNotificationXml"
}

FaultLog (faultlog)

{
	"id": "Sim2230/LP-MWPS-TTP-RADIO/rslIsExceeded",
    "node-id": "Sim2230",
    "counter": "2",
    "timestamp": "2017-01-01T01:00:00.0Z",
    "object-id": "LP-MWPS-TTP-RADIO",
    "problem": "rslIsExceeded",
    "severity": "Critical",
     "type": "ProblemNotificationXml"
}

PMData15m (pmdata-15m)

 

PMData24h (pmdata-24h)

 

MediatorServer (mediator-server)

read (read-mediator-server-list)

(POST /restconf/operations/data-provider:read-mediator-server-list)

{	
	"input":{
		"id":"safasfnoiinf_ubdazgf",
		"url":"https://10.45.44.223:7590",
    	"name":"test mediator server"
	}
}
create (create-mediator-server)

POST /restconf/operations/data-provider:create-mediator-server

{	
	"input":{
		"url":"https://10.45.44.223:7590",
    	"name":"test mediator server"
	}
}
delete (delete-mediator-server)

POST /restconf/operations/data-provider:delete-mediator-server

{	
	"input":{
		"id":"safasfnoiinf_ubdazgf"
	}
}
update: (update-mediator-server)

POST /restconf/operations/data-provider:update-mediator-server

{	
	"input":{
		"id":"safasfnoiinf_ubdazgf",
		"url":"https://10.45.44.223:7590",
    	"name":"test mediator server"
	}
}

Inventory (inventory)

{
	"id":"uadnaisd_sadfniv",
	"tree-level": 1,
	"parent-uuid": "SHELF-1.1.0.0",
	"node-id": "sim2",
	"uuid": "CARD-1.1.8.0",
	"contained-holder": [ ],
	"manufacturer-name": null,
	"manufacturer-identifier": "ONF-Wireless-Transport",
	"serial": "sd-dsa-eqw",
	"date": "2008-10-21T00:00:00.0Z",
	"version": "unknown",
	"description": "WS/DS3",
	"part-type-id": "unknown",
	"model-identifier": "model-id-s3s",
	"type-name": "p4.module"
}

Maintenance (maintenance)

{
	"id":"sim2",
	"node-id": "sim2",
	"object-id-ref": "",
	"problem": ""
	"description": "",
	"start": "2008-10-21T00:00:00.0Z",
	"end": "2008-10-21T00:00:00.0Z",
	"active": false
}

Status 

{
	"faults":{
		"critical":5,
		"major":0,
		"minor",0,
		"warnings:3
	}
}

Architecture

Odlux Client Web server communication, remove item Web client Web client Server Server Elasticsearch Api Elasticsearch Api Elasticsearch Database Elasticsearch Database 1remove mountpoint 2DEL from database 3Start DEL within DB 4200 OK 5200 OK 6Finish DEL task

Table Screenshot Examples

Table footer

Fault


Log



Language (deferred)

things to translate:

  • table-header
  • header
  • menu-title
  • inline text


/GET /lang
/GET /lang/{lang-code}/entity/{entity-name}
/GET /lang/{lang-code}/app/{app-name}

lang-code examples:

  • en-US
  • de-DE
  • de-AT
  • fr-FR

key-spec: 

  • only uppercase + underscore
  • not too long
  • single words and complete sentences
{
  "ROWS_PER_PAGE":"Rows per page",
  "ERROR_MSG_SERVER_UNREACHABLE":"The server is currently unreachable",
  "CURRENT_PAGE_RANGE_FORMAT":"{1}-{2} of {3}"

}
  • No labels

4 Comments

  1. Use apidoc explorer for example with devicemanager


    {
       "input": {
          "mountpoint-name": "Sim2230"
       }
    }
    
    • You get back:
    {
    	"output": {
    		"required-network-element": {
    			"mountpoint-name": "Sim2230",
    			"description": "Pretty description here",
    			"status": "false"
    		}
    	}
    }
  2. Hanif proposes JDO or Hibernates Framework for connectinc to different dabases. Frameworks are providing Table-pagination interface for BrowserClient.

  3. For http://172.18.0.2:8181/apidoc/explorer/index.html#!/odluxprovider(2019-08-01)/get_entity_list_post_0

    {
    	"input": {
    		"entity": "faultcurrent",
    		"filter":[],
    		"sortorder":[],
    		"pagination":{
    			"size":20,
    			"page":1
    		}
    	}
    }