From 5cb88e8d069b5ae9e3bc3351e1f0b21e0fe592fe Mon Sep 17 00:00:00 2001 From: Marvin W Date: Sat, 7 Jan 2017 18:43:04 +0100 Subject: [PATCH] Use server side resolving only, add proper support for nexthop resolving (#81) * Revert "Use resolved data if gateway was already resolved (#78)" This reverts commit 44bb8e9d3df334aa607ecba46f2894afc48d66ad. * Revert "proportions: lookup gateway name" This reverts commit 94662cb3dc9b82b5fd809ae812accd228bcd7b87. * Revert "infobox/node: change mac used to lookup nodes" This reverts commit 2ca2604403dcc3a2a6b0314a490cf940f309b994. * Revert "infobox/node: resolve nexthop and gateway from data" This reverts commit 9e7049c9e36e2eec77ed80716b34be9e07dd33dd. * Resolve nexthop full chain if possible requires hopglass/hopglass-server#79 * Correctly handle sidecase when nodes on route report inconsistent gateway --- lib/gui.js | 1 - lib/infobox/main.js | 11 +---------- lib/infobox/node.js | 46 ++++++++++++++++++++++----------------------- lib/proportions.js | 21 ++++----------------- 4 files changed, 28 insertions(+), 51 deletions(-) diff --git a/lib/gui.js b/lib/gui.js index 2e85f8d..4ce989d 100644 --- a/lib/gui.js +++ b/lib/gui.js @@ -85,7 +85,6 @@ function (chroma, Map, Sidebar, Tabs, Container, Meshstats, Legend, Linklist, fanoutUnfiltered.add(meshstats) fanoutUnfiltered.add(newnodeslist) fanoutUnfiltered.add(lostnodeslist) - fanoutUnfiltered.add(infobox) fanout.add(nodelist) fanout.add(linklist) fanout.add(statistics) diff --git a/lib/infobox/main.js b/lib/infobox/main.js index d90497d..deebc03 100644 --- a/lib/infobox/main.js +++ b/lib/infobox/main.js @@ -2,7 +2,6 @@ define(["infobox/link", "infobox/node", "infobox/location"], function (Link, Nod return function (config, sidebar, router) { var self = this var el - var nodeDict function destroy() { if (el && el.parentNode) { @@ -34,7 +33,7 @@ define(["infobox/link", "infobox/node", "infobox/location"], function (Link, Nod self.gotoNode = function (d) { create() - new Node(config, el, router, d, nodeDict) + new Node(config, el, router, d) } self.gotoLink = function (d) { @@ -47,14 +46,6 @@ define(["infobox/link", "infobox/node", "infobox/location"], function (Link, Nod new Location(config, el, router, d) } - self.setData = function (d) { - nodeDict = {} - d.graph.nodes.forEach(function (d) { - nodeDict[d.id.substr(0, 8)] = d - }) - - } - return self } }) diff --git a/lib/infobox/node.js b/lib/infobox/node.js index 38b56e8..f975f64 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -313,21 +313,7 @@ define(["moment", "numeral", "tablesort", "tablesort.numeric"], return document.createTextNode(text) } - function lookupNode(d, nodeDict) { - if (!d) - return null - - if (d.node || d.id) - return d - - var node = nodeDict[d.substr(0, 8)] - if (!node) - return d - - return node - } - - function showGateway(d, router, nodeDict) { + function showGateway(d, router) { var nh if (dictGet(d.statistics, ["nexthop"])) nh = dictGet(d.statistics, ["nexthop"]) @@ -337,13 +323,27 @@ define(["moment", "numeral", "tablesort", "tablesort.numeric"], if (!gw) return null return function (el) { - if (nh) { - el.appendChild(createLink(lookupNode(nh, nodeDict), router)) - if (nh.substr(0, 8) !== gw.substr(0, 8)) - el.appendChild(document.createTextNode(" -> ... -> ")) + var num = 0 + while (gw && nh && gw.id !== nh.id && num < 10) { + if (num !== 0) el.appendChild(document.createTextNode(" -> ")) + el.appendChild(createLink(nh, router)) + num++ + if (!nh.node || !nh.node.statistics) break + if (dictGet(nh.node.statistics, ["gateway"]).id !== gw.id) break + if (dictGet(nh.node.statistics, ["gateway_nexthop"])) + nh = dictGet(nh.node.statistics, ["gateway_nexthop"]) + else if (dictGet(nh.node.statistics, ["nexthop"])) + nh = dictGet(nh.node.statistics, ["nexthop"]) + else + break } - if (!nh || nh.substr(0, 8) !== gw.substr(0, 8)) - el.appendChild(createLink(lookupNode(gw, nodeDict), router)) + if (gw && nh && gw.id !== nh.id) { + if (num !== 0) el.appendChild(document.createTextNode(" -> ")) + num++ + el.appendChild(document.createTextNode("...")) + } + if (num !== 0) el.appendChild(document.createTextNode(" -> ")) + el.appendChild(createLink(gw, router)) } } @@ -424,7 +424,7 @@ define(["moment", "numeral", "tablesort", "tablesort.numeric"], return showStat(o, subst) } - return function(config, el, router, d, nodeDict) { + return function(config, el, router, d) { var attributes = document.createElement("table") attributes.classList.add("attributes") @@ -471,7 +471,7 @@ define(["moment", "numeral", "tablesort", "tablesort.numeric"], attributeEntry(attributes, "Arbeitsspeicher", showRAM(d)) attributeEntry(attributes, "IP Adressen", showIPs(d)) attributeEntry(attributes, "Webseite", showPages(d)) - attributeEntry(attributes, "Gewähltes Gateway", showGateway(d, router, nodeDict)) + attributeEntry(attributes, "Gewähltes Gateway", showGateway(d, router)) attributeEntry(attributes, "Autom. Updates", showAutoupdate(d)) attributeEntry(attributes, "Clients", showClients(d), showMeshClients(d)) diff --git a/lib/proportions.js b/lib/proportions.js index cf5f80d..f5b0b26 100644 --- a/lib/proportions.js +++ b/lib/proportions.js @@ -23,7 +23,7 @@ define(["chroma-js", "virtual-dom", "numeral-intl", "filters/genericnode", "verc var uplinkTable = document.createElement("table") uplinkTable.classList.add("proportion") - var gwNodesTable = document.createElement("table") + var gwNodesTable = document.createElement("table") gwNodesTable.classList.add("proportion") var gwClientsTable = document.createElement("table") @@ -119,8 +119,9 @@ define(["chroma-js", "virtual-dom", "numeral-intl", "filters/genericnode", "verc var onlineNodes = data.nodes.all.filter(online) var nodes = onlineNodes.concat(data.nodes.lost) var nodeDict = {} - data.graph.nodes.forEach(function (d) { - nodeDict[d.id.substr(0, 8)] = d + + data.nodes.all.forEach(function (d) { + nodeDict[d.nodeinfo.node_id] = d }) var statusDict = count(nodes, ["flags", "online"], function (d) { @@ -161,13 +162,6 @@ define(["chroma-js", "virtual-dom", "numeral-intl", "filters/genericnode", "verc if (d.id) return d.id - var n = nodeDict[d.substr(0, 8)] - if (!n) - return d - var name = dictGet(n, ["node", "nodeinfo", "hostname"]) - if (name) - return name - return d }) @@ -181,13 +175,6 @@ define(["chroma-js", "virtual-dom", "numeral-intl", "filters/genericnode", "verc if (d.id) return d.id - var n = nodeDict[d.substr(0, 8)] - if (!n) - return d - var name = dictGet(n, ["node", "nodeinfo", "hostname"]) - if (name) - return name - return d })