blob: aa35f0ec409d0509c2e265a8122d3e521525f80b [file] [log] [blame]
Andrea Campanella362b7d32018-12-11 18:57:12 +01001import {
2 getConnectivityServices,
3 getSipDetail,
4 getSips,
5} from './dcs'
6import {
7 getDevices,
8 getPorts,
9} from './onos'
10
11
12/**
13 * Provide onos port list along with sip uuid.
14 * @returns {Promise<*[]>}
15 */
16export function getResources() {
17
18 return Promise.all([getDevices(), getSips()])
19 .then(([devices, sips]) => {
20 if(!devices || !sips){
21 throw new Error('Device not found')
22 }
23 const promisePorts = Promise.all(devices.map(device => {
24 return getPorts(device.id)
25 }))
26 const promiseSipDetails = Promise.all(sips.map(sip => {
27 return getSipDetail(sip.uuid)
28 }))
29 return Promise.all([promisePorts, promiseSipDetails, getConnectivityServices()])
30 })
31 .then(([deviceDetails, sipDetails, connectivityService]) => {
32
Hiroki Okui458da6d2019-02-15 10:09:21 -080033 const dsrSipIdMap = sipDetails
34 .filter(filterSipsByLayer.bind(null, "DSR"))
Hiroki Okui559bd1c2019-01-17 14:17:32 -080035 .reduce((_sipIdMap, sipDetail) => {
Hiroki Okui458da6d2019-02-15 10:09:21 -080036 _sipIdMap[sipDetail.name.filter(kv => kv["value-name"] === "onos-cp")[0].value] = sipDetail.uuid
37 return _sipIdMap
38 }, {})
39 const mediaSipIdMap = sipDetails
40 .filter(filterSipsByLayer.bind(null, "PHOTONIC_MEDIA"))
41 .reduce((_sipIdMap, sipDetail) => {
42 _sipIdMap[sipDetail.name.filter(kv => kv["value-name"] === "onos-cp")[0].value] = sipDetail.uuid
43 return _sipIdMap
44 }, {})
45 const portMap = {}
46
47 console.log('DSR SIP ID Map', dsrSipIdMap)
48 console.log('PhotinicMedia SIP ID Map', mediaSipIdMap)
Andrea Campanella362b7d32018-12-11 18:57:12 +010049
50 deviceDetails.forEach(deviceDetail => {
51 deviceDetail.ports.forEach(port => {
52 const key = `${port.element}/${port.port}`
Hiroki Okui458da6d2019-02-15 10:09:21 -080053 if(dsrSipIdMap[key]) {
54 port.sipId = dsrSipIdMap[key]
Andrea Campanella362b7d32018-12-11 18:57:12 +010055 }
Hiroki Okui458da6d2019-02-15 10:09:21 -080056 if(mediaSipIdMap[key]) {
57 port.mediaSipId = mediaSipIdMap[key]
58 }
59 portMap[key] = port
60 })
61 })
62
63 deviceDetails.forEach(deviceDetail => {
64 deviceDetail.ports.filter(filterClientSidePort).forEach(cliPort => {
65 const linePortKey = `${cliPort.element}/${parseInt(cliPort.port) + 100}`
66 cliPort.associatedLinePort = portMap[linePortKey]
Andrea Campanella362b7d32018-12-11 18:57:12 +010067 })
68 })
69
70 return [ deviceDetails || [], connectivityService || [] ]
71 })
72 .catch(err => {
73 console.error(err)
74 })
75
Hiroki Okui559bd1c2019-01-17 14:17:32 -080076}
77
Hiroki Okui458da6d2019-02-15 10:09:21 -080078function filterClientSidePort(port) {
79 return Math.floor( parseInt(port.port) / 100 ) === 1
80}
81
82function filterSipsByLayer(layerProtocolName, sipDetail) {
83 return sipDetail["layer-protocol-name"] === layerProtocolName
Andrea Campanella362b7d32018-12-11 18:57:12 +010084}