From f80ea1ca8f536b15be59eaba1e8cf524e490c212 Mon Sep 17 00:00:00 2001 From: eberhab Date: Wed, 8 Jun 2016 23:23:56 +0200 Subject: [PATCH] infobox: added wifi channel, airtime and batctl nexthop (#38) * infobox: added wifi channel, airtime and batctl nexthop * simplify * kill all semicolons * update data locations I'd suggest that channel information go under nodeinfo. Airtime and nexthop are changing variables which should go under statistics. * filter out nodes with faulty nodeinfo * additional nexthop key The nexthop to the batman gateway has now been made available in gluon master where it will be called "gateway_nexthop" the "nexthop" key is also currently in use and should eventually be removed * sidebar/node: cosmetic changes to gateway/nexthop * remove data validity check * move wifi helper function to sidebar/node * cosmetics --- helper.js | 26 +++++++-------- lib/infobox/node.js | 80 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 92 insertions(+), 14 deletions(-) diff --git a/helper.js b/helper.js index e14faf3..93acf69 100644 --- a/helper.js +++ b/helper.js @@ -1,23 +1,23 @@ function get(url) { return new Promise(function(resolve, reject) { - var req = new XMLHttpRequest(); - req.open('GET', url); + var req = new XMLHttpRequest() + req.open('GET', url) req.onload = function() { if (req.status == 200) { - resolve(req.response); + resolve(req.response) } else { - reject(Error(req.statusText)); + reject(Error(req.statusText)) } - }; + } req.onerror = function() { - reject(Error("Network Error")); - }; + reject(Error("Network Error")) + } - req.send(); - }); + req.send() + }) } function getJSON(url) { @@ -75,7 +75,7 @@ function localStorageTest() { function listReplace(s, subst) { for (key in subst) { - var re = new RegExp(key, 'g'); + var re = new RegExp(key, 'g') s = s.replace(re, subst[key]) } return s @@ -149,8 +149,8 @@ function attributeEntry(el, label, value) { function createIframe(opt, width, height) { el = document.createElement("iframe") - width = typeof width !== 'undefined' ? width : '525px'; - height = typeof height !== 'undefined' ? height : '350px'; + width = typeof width !== 'undefined' ? width : '525px' + height = typeof height !== 'undefined' ? height : '350px' if (opt.src) el.src = opt.src @@ -180,7 +180,7 @@ function createIframe(opt, width, height) { function showStat(o, subst) { var content, caption - subst = typeof subst !== 'undefined' ? subst : {}; + subst = typeof subst !== 'undefined' ? subst : {} if (o.thumbnail) { content = document.createElement("img") diff --git a/lib/infobox/node.js b/lib/infobox/node.js index a9fecca..3b7dd6e 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -81,6 +81,54 @@ define(["moment", "numeral", "tablesort", "tablesort.numeric"], return d.firstseen.fromNow(true) } + function wifiChannelAlias(ch) { + var chlist = { + "1": "2412 MHz", + "2": "2417 MHz", + "3": "2422 MHz", + "4": "2427 MHz", + "5": "2432 MHz", + "6": "2437 MHz", + "7": "2442 MHz", + "8": "2447 MHz", + "9": "2452 MHz", + "10": "2457 MHz", + "11": "2462 MHz", + "12": "2467 MHz", + "13": "2472 MHz", + "36": "5180 MHz (Indoors)", + "40": "5200 MHz (Indoors)", + "44": "5220 MHz (Indoors)", + "48": "5240 MHz (Indoors)", + "52": "5260 MHz (Indoors/DFS/TPC)", + "56": "5280 MHz (Indoors/DFS/TPC)", + "60": "5300 MHz (Indoors/DFS/TPC)", + "64": "5320 MHz (Indoors/DFS/TPC)", + "100": "5500 MHz (DFS) !!", + "104": "5520 MHz (DFS) !!", + "108": "5540 MHz (DFS) !!", + "112": "5560 MHz (DFS) !!", + "116": "5580 MHz (DFS) !!", + "120": "5600 MHz (DFS) !!", + "124": "5620 MHz (DFS) !!", + "128": "5640 MHz (DFS) !!", + "132": "5660 MHz (DFS) !!", + "136": "5680 MHz (DFS) !!", + "140": "5700 MHz (DFS) !!" + } + if (!(ch in chlist)) + return "" + else + return chlist[ch] + } + + function showWifiChannel(ch) { + if (!ch) + return undefined + + return ch + " (" + wifiChannelAlias(ch) + ")" + } + function showClients(d) { if (!d.flags.online) return undefined @@ -180,6 +228,32 @@ define(["moment", "numeral", "tablesort", "tablesort.numeric"], } } + function showAirtime(band, val) { + if (!val) + return undefined + + return function (el) { + el.appendChild(showBar("airtime" + band.toString(), val)) + } + } + + function showGateway(d) { + var nh + if (dictGet(d.statistics, ["nexthop"])) + nh = dictGet(d.statistics, ["nexthop"]) + if (dictGet(d.statistics, ["gateway_nexthop"])) + nh = dictGet(d.statistics, ["gateway_nexthop"]) + var gw = dictGet(d.statistics, ["gateway"]) + + if (gw && !nh) + return gw + if (gw && nh) + if (gw === nh) + return gw + else + return nh + " -> ... -> " + gw + } + function showPages(d) { var webpages = dictGet(d.nodeinfo, ["pages"]) if (webpages === null) @@ -248,11 +322,15 @@ define(["moment", "numeral", "tablesort", "tablesort.numeric"], attributeEntry(attributes, "Site", showSite(d, config)) attributeEntry(attributes, "Uptime", showUptime(d)) attributeEntry(attributes, "Teil des Netzes", showFirstseen(d)) + attributeEntry(attributes, "Kanal 2.4 GHz", showWifiChannel(dictGet(d.nodeinfo, ["wireless", "chan2"]))) + attributeEntry(attributes, "Kanal 5 GHz", showWifiChannel(dictGet(d.nodeinfo, ["wireless", "chan5"]))) + attributeEntry(attributes, "Airtime 2.4 GHz", showAirtime(2, dictGet(d.statistics, ["wireless", "airtime2"]))) + attributeEntry(attributes, "Airtime 5 GHz", showAirtime(5, dictGet(d.statistics, ["wireless", "airtime5"]))) attributeEntry(attributes, "Systemlast", showLoad(d)) attributeEntry(attributes, "Arbeitsspeicher", showRAM(d)) attributeEntry(attributes, "IP Adressen", showIPs(d)) attributeEntry(attributes, "Webseite", showPages(d)) - attributeEntry(attributes, "Gewähltes Gateway", dictGet(d.statistics, ["gateway"])) + attributeEntry(attributes, "Gewähltes Gateway", showGateway(d)) attributeEntry(attributes, "Autom. Updates", showAutoupdate(d)) attributeEntry(attributes, "Clients", showClients(d))