+ "z": "51e83a0892da060e",
+ "d": true,
+ "name": "notifyPotentialFaultyAlarmList",
+ "props": [
+ {
+ "p": "payload"
+ },
+ {
+ "p": "topic",
+ "vt": "str"
+ }
+ ],
+ "repeat": "",
+ "crontab": "",
+ "once": false,
+ "onceDelay": 0.1,
+ "topic": "notifyPotentialFaultyAlarmList",
+ "payload": "",
+ "payloadType": "date",
+ "x": 160,
+ "y": 940,
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "4617f66b8940469e",
+ "type": "comment",
+ "z": "51e83a0892da060e",
+ "name": "TS28532_FaultMnS.yaml",
+ "info": "",
+ "x": 130,
+ "y": 580,
+ "wires": []
+ },
+ {
+ "id": "69b8d53969426ebf",
+ "type": "function",
+ "z": "51e83a0892da060e",
+ "name": "vesStndDefindBody",
+ "func": "const timeStamp = new Date(msg.payload);\nconst alarm = 'Connection Loss';\nconst severity = 'CRITICAL';\n\nmsg.payload = {\n schemaReference: 'https://forge.3gpp.org/rep/sa5/MnS/raw/Rel-18/OpenAPI/TS28532_FaultMnS.yaml#components/schemas/NotifyClearedAlarm',\n stndDefinedFieldsVersion: '1.0',\n data: {\n href: global.get('os').hostname(),\n notificationId: Number(timeStamp),\n notificationType: msg.topic,\n eventTime: timeStamp.toISOString(),\n systemDN: '/',\n alarmId: alarm,\n alarmType: 'COMMUNICATIONS_ALARM',\n probableCause: alarm,\n perceivedSeverity: severity,\n correlatedNotifications: [],\n clearSystemId: global.get('os').hostname()\n }\n\n};\nmsg.topic = 'stndDefinedFields';\nreturn msg;",
+ "outputs": 1,
+ "noerr": 0,
+ "initialize": "",
+ "finalize": "",
+ "libs": [],
+ "x": 470,
+ "y": 860,
+ "wires": [
+ [
+ "f65b1c13e0243ef6"
+ ]
+ ]
+ },
+ {
+ "id": "01e14b971772ee0a",
+ "type": "comment",
+ "z": "51e83a0892da060e",
+ "name": "TS28532_FileDataReportingMnS.yaml",
+ "info": "",
+ "x": 170,
+ "y": 460,
+ "wires": []
+ },
+ {
+ "id": "ea15cafd2325d76f",
+ "type": "inject",
+ "z": "51e83a0892da060e",
+ "name": "notifyFilePreparationError",
+ "props": [
+ {
+ "p": "payload"
+ },
+ {
+ "p": "topic",
+ "vt": "str"
+ }
+ ],
+ "repeat": "",
+ "crontab": "",
+ "once": false,
+ "onceDelay": 0.1,
+ "topic": "notifyFilePreparationError",
+ "payload": "",
+ "payloadType": "date",
+ "x": 150,
+ "y": 540,
+ "wires": [
+ [
+ "9f4bc0920fa3c0eb",
+ "b5533c10604af5a6"
+ ]
+ ]
+ },
+ {
+ "id": "9f4bc0920fa3c0eb",
+ "type": "function",
+ "z": "51e83a0892da060e",
+ "name": "vesStndDefindBody",
+ "func": "const timeStamp = new Date(msg.payload);\nconst startTime = new Date(Math.floor(Number(timeStamp) / 900000) * 900000);\nconst endTime = new Date(Number(startTime) + 900000);\nconst paddy = (num, padlen, padchar) => {\n const pad_char = typeof padchar !== 'undefined' ? padchar : '0';\n const pad = new Array(1 + padlen).join(pad_char);\n return (pad + num).slice(-pad.length);\n}\nconst fileStartTime = [\n paddy(startTime.getFullYear(), 4),\n paddy(startTime.getMonth() + 1, 2),\n paddy(startTime.getDate(), 2),\n '.',\n paddy(startTime.getHours(), 2),\n paddy(startTime.getMinutes(), 2),\n '+0000'\n].join('');\nconst fileEndTime = [\n paddy(endTime.getHours(), 2),\n paddy(endTime.getMinutes(), 2),\n '+0000'\n].join('');\nconst fileLocation = ['/pm-data-files/A', fileStartTime, '-', fileEndTime, '_', env.get('APP_NETWORK_FUNCTION_ID'), '.xml'].join('');\nmsg.payload = {\n schemaReference: 'https://forge.3gpp.org/rep/sa5/MnS/raw/Rel-18/OpenAPI/TS28532_FileDataReportingMnS.yaml#components/schemas/NotifyFilePreparationError',\n stndDefinedFieldsVersion: '1.0',\n data: {\n href: global.get('os').hostname(),\n notificationId: Number(startTime),\n notificationType: msg.topic,\n eventTime: timeStamp.toISOString(),\n systemDN: '/',\n fileInfoList: [\n {\n fileLocation: fileLocation,\n fileSize: 1234,\n fileReadyTime: startTime.toISOString(),\n fileExpirationTime: endTime.toISOString(),\n fileCompression: 'no',\n fileFormat: 'xml',\n fileDataType: 'Performance'\n }\n ],\n reason: 'No Measurements',\n additionalText: 'Please consult customer documentation!'\n }\n};\nmsg.topic = 'stndDefinedFields';\nreturn msg;",
+ "outputs": 1,
+ "noerr": 0,
+ "initialize": "",
+ "finalize": "",
+ "libs": [],
+ "x": 470,
+ "y": 540,
+ "wires": [
+ [
+ "f65b1c13e0243ef6"
+ ]
+ ]
+ },
+ {
+ "id": "910dfec7eb74df65",
+ "type": "inject",
+ "z": "c5746e29f53f72ce",
+ "name": "pnfRegistration",
+ "props": [
+ {
+ "p": "payload"
+ },
+ {
+ "p": "topic",
+ "vt": "str"
+ }
+ ],
+ "repeat": "",
+ "crontab": "",
+ "once": false,
+ "onceDelay": 0.1,
+ "topic": "pnfRegistration",
+ "payload": "",
+ "payloadType": "date",
+ "x": 240,
+ "y": 80,
+ "wires": [
+ [
+ "e5f66f4bd6777ca0"
+ ]
+ ]
+ },
+ {
+ "id": "562063a080cb99d6",
+ "type": "debug",
+ "z": "c5746e29f53f72ce",
+ "name": "eventData",
+ "active": true,
+ "tosidebar": true,
+ "console": false,
+ "tostatus": false,
+ "complete": "payload",
+ "targetType": "msg",
+ "statusVal": "",
+ "statusType": "auto",
+ "x": 1150,
+ "y": 220,
+ "wires": []
+ },
+ {
+ "id": "172060688d87f510",
+ "type": "inject",
+ "z": "c5746e29f53f72ce",
+ "d": true,
+ "name": "notifyHeartbeat",
+ "props": [
+ {
+ "p": "payload"
+ },
+ {
+ "p": "topic",
+ "vt": "str"
+ }
+ ],
+ "repeat": "5",
+ "crontab": "",
+ "once": true,
+ "onceDelay": 0.1,
+ "topic": "notifyHeartbeat",
+ "payload": "",
+ "payloadType": "date",
+ "x": 230,
+ "y": 320,
+ "wires": [
+ [
+ "e5f66f4bd6777ca0"
+ ]
+ ]
+ },
+ {
+ "id": "311c3b5d3d73fc24",
+ "type": "inject",
+ "z": "c5746e29f53f72ce",
+ "name": "notifyFileReady",
+ "props": [
+ {
+ "p": "payload"
+ },
+ {
+ "p": "topic",
+ "vt": "str"
+ }
+ ],
+ "repeat": "",
+ "crontab": "",
+ "once": false,
+ "onceDelay": 0.1,
+ "topic": "notifyFileReady",
+ "payload": "",
+ "payloadType": "date",
+ "x": 240,
+ "y": 400,
+ "wires": [
+ [
+ "e5f66f4bd6777ca0"
+ ]
+ ]
+ },
+ {
+ "id": "5437e3fdfca300c9",
+ "type": "http request",
+ "z": "c5746e29f53f72ce",
+ "name": "",
+ "method": "GET",
+ "ret": "txt",
+ "paytoqs": "ignore",
+ "url": "",
+ "tls": "7b2f4859e5963695",
+ "persist": true,
+ "proxy": "",
+ "insecureHTTPParser": true,
+ "authType": "",
+ "senderr": false,
+ "headers": [],
+ "x": 670,
+ "y": 220,
+ "wires": [
+ [
+ "dc576b6355478428"
+ ]
+ ]
+ },
+ {
+ "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;",
+ "outputs": 1,
+ "noerr": 0,
+ "initialize": "",
+ "finalize": "",
+ "libs": [],
+ "x": 830,
+ "y": 220,
+ "wires": [
+ [
+ "2a2e05d79287f4a0"
+ ]
+ ]
+ },
+ {
+ "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;",
+ "outputs": 1,
+ "noerr": 0,
+ "initialize": "",
+ "finalize": "",
+ "libs": [],
+ "x": 490,
+ "y": 220,
+ "wires": [
+ [
+ "5437e3fdfca300c9"
+ ]
+ ]
+ },
+ {
+ "id": "42275e9c12f8e52b",
+ "type": "comment",
+ "z": "c5746e29f53f72ce",
+ "name": "from O-RAN-SC",
+ "info": "",
+ "x": 100,
+ "y": 140,
+ "wires": []
+ },
+ {
+ "id": "e07fa97ebc66dce0",
+ "type": "comment",
+ "z": "c5746e29f53f72ce",
+ "name": "from ONAP",
+ "info": "",
+ "x": 90,
+ "y": 40,
+ "wires": []
+ },
+ {
+ "id": "44b8c2cc138777f1",
+ "type": "comment",
+ "z": "c5746e29f53f72ce",
+ "name": "from SA5 R-18 branch",
+ "info": "",
+ "x": 120,
+ "y": 280,
+ "wires": []
+ },
+ {
+ "id": "4480e5473a65a757",
+ "type": "inject",
+ "z": "c5746e29f53f72ce",
+ "name": "oRanScDuHelloWorldPmStreaming",
+ "props": [
+ {
+ "p": "payload"
+ },
+ {
+ "p": "topic",
+ "vt": "str"
+ }
+ ],
+ "repeat": "",
+ "crontab": "",
+ "once": false,
+ "onceDelay": 0.1,
+ "topic": "oRanScDuHelloWorldPmStreaming",
+ "payload": "",
+ "payloadType": "date",
+ "x": 180,
+ "y": 220,
+ "wires": [
+ [
+ "e5f66f4bd6777ca0"
+ ]
+ ]
+ },
+ {
+ "id": "52f22ee054e5b4ac",
+ "type": "inject",
+ "z": "c5746e29f53f72ce",
+ "name": "o1NotifyPnfRegistration",
+ "props": [
+ {
+ "p": "payload"
+ },
+ {
+ "p": "topic",
+ "vt": "str"
+ }
+ ],
+ "repeat": "",
+ "crontab": "",
+ "once": false,
+ "onceDelay": 0.1,
+ "topic": "o1NotifyPnfRegistration",
+ "payload": "",
+ "payloadType": "date",
+ "x": 220,
+ "y": 180,
+ "wires": [
+ [
+ "e5f66f4bd6777ca0"
+ ]
+ ]
+ },
+ {
+ "id": "3051f52553efaaa4",
+ "type": "http request",
+ "z": "c5746e29f53f72ce",
+ "name": "",
+ "method": "GET",
+ "ret": "txt",
+ "paytoqs": "ignore",
+ "url": "https://messages.smo.o-ran-sc.org/topics",
+ "tls": "7b2f4859e5963695",
+ "persist": true,
+ "proxy": "",
+ "insecureHTTPParser": true,
+ "authType": "",
+ "senderr": false,
+ "headers": [
+ {
+ "keyType": "other",
+ "keyValue": "Accept",
+ "valueType": "other",
+ "valueValue": "application/json"
+ }
+ ],
+ "x": 670,
+ "y": 180,
+ "wires": [
+ [
+ "dc576b6355478428"
+ ]
+ ]
+ },
+ {
+ "id": "0acceacb99b7981a",
+ "type": "inject",
+ "z": "c5746e29f53f72ce",
+ "name": "Topics?",
+ "props": [
+ {
+ "p": "payload"
+ },
+ {
+ "p": "topic",
+ "vt": "str"
+ }
+ ],
+ "repeat": "",
+ "crontab": "",
+ "once": false,
+ "onceDelay": 0.1,
+ "topic": "topics",
+ "payload": "",
+ "payloadType": "date",
+ "x": 510,
+ "y": 180,
+ "wires": [
+ [
+ "3051f52553efaaa4"
+ ]
+ ]
+ },
+ {
+ "id": "34b7ac222692e06d",
+ "type": "comment",
+ "z": "c5746e29f53f72ce",
+ "name": "from OpenFronthaul Management-Plane",
+ "info": "",
+ "x": 580,
+ "y": 280,
+ "wires": []
+ },
+ {
+ "id": "25a3eca83bbc3489",
+ "type": "inject",
+ "z": "c5746e29f53f72ce",
+ "name": "o-ran-supervision:supervision-notification",
+ "props": [
+ {
+ "p": "payload"
+ },
+ {
+ "p": "topic",
+ "vt": "str"
+ }
+ ],
+ "repeat": "60",
+ "crontab": "",
+ "once": false,
+ "onceDelay": 0.1,
+ "topic": "o-ran-supervision:supervision-notification",
+ "payload": "",
+ "payloadType": "date",
+ "x": 620,
+ "y": 1040,
+ "wires": [
+ [
+ "e5f66f4bd6777ca0"
+ ]
+ ]
+ },
+ {
+ "id": "0194d014ef8f6c5e",
+ "type": "inject",
+ "z": "c5746e29f53f72ce",