...
- 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)
Further points&questions:
Entities:
- NetworkElementConnection (filter: isRequired:boolean, connectionState: enum<string>)
- NetworkElementConnectionLog
NetworkElementConfiguration (only proxy for restconf) → implemented in APIGateway- FaultCurrent
- FaultLog
- (Log)
- PMData15m
- PMData24h
- MediatorServer
- Inventory
- Maintenance
- Status
Request-Url:
Code Block |
---|
POST /restconf/operations/data-provider:{lowercase(REQ_METHOD)}-{entity}[-list] |
e.g.:
Code Block |
---|
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:
- 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:
Code Block |
---|
POST /restconf/operations/data-provider:{lowercase(REQ_METHOD)}-{entity}[-list] |
e.g.:
Code Block |
---|
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:
Code Block |
---|
"output": {
|
Code Block |
---|
|
{
"input":{
"filter":[{
"property":"<property-name>",
"filtervalue":"<filter-string>"
}],
"sortorder":[{
"property":"<property-name",
"sortorder":"ascending|descending"
}
],
"pagination":{
"size":20,
<-- Number of requested objects
"page":1
}
}
} |
Request Entity-Example:
Code Block |
---|
POST /restconf/operations/data-provider:get-entity
{
"inputpage":{
"filter":[],
1, <-- Page delivered back
"sortorder":[],
"paginationtotal":{
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:
Code Block |
---|
POST /restconf/operations/data-provider:read-faultcurrent-list
{
"input":{
"filter":[],
"sortorder":[],
"pagination":{ "size":20,
"page":1
}
}
}
Response:
{
"output": {
"page": 1,
"totalSize": 3,
"data": [
{
"_id": "Sim2230/LP-MWPS-TTP-RADIO/rslIsExceeded",
"size":20,
"nodeNamepage":1
"Sim2230",
}
}
}
Response:
{
"output": {
"counterpagination":{
"2size":20,
"page":1,
"total": 3
},
"timeStampdata": "2017-01-01T01:00:00.0Z", [
{
"objectIdid": "Sim2230/LP-MWPS-TTP-RADIO/rslIsExceeded",
"problemnode-id": "rslIsExceededSim2230",
"severitycounter": "Critical2",
"typetimestamp": "ProblemNotificationXml"2017-01-01T01:00:00.0Z",
},
{
"_object-id": "Sim2231/LP-MWPS-TTP-RADIO/rslIsExceeded",
"nodeNameproblem": "Sim2231rslIsExceeded",
"counterseverity": "3Critical",
"timeStamptype": "2017-01-01T02:00:00.0Z",
ProblemNotificationXml"
},
"objectId": " {
"id": "Sim2231/LP-MWPS-TTP-RADIO/rslIsExceeded",
"problemnode-id": "rslIsExceededSim2231",
"severitycounter": "Critical3",
"typetimestamp": "ProblemNotificationXml"2017-01-01T02:00:00.0Z",
},
{
"_id": "Sim2230/"object-id": "LP-MWPS-TTP-RADIO/signalLost",
"nodeNameproblem": "Sim2230rslIsExceeded",
"counterseverity": "4Critical",
"timeStamptype": "2017-01-01T03:00:00.0Z",ProblemNotificationXml"
},
"objectId": " {
"id": "Sim2230/LP-MWPS-TTP-RADIO/signalLost",
"problemnode-id": "signalLostSim2230",
"severitycounter": "Major4",
"typetimestamp": "ProblemNotificationXml"
2017-01-01T03:00:00.0Z",
}
]
}
} |
Code Block |
---|
POST /restconf/operations/data-provider:get-entity
{
"entity":"fault",
"filter":[],
"sortorder":[{
"object-id": "LP-MWPS-TTP-RADIO",
"propertyproblem": "timeStampsignalLost",
"sortorderseverity": "descendingMajor",
},
{
"propertytype": "nodeNameProblemNotificationXml",
"sortorder":"ascending"
}],
"pagination":{
]
}
} |
Code Block |
---|
POST /restconf/operations/data-provider:read-faultcurrent-list
{
"size":20,
"pagefilter":1[],
}
}
Response:
"sortorder":[{
"pageproperty": 1"timeStamp",
"totalSizesortorder": 3"descending"
},
{ "data": [
{
"property":"nodeName",
"_idsortorder": "Sim2230/LP-MWPS-TTP-RADIO/signalLost","ascending"
}],
"pagination":{
"size":20,
"nodeNamepage": "Sim2230",1
}
}
Response:
{
"pagination":{
"size":20,
"counterpage": "4"1,
"total": 3
},
"timeStampdata": "2017-01-01T03:00:00.0Z", [
{
"objectIdid": "Sim2230/LP-MWPS-TTP-RADIO/signalLost",
"problemnode-id": "signalLostSim2230",
"severitycounter": "Major4",
"typetimestamp": "ProblemNotificationXml"2017-01-01T03:00:00.0Z",
},
{
"_id": "Sim2231/"object-id": "LP-MWPS-TTP-RADIO/rslIsExceeded",
"nodeNameproblem": "Sim2231signalLost",
"counterseverity": "3Major",
"timeStamptype": "2017-01-01T02:00:00.0Z",
ProblemNotificationXml"
},
"objectId": "LP-MWPS-TTP-RADIO", {
"problemid": "Sim2231/LP-MWPS-TTP-RADIO/rslIsExceeded",
"severitynodeName": "CriticalSim2231",
"typecounter": "ProblemNotificationXml3",
},
{"timestamp": "2017-01-01T02:00:00.0Z",
"_object-id": "Sim2230/LP-MWPS-TTP-RADIO/",
"problem": "rslIsExceeded",
"nodeNameseverity": "Sim2230Critical",
"countertype": "2",
"timeStamp": "2017-01-01T01:00:00.0Z",
"objectId": "LP-MWPS-TTP-RADIO",
"problem": "rslIsExceeded",
"severity": "Critical",
"type": "ProblemNotificationXml"
}
]
} |
Table Screenshot Examples
Image Removed
Fault
Image Removed
Log
Image Removed
Language
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)
Code Block |
---|
{
"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)
Code Block |
---|
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)
Code Block |
---|
{
"id":"AW0kpBcp8r4e_0bbEEpk",
"node-id":"sim1",
"status":"connected",
"timestamp":"2019-09-12T08:43:16.6Z"
} |
FaultCurrent (faultcurrent)
Code Block |
---|
{
"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)
Code Block |
---|
{
"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)
Code Block |
---|
{
"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
Code Block |
---|
{
"input":{
"url":"https://10.45.44.223:7590",
"name":"test mediator server"
}
} |
delete (delete-mediator-server)
POST /restconf/operations/data-provider:delete-mediator-server
Code Block |
---|
{
"input":{
"id":"safasfnoiinf_ubdazgf"
}
} |
update: (update-mediator-server)
POST /restconf/operations/data-provider:update-mediator-server
Code Block |
---|
{
"input":{
"id":"safasfnoiinf_ubdazgf",
"url":"https://10.45.44.223:7590",
"name":"test mediator server"
}
} |
Inventory (inventory)
Code Block |
---|
{
"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)
Code Block |
---|
{
"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
Code Block |
---|
{
"faults":{
"critical":5,
"major":0,
"minor",0,
"warnings:3
}
} |
Architecture
draw.io Diagram |
---|
border | true |
---|
viewerToolbar | true |
---|
| |
---|
fitWindow | false |
---|
diagramName | Web Client interfaces |
---|
simpleViewer | false |
---|
width | |
---|
diagramWidth | 531 |
---|
revision | 1 |
---|
|
PlantUML Macro |
---|
@startuml
autonumber
title Odlux Client Web server communication, remove item
actor "Web client" as Cl
entity Server as Server
entity "Elasticsearch Api" as EsCl
control "Elasticsearch Database" as EsDb
' control "Mountpoint register service" as MRS
' entity "SDN-Controller" as SDNC
Cl->Server: remove mountpoint
Server->EsCl: DEL from database
EsCl->EsDb: Start DEL within DB
EsCl->Server: 200 OK
Server->Cl: 200 OK
EsDb->EsDb: Finish DEL task
'CA->CA: create trusted certificate <b>trusted-ca</b>
'SDNC->SDNC: generate <b>controller-private-key</b>
'SDNC->CA: certificate signign request
'CA-->SDNC: return <b>controller-cert</b>\nreturn <b>trusted-ca</b>
'group netconf-keystore
'SDNC->SDNC: <b>add-keystore-entry(controller-private-key)</b>
'SDNC->SDNC: <b>add-private-key(controller-private-key, controller-cert)</b>
'SDNC->SDNC: <b>add-trusted-certificate(trusted-ca)</b>
|
Table Screenshot Examples
Image Added
Fault
Image Added
Log
Image Added
Language (deferred)
things to translate:
- table-header
- header
- menu-title
- inline text
Code Block |
---|
/GET /lang
/GET /lang/{lang-code}/entity/{entity-name}
/GET /lang/{lang-code}/app/{app-name} |
lang-code examples:
key-spec:
- only uppercase + underscore
- not too long
- single words and complete sentences
Code Block |
---|
{
"ROWS_PER_PAGE":"Rows per page",
"ERROR_MSG_SERVER_UNREACHABLE":"The server is currently unreachable",
"CURRENT_PAGE_RANGE_FORMAT":"{1}-{2} of {3}"
|
Code Block |
---|
/GET /lang
/GET /lang/{lang-code}/entity/{entity-name}
/GET /lang/{lang-code}/app/{app-name} |