diff --git a/webapp/static/corenetwork.js b/webapp/static/corenetwork.js index 6a8fd497..c11030ac 100644 --- a/webapp/static/corenetwork.js +++ b/webapp/static/corenetwork.js @@ -416,22 +416,67 @@ class CoreNetwork { console.log('added node: ', coreNode.getNetworkNode()); } + linkAllRouters(nodeId) { + const toNode = this.getCoreNode(nodeId); + const routerNodes = this.nodes.get({filter: node => { + return node.coreNode.model === 'mdr'; + }}); + console.log('router nodes: ', routerNodes); + for (let fromNode of routerNodes) { + if (this.edgeExists(fromNode.id, toNode.id)) { + console.log('ignoring router link that already exists'); + continue; + } + + const edge = { + from: fromNode.id, + to: toNode.id + }; + this.addEdgeLink(edge, fromNode.coreNode, toNode) + .catch(err => console.log('add edge link error: ', err)); + } + } + + edgeExists(fromId, toId) { + console.log('checking if edge exists: ', fromId, toId); + console.log('links: ', this.links); + const idOne = `${fromId}-${toId}`; + const idTwo = `${toId}-${fromId}`; + let exists = idOne in this.links; + exists = exists || idTwo in this.links; + return exists; + } + + enableEdgeMode() { + setTimeout(() => this.network.addEdgeMode(), 250); + } + addEdge(_, properties) { const edgeId = properties.items[0]; const edge = this.edges.get(edgeId); + + // ignore edges being recreated if (edge.recreated) { console.log('ignoring recreated edge'); return; } - console.log('added edge: ', edgeId, edge); + // ignore cycles if (edge.from === edge.to) { console.log('removing cyclic edge'); this.edges.remove(edge.id); - setTimeout(() => this.network.addEdgeMode(), 250); + this.enableEdgeMode(); return; } + // ignore edges that already exist between nodes + if (this.edgeExists(edge.from, edge.to)) { + console.log('edge already exists'); + this.enableEdgeMode(); + return false; + } + + console.log('added edge: ', edgeId, edge); const fromNode = this.nodes.get(edge.from).coreNode; const toNode = this.nodes.get(edge.to).coreNode; @@ -443,7 +488,7 @@ class CoreNetwork { console.log('create link error: ', err); }); - setTimeout(() => this.network.addEdgeMode(), 250); + this.enableEdgeMode(); } async addEdgeLink(edge, fromNode, toNode) { diff --git a/webapp/static/coreui.js b/webapp/static/coreui.js index f86a97f6..e8381cb1 100644 --- a/webapp/static/coreui.js +++ b/webapp/static/coreui.js @@ -216,6 +216,10 @@ class NodeContext { console.log('error showing services modal: ', err); }); break; + case 'linkrf': + console.log('linking all routers'); + self.coreNetwork.linkAllRouters(nodeId); + break; case 'delete': self.coreNetwork.deleteNode(nodeId); break; @@ -428,14 +432,14 @@ class InfoPanel { this.$infoCard.addClass('visible'); this.$infoCardHeader.text('Edge'); this.$infoCardTable.find('tbody tr').remove(); - this.addInfoTable(nodeOne.name, null); const interfaceOne = link.interfaceOne; if (interfaceOne) { + this.addInfoTable(nodeOne.name, null); this.addInterfaceInfo(interfaceOne); } - this.addInfoTable(nodeTwo.name, null); const interfaceTwo = link.interfaceTwo; if (interfaceTwo) { + this.addInfoTable(nodeTwo.name, null); this.addInterfaceInfo(interfaceTwo); } this.addInfoTable('Bandwidth', edge.link.bandwidth);