"type": "tab",
"label": "Message Topics",
"disabled": false,
- "info": "Subscribes to Kafka topics ",
+ "info": "Subscribes to Kafka topics",
"env": []
},
{
"id": "1d6949a57bce82ab",
"type": "function",
"z": "51e83a0892da060e",
- "name": "createVesEvent",
- "func": "msg.payload = {\n event: msg.payload\n};\nreturn msg;",
+ "name": "http-preparation",
+ "func": "const protocol = env.get('VES_ENDPOINT_PROTOCOL');\nconst host = env.get('VES_ENDPOINT_HOST');\nconst port = env.get('VES_ENDPOINT_PORT');\nconst base = protocol + '://' + host + ':' + port;\nconst path = 'eventListener/v7';\nmsg.url = [base, path].join('/');\n\nconst user = env.get('VES_ENDPOINT_USERNAME');\nconst password = env.get('VES_ENDPOINT_PASSWORD');\nconst auth = Buffer.from([user, password].join(':')).toString('base64')\nconst basicAuth = ['Basic', auth].join(' ');\n\nmsg.headers = {};\nmsg.headers['Content-Type'] = 'application/json';\nmsg.headers['Accept'] = 'application/json';\nmsg.headers['Authorization'] = basicAuth;\n\nmsg.payload = {\n event: msg.payload\n};\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"method": "POST",
"ret": "txt",
"paytoqs": "ignore",
- "url": "https://ves-collector.oam.smo.o-ran-sc.org/eventListener/v7",
+ "url": "",
"tls": "7b2f4859e5963695",
"persist": true,
"proxy": "",
"insecureHTTPParser": false,
- "authType": "basic",
+ "authType": "",
"senderr": false,
"headers": [],
"x": 1030,
"z": "51e83a0892da060e",
"name": "VesCollectorResponse",
"active": true,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
+ "tosidebar": false,
+ "console": true,
+ "tostatus": true,
"complete": "payload",
"targetType": "msg",
- "statusVal": "",
+ "statusVal": "payload",
"statusType": "auto",
- "x": 1220,
+ "x": 1230,
"y": 280,
"wires": []
},
"type": "debug",
"z": "51e83a0892da060e",
"name": "ves-message-data",
- "active": false,
- "tosidebar": true,
+ "active": true,
+ "tosidebar": false,
"console": false,
- "tostatus": false,
+ "tostatus": true,
"complete": "payload",
"targetType": "msg",
- "statusVal": "",
- "statusType": "auto",
+ "statusVal": "payload.event.commonEventHeader.stndDefinedNamespace",
+ "statusType": "msg",
"x": 1050,
- "y": 320,
+ "y": 220,
"wires": []
},
{
"vt": "str"
}
],
- "repeat": "",
+ "repeat": "60",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"name": "eventData",
"active": true,
"tosidebar": true,
- "console": false,
- "tostatus": false,
+ "console": true,
+ "tostatus": true,
"complete": "payload",
"targetType": "msg",
- "statusVal": "",
- "statusType": "auto",
- "x": 1150,
+ "statusVal": "payload.length",
+ "statusType": "msg",
+ "x": 1170,
"y": 220,
"wires": []
},
"payload": "",
"payloadType": "date",
"x": 230,
- "y": 320,
+ "y": 400,
"wires": [
[
"e5f66f4bd6777ca0"
"payload": "",
"payloadType": "date",
"x": 240,
- "y": 400,
+ "y": 480,
"wires": [
[
"e5f66f4bd6777ca0"
"authType": "",
"senderr": false,
"headers": [],
- "x": 670,
+ "x": 850,
"y": 220,
"wires": [
[
"id": "dc576b6355478428",
"type": "function",
"z": "c5746e29f53f72ce",
- "name": "JSON",
- "func": "const string = msg.payload;\nconst array = JSON.parse(string);\nif (Array.isArray(array)) {\n msg.payload = array.map( (item) => {\n if (typeof item === 'string' || item instanceof String) {\n return JSON.parse(item);\n }\n });\n} else {\n msg.payload = array;\n}\nreturn msg;",
+ "name": "Provider",
+ "func": "const string = msg.payload;\nconst array = JSON.parse(string);\nif (Array.isArray(array)) {\n msg.payload = array.map( (item) => {\n if (typeof item === 'string' || item instanceof String) {\n return JSON.parse(item);\n }\n });\n} else {\n msg.payload = array;\n}\nglobal.set('topicData', msg.payload)\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
- "x": 830,
+ "x": 1020,
"y": 220,
"wires": [
[
- "2a2e05d79287f4a0"
+ "562063a080cb99d6"
]
]
},
"id": "e5f66f4bd6777ca0",
"type": "function",
"z": "c5746e29f53f72ce",
- "name": "SET msg.url",
- "func": "const base = 'https://messages.smo.o-ran-sc.org';\nconst path = 'events';\nconst urlMapping = {\n pnfRegistration: 'unauthenticated.VES_PNFREG_OUTPUT',\n o1NotifyPnfRegistration: 'unauthenticated.VES_O1_NOTIFY_PNF_REGISTRATION_OUTPUT',\n oRanScDuHelloWorldPmStreaming: 'unauthenticated.VES_O_RAN_SC_HELLO_WORLD_PM_STREAMING_OUTPUT',\n notifyHeartbeat: 'unauthenticated.SEC_3GPP_HEARTBEAT_OUTPUT',\n notifyFileReady: 'unauthenticated.VES_FILE_READY_OUTPUT',\n notifyFilePreparationError: 'unauthenticated.VES_FILE_READY_OUTPUT',\n oRanOpenfrontManagementPlane: 'unauthenticated.VES_O_RAN_SC_OPENFRONTHAUL_OUTPUT',\n notifyNewAlarm: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyChangedAlarm: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyChangedAlarmGeneral: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyAckStateChanged: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyCorrelatedNotificationChanged: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyComments: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyClearedAlarm: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyAlarmListRebuilt: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyPotentialFaultyAlarmList: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT'\n};\nconst longPolling = '?timeout=60000'\nconst urlTopic = urlMapping[msg.topic] || msg.topic.replace(':', '-');\nmsg.url = [base, path, urlTopic, '1', '1'].join('/') + longPolling;\nreturn msg;",
+ "name": "http-preparation",
+ "func": "const protocol = env.get('MESSAGES_PROTOCOL');\nconst host = env.get('MESSAGES_HOST');\nconst port = env.get('MESSAGES_PORT');;\nconst base = protocol + '://' + host + ':' + port;\n\nconst path = 'events';\nconst urlMapping = {\n pnfRegistration: 'unauthenticated.VES_PNFREG_OUTPUT',\n heartbeat: 'unauthenticated.SEC_HEARTBEAT_OUTPUT',\n fault: 'unauthenticated.SEC_FAULT_OUTPUT',\n o1NotifyPnfRegistration: 'unauthenticated.VES_O1_NOTIFY_PNF_REGISTRATION_OUTPUT',\n oRanScDuHelloWorldPmStreaming: 'unauthenticated.VES_O_RAN_SC_HELLO_WORLD_PM_STREAMING_OUTPUT',\n notifyHeartbeat: 'unauthenticated.SEC_3GPP_HEARTBEAT_OUTPUT',\n notifyFileReady: 'unauthenticated.VES_FILE_READY_OUTPUT',\n notifyFilePreparationError: 'unauthenticated.VES_FILE_READY_OUTPUT',\n oRanOpenfrontManagementPlane: 'unauthenticated.VES_O_RAN_SC_OPENFRONTHAUL_OUTPUT',\n notifyNewAlarm: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyChangedAlarm: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyChangedAlarmGeneral: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyAckStateChanged: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyCorrelatedNotificationChanged: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyComments: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyClearedAlarm: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyAlarmListRebuilt: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT',\n notifyPotentialFaultyAlarmList: 'unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT'\n};\nconst longPolling = '?timeout=60000'\nconst urlTopic = urlMapping[msg.topic] || msg.topic.replace(':', '-');\nmsg.url = [base, path, urlTopic, '1', '1'].join('/') + longPolling;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
- "x": 490,
+ "x": 500,
"y": 220,
"wires": [
[
"name": "from O-RAN-SC",
"info": "",
"x": 100,
- "y": 140,
+ "y": 220,
"wires": []
},
{
"name": "from SA5 R-18 branch",
"info": "",
"x": 120,
- "y": 280,
+ "y": 360,
"wires": []
},
{
"payload": "",
"payloadType": "date",
"x": 180,
- "y": 220,
+ "y": 300,
"wires": [
[
"e5f66f4bd6777ca0"
"payload": "",
"payloadType": "date",
"x": 220,
- "y": 180,
+ "y": 260,
"wires": [
[
"e5f66f4bd6777ca0"
"method": "GET",
"ret": "txt",
"paytoqs": "ignore",
- "url": "https://messages.smo.o-ran-sc.org/topics",
+ "url": "",
"tls": "7b2f4859e5963695",
"persist": true,
"proxy": "",
"insecureHTTPParser": true,
"authType": "",
"senderr": false,
- "headers": [
- {
- "keyType": "other",
- "keyValue": "Accept",
- "valueType": "other",
- "valueValue": "application/json"
- }
- ],
- "x": 670,
+ "headers": [],
+ "x": 850,
"y": 180,
"wires": [
[
"topic": "topics",
"payload": "",
"payloadType": "date",
- "x": 510,
+ "x": 530,
"y": 180,
"wires": [
[
- "3051f52553efaaa4"
+ "e4ec70e46406674f"
]
]
},
]
]
},
- {
- "id": "2a2e05d79287f4a0",
- "type": "function",
- "z": "c5746e29f53f72ce",
- "name": "Provider",
- "func": "global.set('topicData', msg.payload)\nreturn msg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 980,
- "y": 220,
- "wires": [
- [
- "562063a080cb99d6"
- ]
- ]
- },
{
"id": "d932661ae80274a1",
"type": "inject",
"payload": "",
"payloadType": "date",
"x": 240,
- "y": 520,
+ "y": 600,
"wires": [
[
"e5f66f4bd6777ca0"
"payload": "",
"payloadType": "date",
"x": 230,
- "y": 560,
+ "y": 640,
"wires": [
[
"e5f66f4bd6777ca0"
"payload": "",
"payloadType": "date",
"x": 200,
- "y": 600,
+ "y": 680,
"wires": [
[
"e5f66f4bd6777ca0"
"payload": "",
"payloadType": "date",
"x": 220,
- "y": 640,
+ "y": 720,
"wires": [
[
"e5f66f4bd6777ca0"
"payload": "",
"payloadType": "date",
"x": 180,
- "y": 680,
+ "y": 760,
"wires": [
[
"e5f66f4bd6777ca0"
"payload": "",
"payloadType": "date",
"x": 240,
- "y": 720,
+ "y": 800,
"wires": [
[
"e5f66f4bd6777ca0"
"payload": "",
"payloadType": "date",
"x": 230,
- "y": 760,
+ "y": 840,
"wires": [
[
"e5f66f4bd6777ca0"
"payload": "",
"payloadType": "date",
"x": 220,
- "y": 800,
+ "y": 880,
"wires": [
[
"e5f66f4bd6777ca0"
"payload": "",
"payloadType": "date",
"x": 200,
- "y": 840,
+ "y": 920,
"wires": [
[
"e5f66f4bd6777ca0"
"name": "TS28532_FaultMnS.yaml",
"info": "",
"x": 130,
- "y": 480,
+ "y": 560,
"wires": []
},
{
"name": "TS28532_FileDataReportingMnS.yaml",
"info": "",
"x": 170,
- "y": 360,
+ "y": 440,
"wires": []
},
{
"payload": "",
"payloadType": "date",
"x": 210,
- "y": 440,
+ "y": 520,
+ "wires": [
+ [
+ "e5f66f4bd6777ca0"
+ ]
+ ]
+ },
+ {
+ "id": "e4ec70e46406674f",
+ "type": "function",
+ "z": "c5746e29f53f72ce",
+ "name": "http-preparation",
+ "func": "const protocol = env.get('MESSAGES_PROTOCOL');\nconst host = env.get('MESSAGES_HOST');\nconst port = env.get('MESSAGES_PORT');\nconst base = protocol + '://' + host + ':' + port;\nconst path = msg.topic;\nmsg.url = [base, path].join('/');\nreturn msg;",
+ "outputs": 1,
+ "noerr": 0,
+ "initialize": "",
+ "finalize": "",
+ "libs": [],
+ "x": 680,
+ "y": 180,
+ "wires": [
+ [
+ "3051f52553efaaa4"
+ ]
+ ]
+ },
+ {
+ "id": "58232148f55eafc9",
+ "type": "inject",
+ "z": "c5746e29f53f72ce",
+ "name": "heartbeat (deprecated)",
+ "props": [
+ {
+ "p": "payload"
+ },
+ {
+ "p": "topic",
+ "vt": "str"
+ }
+ ],
+ "repeat": "60",
+ "crontab": "",
+ "once": false,
+ "onceDelay": 0.1,
+ "topic": "heartbeat",
+ "payload": "",
+ "payloadType": "date",
+ "x": 210,
+ "y": 120,
+ "wires": [
+ [
+ "e5f66f4bd6777ca0"
+ ]
+ ]
+ },
+ {
+ "id": "23cf0bc0546d281b",
+ "type": "inject",
+ "z": "c5746e29f53f72ce",
+ "name": "fault (deprecated)",
+ "props": [
+ {
+ "p": "payload"
+ },
+ {
+ "p": "topic",
+ "vt": "str"
+ }
+ ],
+ "repeat": "60",
+ "crontab": "",
+ "once": false,
+ "onceDelay": 0.1,
+ "topic": "fault",
+ "payload": "",
+ "payloadType": "date",
+ "x": 230,
+ "y": 160,
"wires": [
[
"e5f66f4bd6777ca0"
"id": "329e838eb4bf63f4",
"type": "function",
"z": "7ba02ed596e8cde5",
- "name": "ResetActionData",
- "func": "const base = 'https://odlux.oam.smo.o-ran-sc.org';\nconst path = 'rests/operations/network-topology:network-topology/topology=topology-netconf/node=';\nconst nodeId = msg.payload;\nconst mount = 'yang-ext:mount';\nconst action = 'o-ran-supervision:supervision-watchdog-reset';\n\nmsg.url = [base,path + nodeId, mount, action].join('/');\nmsg.payload = { \n \"o-ran-supervision:input\": \n {\n \"supervision-notification-interval\": 60, \n \"guard-timer-overhead\": 10\n }\n}\nreturn msg;",
+ "name": "http-preparation",
+ "func": "const protocol = env.get('SDN_CONTROLLER_PROTOCOL');\nconst host = env.get('SDN_CONTROLLER_HOST');\nconst port = env.get('SDN_CONTROLLER_PORT');;\nconst base = protocol + '://' + host + ':' + port;\nconst path = 'rests/operations/network-topology:network-topology/topology=topology-netconf/node=';\nconst nodeId = msg.payload;\nconst mount = 'yang-ext:mount';\nconst action = 'o-ran-supervision:supervision-watchdog-reset';\nmsg.url = [base,path + nodeId, mount, action].join('/');\n\nconst user = env.get('SDN_CONTROLLER_USERNAME');\nconst password = env.get('SDN_CONTROLLER_PASSWORD');\nconst auth = Buffer.from([user, password].join(':')).toString('base64')\nconst basicAuth = ['Basic', auth].join(' ');\n\nmsg.headers = {};\nmsg.headers['Content-Type'] = 'application/yang-data+json';\nmsg.headers['Accept'] = 'application/yang-data+json';\nmsg.headers['Authorization'] = basicAuth;\n\nmsg.payload = { \n \"o-ran-supervision:input\": \n {\n \"supervision-notification-interval\": 60, \n \"guard-timer-overhead\": 10\n }\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
- "x": 570,
+ "x": 560,
"y": 220,
"wires": [
[
"persist": true,
"proxy": "",
"insecureHTTPParser": true,
- "authType": "basic",
+ "authType": "",
"senderr": false,
- "headers": [
- {
- "keyType": "other",
- "keyValue": "Accept",
- "valueType": "other",
- "valueValue": "application/json"
- },
- {
- "keyType": "other",
- "keyValue": "Content-Type",
- "valueType": "other",
- "valueValue": "application/json"
- }
- ],
+ "headers": [],
"x": 800,
"y": 220,
"wires": [
"name": "Response",
"active": true,
"tosidebar": true,
- "console": false,
- "tostatus": false,
+ "console": true,
+ "tostatus": true,
"complete": "payload",
"targetType": "msg",
- "statusVal": "",
- "statusType": "auto",
- "x": 1000,
+ "statusVal": "payload.length",
+ "statusType": "msg",
+ "x": 1010,
"y": 220,
"wires": []
},
"name": "The Consumer checks for data on the message router provided by the \"Massage Topics\" flow.",
"info": "The Consumer checks for data on the message router provided by the \"Massage Topics\" flow.",
"x": 520,
- "y": 260,
+ "y": 280,
"wires": []
}
]
\ No newline at end of file