diff options
author | Kristian Lyngstol <kly@kly@.no> | 2016-03-22 19:54:00 +0100 |
---|---|---|
committer | Kristian Lyngstol <kly@kly@.no> | 2016-03-22 19:54:00 +0100 |
commit | 8e2fb5f3c7fbfbb13224f0cb8a610837bfef364a (patch) | |
tree | e4a2d43eb86e912f44b8d397e8f86450a1d0469a | |
parent | 05fedaa7461c6fd67c402671f0e129b3d1772fbf (diff) |
Update nms-public code
-rwxr-xr-x | clients/ping.pl | 4 | ||||
-rw-r--r-- | web/nms-public.gathering.org/index.html | 29 | ||||
-rw-r--r-- | web/nms-public.gathering.org/js/nms-color-util.js | 3 | ||||
-rw-r--r-- | web/nms-public.gathering.org/js/nms-data.js | 33 | ||||
-rw-r--r-- | web/nms-public.gathering.org/js/nms-info-box.js | 198 | ||||
-rw-r--r-- | web/nms-public.gathering.org/js/nms-map-handlers.js | 95 | ||||
-rw-r--r-- | web/nms-public.gathering.org/js/nms-map.js | 129 | ||||
-rw-r--r-- | web/nms-public.gathering.org/js/nms.js | 86 |
8 files changed, 365 insertions, 212 deletions
diff --git a/clients/ping.pl b/clients/ping.pl index 3f4139e..1ad7b95 100755 --- a/clients/ping.pl +++ b/clients/ping.pl @@ -21,7 +21,7 @@ my $lq = $dbh->prepare("SELECT linknet,addr1,addr2 FROM linknets"); while (1) { # ping loopbacks my $ping = Net::Oping->new; - $ping->timeout(0.4); + $ping->timeout(0.3); $q->execute; my %ip_to_switch = (); @@ -73,7 +73,7 @@ while (1) { $dbh->commit; # ping linknets $ping = Net::Oping->new; - $ping->timeout(0.4); + $ping->timeout(0.3); $lq->execute; my @linknets = (); diff --git a/web/nms-public.gathering.org/index.html b/web/nms-public.gathering.org/index.html index 9c28689..b244d1b 100644 --- a/web/nms-public.gathering.org/index.html +++ b/web/nms-public.gathering.org/index.html @@ -58,10 +58,27 @@ </a> <ul class="dropdown-menu" role="menu"> <li><a href="#ping" onclick="setUpdater(handler_ping)">Ping map</a></li> + <li><a href="#uplink" onclick="setUpdater(handler_uplinks)">Uplink map</a></li> + <li><a href="#dhcp" onclick="setUpdater(handler_dhcp)">DHCP map</a></li> + <li><a href="#comment" onclick="setUpdater(handler_comment)">Comment spotter</a></li> + <li><a href="#temp" onclick="setUpdater(handler_temp)">Temperature map</a></li> + <li><a href="#traffic" onclick="setUpdater(handler_traffic)">Traffic map</a></li> + <li><a href="#traffictot" onclick="setUpdater(handler_traffic_tot)">Total switch traffic</a></li> <li><a href="#disco" onclick="setUpdater(handler_disco)">DISCO</a></li> <li class="divider"> </li> + <li><a href="#" onclick="toggleLayer('nowPickerBox');startNowPicker();">Travel in time</a></li> + <li><a href="#" onclick="nms.playback.startReplay('2015-04-01T09:00:00','2015-04-05T12:00:00');" title="Replay from opening 120 minutes per second">Replay TG</a></li> + <li class="divider"> </li> + <li class="dropdown-header">View</li> <li><a href="#" onclick="toggleNightMode()">Toggle Night Mode</a></li> <li class="divider"> </li> + <li class="dropdown-header">Move switches</li> + <li><a href="#" onclick="nmsMap.moveSet(true);">Enable switch moving</a></li> + <li><a href="#" onclick="nmsMap.moveSet(false);">Disable switch moving</a></li> + <li><a href="#" onclick="nmsInfoBox.showWindow('addSwitch')">Add switch</a></li> + <li class="divider"> </li> + <li class="dropdown-header">Help</li> + <li><a href="#" onclick="toggleLayer('aboutKeybindings');" >Keyboard Shortcuts</a></li> </ul> </li> <li><p id="updater_name" class="navbar-text"></p></li> @@ -129,22 +146,26 @@ </tr> <tr> <td>3</td> - <td>View temperature map</td> + <td>View DHCP map</td> </tr> <tr> <td>4</td> - <td>View uplink traffic map</td> + <td>View comment spotter map</td> </tr> <tr> <td>5</td> - <td>View comment spotter map</td> + <td>View temperature map</td> </tr> <tr> <td>6</td> - <td>View total switch traffic map</td> + <td>View uplink traffic map</td> </tr> <tr> <td>7</td> + <td>View total switch traffic map</td> + </tr> + <tr> + <td>9</td> <td>View Disco map</td> </tr> <tr> diff --git a/web/nms-public.gathering.org/js/nms-color-util.js b/web/nms-public.gathering.org/js/nms-color-util.js index f50ee04..6b5a4b5 100644 --- a/web/nms-public.gathering.org/js/nms-color-util.js +++ b/web/nms-public.gathering.org/js/nms-color-util.js @@ -89,6 +89,5 @@ function getColor(x,y) { var data = imageData.data; if (data.length < 4) return false; - var ret = 'rgb(' + data[0] + ',' + data[1] + ',' + data[2] + ')'; - return ret; + return 'rgb(' + data[0] + ',' + data[1] + ',' + data[2] + ')'; } diff --git a/web/nms-public.gathering.org/js/nms-data.js b/web/nms-public.gathering.org/js/nms-data.js index 6432a8d..14e5fed 100644 --- a/web/nms-public.gathering.org/js/nms-data.js +++ b/web/nms-public.gathering.org/js/nms-data.js @@ -82,7 +82,7 @@ var nmsData = nmsData || { nmsData._dropData = function (name) { delete this[name]; delete this.old[name]; -} +}; nmsData.removeSource = function (name) { if (this._sources[name] == undefined) { @@ -94,7 +94,7 @@ nmsData.removeSource = function (name) { clearInterval(this._sources[name]['handle']); } delete this._sources[name]; -} +}; /* * Register a source. @@ -121,7 +121,7 @@ nmsData.registerSource = function(name, target) { } this.stats.pollSets++; -} +}; /* * Add a handler (callback) for a source, using an id. @@ -130,7 +130,6 @@ nmsData.registerSource = function(name, target) { * old id, not add a copy. */ nmsData.addHandler = function(name, id, cb, cbdata) { - try { var cbob = { id: id, name: name, @@ -143,9 +142,7 @@ nmsData.addHandler = function(name, id, cb, cbdata) { } this._sources[name].cbs[id] = cbob; this.updateSource(name); - } catch (e) { - } -} +}; /* * Unregister all handlers with the "id" for all sources. @@ -157,11 +154,11 @@ nmsData.unregisterHandlerWildcard = function(id) { for (var v in nmsData._sources) { this.unregisterHandler(v, id); } -} +}; nmsData.unregisterHandler = function(name, id) { delete this._sources[name].cbs[id]; -} +}; /* * Updates a source. @@ -184,11 +181,11 @@ nmsData.updateSource = function(name) { return; } this._genericUpdater(name, true); -} +}; nmsData.invalidate = function(name) { this._genericUpdater(name, false); -} +}; /* * Reset a source, deleting all data, including old. * @@ -198,7 +195,7 @@ nmsData.resetSource = function(name) { this[name] = {}; this.old[name] = {}; this.updateSource(name); -} +}; /* * Updates nmsData[name] and nmsData.old[name], issuing any callbacks where @@ -239,16 +236,16 @@ nmsData._genericUpdater = function(name, cacheok) { nmsData[name] = data; nmsMap.drawNow(); for (var i in nmsData._sources[name].cbs) { - var tmp = nmsData._sources[name].cbs[i]; - if (tmp.cb != undefined) { - tmp.cb(tmp.cbdata); + var tmp2 = nmsData._sources[name].cbs[i]; + if (tmp2.cb != undefined) { + tmp2.cb(tmp2.cbdata); } } } else { - for (var i in nmsData._sources[name].cbs) { - var tmp = nmsData._sources[name].cbs[i]; + for (var j in nmsData._sources[name].cbs) { + var tmp = nmsData._sources[name].cbs[j]; if (tmp.cb != undefined && tmp.fresh) { - nmsData._sources[name].cbs[i].fresh = false; + nmsData._sources[name].cbs[j].fresh = false; tmp.cb(tmp.cbdata); } } diff --git a/web/nms-public.gathering.org/js/nms-info-box.js b/web/nms-public.gathering.org/js/nms-info-box.js index 5fdf044..2d12d56 100644 --- a/web/nms-public.gathering.org/js/nms-info-box.js +++ b/web/nms-public.gathering.org/js/nms-info-box.js @@ -15,8 +15,8 @@ var nmsInfoBox = nmsInfoBox || { stats: {}, _container: false, //Container window _window: false, //Active window (reference to _windowTypes object or false) - _windowTypes: [], //List of all avaliable window types -} + _windowTypes: [] //List of all avaliable window types +}; /* * Shows a window from the _windowTypes list @@ -34,26 +34,30 @@ nmsInfoBox.showWindow = function (windowName,argument) { return; } } -} +}; /* * Refresh the active window - * - * Todo: Could use a less aggressive refresh that doesn't hide-show everything - * */ nmsInfoBox.refresh = function() { + if(!nmsInfoBox._window) + return; nmsInfoBox._show(); +}; +nmsInfoBox.update = function(argument) { + if(!nmsInfoBox._window) + return; + nmsInfoBox._window.update(argument); } /* * Internal function to show the active _window and pass along any arguments */ nmsInfoBox._show = function(argument) { - nmsData.addHandler("comments","switchshower",nmsInfoBox.update,argument); - nmsData.addHandler("switches","switchshower",nmsInfoBox.update,argument); - nmsData.addHandler("smanagement","switchshower",nmsInfoBox.update,argument); - nmsData.addHandler("snmp","switchshower",nmsInfoBox.update,argument); + nmsData.addHandler("comments","switchshower",nmsInfoBox.update,'comments'); + nmsData.addHandler("switches","switchshower",nmsInfoBox.update,'switches'); + nmsData.addHandler("smanagement","switchshower",nmsInfoBox.update,'smanagement'); + nmsData.addHandler("snmp","switchshower",nmsInfoBox.update,'snmp'); this._window.load(argument); @@ -84,13 +88,13 @@ nmsInfoBox._show = function(argument) { } this._container.appendChild(panel); this._container.style.display = "block"; -} +}; /* * Hide the active window and tell it to unload */ nmsInfoBox.hide = function() { - if(this._container == false || this._window == false) + if(!this._container || !this._window) return; this._container.style.display = "none"; this._window.unload(); @@ -99,7 +103,7 @@ nmsInfoBox.hide = function() { nmsData.unregisterHandler("switches","switchshower"); nmsData.unregisterHandler("smanagement","switchshower"); nmsData.unregisterHandler("snmp","switchshower"); -} +}; /* * Window type: Add Switch @@ -122,6 +126,8 @@ nmsInfoBox._windowTypes.addSwitch = { }, load: function(argument) { }, + update: function(type) { + }, unload: function() { }, save: function() { @@ -129,12 +135,12 @@ nmsInfoBox._windowTypes.addSwitch = { var myData = JSON.stringify([{'sysname':sysname}]); $.ajax({ type: "POST", - url: "/api/private/switch-add", + url: "/api/write/switch-add", dataType: "text", data:myData, success: function (data, textStatus, jqXHR) { var result = JSON.parse(data); - if(result.switches_addded.length > 0) { + if(result.switches_addded.length > 0) { // FIXME unresolved variable switches_addded nmsInfoBox.hide(); } nmsData.invalidate("switches"); @@ -159,17 +165,18 @@ nmsInfoBox._windowTypes.switchInfo = { sw: '', swi: '', swm: '', + commentsHash: false, + activeView: '', load: function(sw) { if(sw) { this.sw = sw; } this.swi = nmsData.switches["switches"][this.sw]; - try { - this.swm = nmsData.smanagement.switches[this.sw]; - } catch(e) { - this.swm = []; - } - + try { + this.swm = nmsData.smanagement.switches[this.sw]; + } catch(e) { + this.swm = []; + } var content = []; @@ -193,6 +200,15 @@ nmsInfoBox._windowTypes.switchInfo = { this.content = infotable; }, + update: function(type) { + switch (type) { + case 'comments': + if(this.activeView == "comments" && this.commentsHash != nmsData.comments.hash) { + nmsInfoBox._windowTypes.switchInfo.showComments(); + } + break; + } + }, getTitle: function() { return '<button type="button" class="edit btn btn-xs btn-warning" onclick="nmsInfoBox._windowTypes.switchInfo.showEdit(\'' + this.sw + '\');">Edit</button> <button type="button" class="comments btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showComments(\'' + this.sw + '\');">Comments</button> <button type="button" class="edit btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showSNMP(\'ports\');">Ports</button> <button type="button" class="edit btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showSNMP(\'misc\');">Misc</button> ' + this.sw + ''; }, @@ -203,41 +219,60 @@ nmsInfoBox._windowTypes.switchInfo = { return this.childContent; }, showComments: function() { + this.activeView = "comments"; var domObj = document.createElement("div"); var comments = []; - if (nmsData.comments.comments != undefined && nmsData.comments.comments[this.sw] != undefined) { - for (var c in nmsData.comments.comments[this.sw]["comments"]) { - var comment = nmsData.comments.comments[this.sw]["comments"][c]; - if (comment["state"] == "active" || comment["state"] == "persist" || comment["state"] == "inactive") { - comments.push(comment); - } - } - } - if (comments.length > 0) { - var commenttable = nmsInfoBox._makeCommentTable(comments); - commenttable.id = "info-switch-comments-table"; - domObj.appendChild(commenttable); - $(function () { $('[data-toggle="popover"]').popover({placement:"top",continer:'body'}) }) - } var commentbox = document.createElement("div"); commentbox.id = "commentbox"; commentbox.className = "panel-body"; commentbox.style.width = "100%"; - commentbox.innerHTML = '<div class="input-group"><input type="text" class="form-control" placeholder="Comment" id="' + this.sw + '-comment"><span class=\"input-group-btn\"><button class="btn btn-default" onclick="addComment(\'' + this.sw + '\',document.getElementById(\'' + this.sw + '-comment\').value); document.getElementById(\'' + this.sw + '-comment\').value = \'\'; document.getElementById(\'' + this.sw + '-comment\').placeholder = \'Comment added. Wait for next refresh.\'; nmsInfoBox.hide();">Add comment</button></span></div>'; - domObj.appendChild(commentbox); + commentbox.innerHTML = '<div class="input-group"><input type="text" class="form-control" placeholder="Comment" id="' + this.sw + '-comment"><span class=\"input-group-btn\"><button class="btn btn-default" onclick="addComment(\'' + this.sw + '\',document.getElementById(\'' + this.sw + '-comment\').value); document.getElementById(\'' + this.sw + '-comment\').value = \'\'; document.getElementById(\'' + this.sw + '-comment\').placeholder = \'Comment added. Wait for next refresh.\';">Add comment</button></span></div>'; + + // If we have no switch data, so just show comment form + if(!nmsData.comments || !nmsData.comments.comments) { + this.commentsHash = false; + + // We have data, but its old, so don't change data + } else if(this.commentsHash != false && this.commentsHash == nmsData.comments.hash) { + return; + + // We have data, refresh + } else if(nmsData.comments.comments[this.sw]) { + this.commentsHash = nmsData.comments.hash; + for (var c in nmsData.comments.comments[this.sw]["comments"]) { + var comment = nmsData.comments.comments[this.sw]["comments"][c]; + if (comment["state"] == "active" || comment["state"] == "persist" || comment["state"] == "inactive") { + comments.push(comment); + } + } + + if (comments.length > 0) { + var commenttable = nmsInfoBox._makeCommentTable(comments); + commenttable.id = "info-switch-comments-table"; + domObj.appendChild(commenttable); + $(function () { $('[data-toggle="popover"]').popover({placement:"top",continer:'body'}) }) + } + + // We have no data for this switch, but its still correct + } else { + this.commentsHash = nmsData.comments.hash; + } + domObj.appendChild(commentbox); this.childContent = domObj; nmsInfoBox.refresh(); }, showEdit: function() { + this.activeView = "edit"; var domObj = document.createElement("div"); var template = {}; nmsInfoBox._editValues = {}; + var place; for (var v in this.swi) { if (v == "placement") { - var place = JSON.stringify(this.swi[v]); + place = JSON.stringify(this.swi[v]); template[v] = place; continue; } @@ -255,6 +290,8 @@ nmsInfoBox._windowTypes.switchInfo = { content.push([v, html]); } + content.sort(); + var table = nmsInfoBox._makeTable(content, "edit"); domObj.appendChild(table); @@ -280,6 +317,7 @@ nmsInfoBox._windowTypes.switchInfo = { nmsInfoBox.refresh(); }, showSNMP: function(tree) { + this.activeView = "snmp"; var domObj = document.createElement("div"); var output = document.createElement("output"); @@ -297,13 +335,14 @@ nmsInfoBox._windowTypes.switchInfo = { }, unload: function() { this.childContent = false; + this.commentsHash = false; + this.activeView = ""; }, save: function() { var myData = nmsInfoBox._editStringify(this.sw); - console.log(myData); $.ajax({ type: "POST", - url: "/api/private/switch-update", + url: "/api/write/switch-update", dataType: "text", data:myData, success: function (data, textStatus, jqXHR) { @@ -311,7 +350,6 @@ nmsInfoBox._windowTypes.switchInfo = { nmsData.invalidate("smanagement"); } }); - nmsInfoBox.hide(); } }; @@ -322,7 +360,8 @@ nmsInfoBox._windowTypes.switchInfo = { nmsInfoBox.click = function(sw) { this.showWindow("switchInfo",sw); -} + this._windowTypes.switchInfo.showComments(); +}; /* * General-purpose table-maker? @@ -352,7 +391,7 @@ nmsInfoBox._makeTable = function(content, caption) { td2.innerHTML = content[v][1]; } return table; -} +}; /* * Create and return a table for comments. @@ -395,7 +434,7 @@ nmsInfoBox._makeCommentTable = function(content) { td2.innerHTML = comment["comment"]; } return table; -} +}; nmsInfoBox._searchSmart = function(id, sw) { try { @@ -424,6 +463,15 @@ nmsInfoBox._searchSmart = function(id, sw) { } } } + if (nmsData.smanagement.switches[sw].ip.match(id)) { + return true; + } + if (nmsData.smanagement.switches[sw].subnet4.match(id)) { + return true; + } + if (nmsData.smanagement.switches[sw].subnet6.match(id)) { + return true; + } if (nmsData.snmp.snmp[sw].misc.sysDescr[0].match(id)) { return true; } @@ -431,7 +479,7 @@ nmsInfoBox._searchSmart = function(id, sw) { return false; } return false; -} +}; /* * FIXME: Not sure this belongs here, it's really part of the "Core" ui, @@ -445,50 +493,54 @@ nmsInfoBox._search = function() { id = el.value; } if(id) { + nmsMap.enableHighlights(); for(var sw in nmsData.switches.switches) { - if (id[0] == "/") { - if (nmsInfoBox._searchSmart(id.slice(1),sw)) { - matches.push(sw); - nmsMap.setSwitchHighlight(sw,true); - } else { - nmsMap.setSwitchHighlight(sw,false); - } + if(sw.indexOf(id) > -1) { + matches.push(sw); + nmsMap.setSwitchHighlight(sw,true); + } else if (nmsInfoBox._searchSmart(id,sw)) { + matches.push(sw); + nmsMap.setSwitchHighlight(sw,true); } else { - if(sw.indexOf(id) > -1) { - matches.push(sw); - nmsMap.setSwitchHighlight(sw,true); - } else { - nmsMap.setSwitchHighlight(sw,false); - } + nmsMap.setSwitchHighlight(sw,false); } } } else { - nmsMap.removeAllSwitchHighlights(); + nmsMap.disableHighlights(); } if(matches.length == 1) { document.getElementById("searchbox-submit").classList.add("btn-primary"); document.getElementById("searchbox").dataset.match = matches[0]; - document.getElementById("searchbox").addEventListener("keydown",nmsInfoBox._searchKeyListener,false); } else { document.getElementById("searchbox-submit").classList.remove("btn-primary"); document.getElementById("searchbox").dataset.match = ''; - document.getElementById("searchbox").removeEventListener("keydown",nmsInfoBox._searchKeyListener,false); } -} +}; nmsInfoBox._searchKeyListener = function(e) { - if(e.keyCode == 13) { - var sw = document.getElementById("searchbox").dataset.match; - nmsInfoBox.showWindow("switchInfo",sw); + switch (e.keyCode) { + case 13: + var sw = document.getElementById("searchbox").dataset.match; + if(sw != '') { + nmsInfoBox.showWindow("switchInfo",sw); + this._windowTypes.switchInfo.showComments(); + } + break; + case 27: + document.getElementById("searchbox").dataset.match = ''; + document.getElementById("searchbox").value = ''; + nmsInfoBox._search(); + nmsInfoBox.hide(); + break; } -} +}; nmsInfoBox._nullBlank = function(x) { if (x == null || x == false || x == undefined) return ""; return x; -} +}; nmsInfoBox._editChange = function(sw, v) { @@ -509,13 +561,9 @@ nmsInfoBox._editChange = function(sw, v) { var myData = nmsInfoBox._editStringify(sw); var out = document.getElementById("edit-output"); out.value = myData; -} +}; nmsInfoBox._editStringify = function(sw) { - for (var key in nmsInfoBox._editValues) { - var val = nmsInfoBox._editValues[key]; - } - nmsInfoBox._editValues['sysname'] = sw; - var myData = JSON.stringify([nmsInfoBox._editValues]); - return myData; -} + nmsInfoBox._editValues['sysname'] = sw; + return JSON.stringify([nmsInfoBox._editValues]); +}; diff --git a/web/nms-public.gathering.org/js/nms-map-handlers.js b/web/nms-public.gathering.org/js/nms-map-handlers.js index a6dc942..0bec084 100644 --- a/web/nms-public.gathering.org/js/nms-map-handlers.js +++ b/web/nms-public.gathering.org/js/nms-map-handlers.js @@ -49,6 +49,12 @@ var handler_traffic_tot = { name:"Switch traffic map" }; +var handler_dhcp = { + init:dhcpInit, + tag:"dhcp", + name:"DHCP map" +}; + var handler_disco = { init:discoInit, tag:"disco", @@ -68,7 +74,8 @@ var handlers = [ handler_traffic, handler_disco, handler_comment, - handler_traffic_tot + handler_traffic_tot, + handler_dhcp ]; /* @@ -84,7 +91,7 @@ function uplinkUpdater() return; if (!nmsData.switchstate.switches) return; - for (sw in nmsData.switches.switches) { + for (var sw in nmsData.switches.switches) { var uplinks=0; if (nmsData.switchstate.switches[sw] == undefined || nmsData.switchstate.switches[sw].uplinks == undefined) { uplinks=0; @@ -95,12 +102,12 @@ function uplinkUpdater() if (uplinks == 0) { nmsMap.setSwitchColor(sw,"white"); - } else if (nuplinks == uplinks) { - nmsMap.setSwitchColor(sw,green); - } else if (nuplinks - uplinks == 1) { - nmsMap.setSwitchColor(sw, orange); - } else if (nuplinks - uplinks == 2) { + } else if (uplinks == 1) { nmsMap. setSwitchColor(sw, red); + } else if (uplinks == 2) { + nmsMap.setSwitchColor(sw, orange); + } else if (uplinks == 3) { + nmsMap.setSwitchColor(sw,green); } else if (uplinks > 3) { nmsMap.setSwitchColor(sw, blue); } @@ -115,9 +122,9 @@ function uplinkInit() nmsData.addHandler("switches","mapHandler",uplinkUpdater); nmsData.addHandler("switchstate","mapHandler",uplinkUpdater); setLegend(1,"white","0 uplinks"); - setLegend(2,red,"2 missing"); - setLegend(3,orange,"1 missing"); - setLegend(4,green,"0 missing"); + setLegend(2,red,"1 uplink"); + setLegend(3,orange,"2 uplinks"); + setLegend(4,green,"3 uplinks"); setLegend(5,blue,"4 uplinks"); } @@ -139,9 +146,9 @@ function trafficUpdater() { if (!nms.switches_now["switches"]) return; - for (sw in nms.switches_now["switches"]) { + for (var sw in nms.switches_now["switches"]) { var speed = 0; - for (port in nms.switches_now["switches"][sw]["ports"]) { + for (var port in nms.switches_now["switches"][sw]["ports"]) { if (/ge-0\/0\/44$/.exec(port) || /ge-0\/0\/45$/.exec(port) || /ge-0\/0\/46$/.exec(port) || @@ -177,9 +184,9 @@ function trafficTotUpdater() { if (!nms.switches_now["switches"]) return; - for (sw in nms.switches_now["switches"]) { + for (var sw in nms.switches_now["switches"]) { var speed = 0; - for (port in nms.switches_now["switches"][sw]["ports"]) { + for (var port in nms.switches_now["switches"][sw]["ports"]) { if (!nms.switches_then["switches"][sw] || !nms.switches_then["switches"][sw]["ports"] || !nms.switches_then["switches"][sw]["ports"][port]) @@ -220,14 +227,14 @@ function tempUpdater() if(!nmsData.switches) return; - for (sw in nmsData.switches["switches"]) { + for ( var sw in nmsData.switches["switches"]) { var t = "white"; var temp = ""; - - if(!nmsData.snmp || !nmsData.snmp.snmp[sw] || !nmsData.snmp.snmp[sw]["misc"] || !nmsData.snmp.snmp[sw]["misc"]["enterprises.2636.3.1.13.1.7.7.1.0.0"]) + + if(!nmsData.snmp || !nmsData.snmp.snmp || ! nmsData.snmp.snmp[sw] || !nmsData.snmp.snmp[sw]["misc"] || !nmsData.snmp.snmp[sw]["misc"]["enterprises.2636.3.1.13.1.7.7.1.0.0"]) continue; - tempObj = nmsData.snmp.snmp[sw]["misc"]["enterprises.2636.3.1.13.1.7.7.1.0.0"]; + var tempObj = nmsData.snmp.snmp[sw]["misc"]["enterprises.2636.3.1.13.1.7.7.1.0.0"]; Object.keys(tempObj).forEach(function (key) { if(key == "") { temp = tempObj[key] + "°C"; @@ -259,6 +266,7 @@ function pingUpdater() } for (var sw in nmsData.switches.switches) { try { + var c; if (nmsData.ping.switches[sw].age > 0) { c = red; } else { @@ -291,6 +299,8 @@ function commentUpdater() if (nmsData.comments == undefined || nmsData.comments.comments == undefined) { return } + if(!nmsData.switches) + return; for (var sw in nmsData.switches.switches) { var c = "white"; if (nmsData.comments.comments[sw] == undefined) { @@ -336,6 +346,55 @@ function commentInit() setLegend(5,green ,"Old/inactive only"); } +function getDhcpColor(stop) +{ + stop = parseInt(stop); + stop = stop * 0.85; + if (stop < 0) + stop = 1000; + if (stop > 1000) + stop = 1000; + return getColorStop(stop); +} + +function dhcpUpdater() +{ + var realnow = Date.now(); + var now = Math.floor(realnow / 1000); + if (nmsData.dhcp == undefined || nmsData.dhcp.dhcp == undefined) { + return + } + if (nmsData.switches == undefined || nmsData.switches.switches == undefined) { + return; + } + try { + for (var sw in nmsData.switches.switches) { + var c = "white"; + if (nmsData.dhcp.dhcp[sw] == undefined) { + nmsMap.setSwitchColor(sw,c); + continue; + } + var s = nmsData.dhcp.dhcp[sw]; + var then = parseInt(s); + c = getDhcpColor(now - then); + nmsMap.setSwitchColor(sw, c); + } + } catch(e) { + console.log(e); + } +} + +function dhcpInit() +{ + drawGradient([green,lightgreen,orange,red]); + nmsData.addHandler("dhcp","mapHandler",dhcpUpdater); + setLegend(1,"white","Undefined"); + setLegend(2,getDhcpColor(1),"1 Second old"); + setLegend(3,getDhcpColor(300),"300 Seconds old"); + setLegend(4,getDhcpColor(900),"900 Seconds old"); + setLegend(5,getDhcpColor(1200),"1200 Seconds old"); +} + /* * Testing-function to randomize colors of linknets and switches */ diff --git a/web/nms-public.gathering.org/js/nms-map.js b/web/nms-public.gathering.org/js/nms-map.js index b74626a..648643c 100644 --- a/web/nms-public.gathering.org/js/nms-map.js +++ b/web/nms-public.gathering.org/js/nms-map.js @@ -10,7 +10,8 @@ * nmsMap.setSwitchColor(switch,color) * nmsMap.setSwitchInfo(switch,info) * nmsMap.setSwitchHighlight(switch,true/false) - * nmsMap.removeAllSwitchHighlights() + * nmsMap.enableHighlights() + * nmsMap.disableHighlights() */ @@ -46,21 +47,24 @@ var nmsMap = nmsMap || { }, _color: { }, + _linknets: {} , _highlight: { }, + _highlightActive: false, _c: {} -} +}; nmsMap._loadEvent = function(e) { nmsMap._init = false; nmsMap._drawAllSwitches(); -} +}; + nmsMap.init = function() { this._initContexts(); this._init = true; nmsData.addHandler("switches","nmsMap",function(){nmsMap._resizeEvent();}); window.addEventListener('resize',nmsMap._resizeEvent,true); window.addEventListener('load',nmsMap._loadEvent,true); -} +}; nmsMap.setSwitchColor = function(sw, color) { if (this._color[sw] != color) { @@ -70,22 +74,30 @@ nmsMap.setSwitchColor = function(sw, color) { } else { this.stats.colorSame++; } -} +}; + nmsMap.setSwitchHighlight = function(sw, highlight) { - if(highlight) - highlight == true; - if (this._highlight[sw] != highlight) { - this._highlight[sw] = highlight; - this._drawSwitch(sw); - this.stats.highlightChange++; - } -} + if( highlight ) + highlight = true; + if ( this._highlight[sw] != highlight ) { + this.stats.highlightChange++; + this._highlight[sw] = highlight; + } + this._drawSwitch(sw); +}; + + +nmsMap.enableHighlights = function() { + this._highlightActive = true; +}; + + +nmsMap.disableHighlights = function() { + this._highlightActive = false; + this._drawAllSwitches(); +}; -nmsMap.removeAllSwitchHighlights = function() { - for(var sw in this._highlight) - this.setSwitchHighlight(sw,false); -} nmsMap.reset = function() { for (var sw in this._color) { @@ -94,7 +106,7 @@ nmsMap.reset = function() { for (var sw in this._info) { nmsMap.setSwitchInfo(sw, undefined); } -} +}; nmsMap.setSwitchInfo = function(sw,info) { if (this._info[sw] != info) { @@ -104,19 +116,19 @@ nmsMap.setSwitchInfo = function(sw,info) { } else { this.stats.switchInfoSame++; } -} +}; nmsMap._initContext = function(name) { this._c[name] = {}; this._c[name].c = document.getElementById(name + "Canvas"); this._c[name].ctx = this._c[name].c.getContext('2d'); -} +}; nmsMap._initContexts = function() { for (var context in this.contexts) { this._initContext(this.contexts[context]); } -} +}; nmsMap._resizeEvent = function() { var width = window.innerWidth - nmsMap._c.bg.c.offsetLeft; @@ -149,7 +161,7 @@ nmsMap._resizeEvent = function() { nmsMap.drawNow(); nmsMap.stats.resizeEvents++; } -} +}; /* * Draw current time-window @@ -177,10 +189,10 @@ nmsMap.drawNow = function () ctx.fillStyle = "white"; ctx.strokeStyle = "black"; ctx.lineWidth = nms.fontLineFactor; - ctx.strokeText(now, 0 + this._settings.textMargin, 25); - ctx.fillText(now, 0 + this._settings.textMargin, 25); + ctx.strokeText(now, this._settings.textMargin, 25); + ctx.fillText(now, this._settings.textMargin, 25); ctx.restore(); -} +}; nmsMap.setNightMode = function(toggle) { if (this._nightmode == toggle) @@ -196,14 +208,14 @@ nmsMap.setNightMode = function(toggle) { this._c.blur.c.style.display = ""; } nmsMap._drawBG(); -} +}; nmsMap._drawBG = function() { var imageObj = document.getElementById('source'); this._c.bg.ctx.drawImage(imageObj, 0, 0, nmsMap._canvas.width, nmsMap._canvas.height); if(this._nightmode) nmsMap._invertBG(); -} +}; nmsMap._invertBG = function() { var imageData = this._c.bg.ctx.getImageData(0, 0, nmsMap._canvas.width, nmsMap._canvas.height); @@ -215,7 +227,7 @@ nmsMap._invertBG = function() { data[i + 2] = 255 - data[i + 2]; } this._c.bg.ctx.putImageData(imageData, 0, 0); -} +}; nmsMap._getBox = function(sw) { var box = nmsData.switches.switches[sw]['placement']; @@ -224,7 +236,7 @@ nmsMap._getBox = function(sw) { box.width = parseInt(box.width); box.height = parseInt(box.height); return box; -} +}; nmsMap._drawSwitchBlur = function(sw) { @@ -235,10 +247,11 @@ nmsMap._drawSwitchBlur = function(sw) this._c.blur.ctx.fillStyle = "red"; this._c.blur.ctx.shadowBlur = 30; this._c.blur.ctx.shadowColor = "white"; - this._c.blur.ctx.scale(this.scale, this.scale); // FIXME + this._c.blur.ctx.scale(this.scale, this.scale); // FIXME <- fix what?! this._c.blur.ctx.fillRect(box['x'],box['y'],box['width'],box['height']); this._c.blur.ctx.restore(); -} +}; + nmsMap._drawSwitch = function(sw) { // XXX: If a handler sets a color before switches are loaded... The @@ -247,8 +260,12 @@ nmsMap._drawSwitch = function(sw) return; var box = this._getBox(sw); var color = nmsMap._color[sw]; - if(nmsMap._highlight[sw]) { - color = red; + if(this._highlightActive) { + if(nmsMap._highlight[sw]) { + color = green; + } else { + color = white; + } } if (color == undefined) { color = blue; @@ -257,7 +274,7 @@ nmsMap._drawSwitch = function(sw) this._drawBox(this._c.switch.ctx, box['x'],box['y'],box['width'],box['height']); this._c.switch.ctx.shadowBlur = 0; this._drawText(this._c.text.ctx, sw,box); -} +}; nmsMap._drawSwitchInfo = function(sw) { var box = this._getBox(sw); @@ -266,14 +283,14 @@ nmsMap._drawSwitchInfo = function(sw) { } else { this._drawText(this._c.textInfo.ctx, this._info[sw], box, "right"); } -} +}; nmsMap._clearBox = function(ctx,box) { ctx.save(); ctx.scale(this.scale,this.scale); ctx.clearRect(box['x'], box['y'], box['width'], box['height']); ctx.restore(); -} +}; nmsMap._drawText = function(ctx, text, box, align) { var rotate = false; @@ -309,8 +326,13 @@ nmsMap._drawText = function(ctx, text, box, align) { ctx.strokeText(text, 0, 0); ctx.fillText(text, 0, 0); ctx.restore(); -} +}; +nmsMap._drawAllLinknets = function() { + for (var l in nmsData.switches.linknets) { + nmsMap._connectSwitches(nmsData.switches.linknets[l].switch1, nmsData.switches.linknets[l].switch2); + } +} nmsMap._drawAllSwitches = function() { if (nmsData.switches == undefined) { this.stats.earlyDrawAll++; @@ -321,7 +343,7 @@ nmsMap._drawAllSwitches = function() { } if (this._nightmode) this._drawAllBlur(); -} +}; nmsMap._drawAllBlur = function() { if (nmsMap._blurDrawn == true) @@ -330,22 +352,22 @@ nmsMap._drawAllBlur = function() { for (var sw in nmsData.switches.switches) { nmsMap._drawSwitchBlur(sw); } -} +}; nmsMap._drawBox = function(ctx, x, y, boxw, boxh) { ctx.save(); - ctx.scale(this.scale, this.scale); // FIXME + ctx.scale(this.scale, this.scale); // FIXME <- what?! ctx.fillRect(x,y, boxw, boxh); ctx.lineWidth = 1; ctx.strokeStyle = "#000000"; ctx.strokeRect(x,y, boxw, boxh); ctx.restore(); -} +}; nmsMap._connectSwitches = function(sw1, sw2, color1, color2) { nmsMap._connectBoxes(this._getBox(sw1), this._getBox(sw2), color1, color2); -} +}; /* * Draw a line between two boxes, with a gradient going from color1 to @@ -372,13 +394,13 @@ nmsMap._connectBoxes = function(box1, box2,color1, color2) { ctx.lineWidth = 5; ctx.stroke(); ctx.restore(); -} +}; nmsMap.moveSet = function(toggle) { nmsMap._moveInProgress = toggle; if (!toggle) nmsMap._moveStopListen(); -} +}; /* * onclick handler for the canvas. @@ -395,7 +417,7 @@ nmsMap.canvasClick = function(e) nmsInfoBox.click(sw); } } -} +}; nmsMap._clearOld = function(box) { if (box) { @@ -405,7 +427,7 @@ nmsMap._clearOld = function(box) { nmsMap._c.top.ctx.clearRect(box['x'] - 5, box['y'] - 5, box['width'] + 10, box['height'] + 10); nmsMap._c.top.ctx.restore(); } -} +}; nmsMap._moveMove = function(e) { nmsMap._moveX = (e.pageX - e.target.offsetLeft) / nmsMap.scale; @@ -423,28 +445,29 @@ nmsMap._moveMove = function(e) { nmsMap._c.top.ctx.fillStyle = "red"; nmsMap._drawBox(nmsMap._c.top.ctx, box['x'], box['y'], box['width'], box['height']); nmsMap._c.top.ctx.restore(); -} +}; nmsMap._moveSubmit = function() { var data = { sysname: nmsMap._moving, placement: nmsMap._moveOldBox - } + }; var myData = JSON.stringify([data]); $.ajax({ type: "POST", - url: "/api/private/switch-update", + url: "/api/write/switch-update", dataType: "text", data:myData, success: function (data, textStatus, jqXHR) { nmsData.invalidate("switches"); } }); -} +}; + nmsMap._moveStopListen = function() { nmsMap._c.input.c.removeEventListener('mousemove',nmsMap._moveMove, true); nmsMap._c.input.c.removeEventListener('mouseup',nmsMap._moveDone, true); -} +}; nmsMap._moveDone = function(e) { nmsMap._moveStopListen(); @@ -453,7 +476,7 @@ nmsMap._moveDone = function(e) { } nmsMap._moveSubmit(); nmsMap._clearOld(nmsMap._moveOldBox); -} +}; nmsMap._moveStart = function(sw, e) { @@ -464,7 +487,7 @@ nmsMap._moveStart = function(sw, e) nmsMap._moveBox = nmsData.switches.switches[sw].placement; nmsMap._c.input.c.addEventListener('mousemove',nmsMap._moveMove,true); nmsMap._c.input.c.addEventListener('mouseup',nmsMap._moveDone,true); -} +}; /* diff --git a/web/nms-public.gathering.org/js/nms.js b/web/nms-public.gathering.org/js/nms.js index fcb8437..f145177 100644 --- a/web/nms-public.gathering.org/js/nms.js +++ b/web/nms-public.gathering.org/js/nms.js @@ -16,8 +16,8 @@ var nms = { * FIXME: Should just stop using these. */ timers: { - playback:false, - }, + playback:false + }, menuShowing:true, /* @@ -84,7 +84,7 @@ function nmsTimer(handler, interval, name, description) { }; this.setInterval = function(interval) { - var started = this.handle == false ? false : true; + var started = this.handle != false; this.stop(); this.interval = parseInt(interval); if (started) @@ -162,27 +162,27 @@ function stringToEpoch(t) function epochToString(t) { // Adjust for timezone when converting from epoch (UTC) to string (local) - var d = new Date(parseInt(t) * parseInt(1000)); - var timezoneOffset = d.getTimezoneOffset() * -60; + var date = new Date(parseInt(t) * parseInt(1000)); + var timezoneOffset = date.getTimezoneOffset() * -60; t = t - timezoneOffset; - var d = new Date(parseInt(t) * parseInt(1000)); - var str = d.getFullYear() + "-"; - if (parseInt(d.getMonth()) < 9) + date = new Date(parseInt(t) * parseInt(1000)); + var str = date.getFullYear() + "-"; + if (parseInt(date.getMonth()) < 9) str += "0"; - str += (parseInt(d.getMonth())+1) + "-"; - if (d.getDate() < 10) + str += (parseInt(date.getMonth())+1) + "-"; + if (date.getDate() < 10) str += "0"; - str += d.getDate() + "T"; - if (d.getHours() < 10) + str += date.getDate() + "T"; + if (date.getHours() < 10) str += "0"; - str += d.getHours() + ":"; - if (d.getMinutes() < 10) + str += date.getHours() + ":"; + if (date.getMinutes() < 10) str += "0"; - str += d.getMinutes() + ":"; - if (d.getSeconds() < 10) + str += date.getMinutes() + ":"; + if (date.getSeconds() < 10) str += "0"; - str += d.getSeconds(); + str += date.getSeconds(); return str; } @@ -207,7 +207,7 @@ nms.playback.startReplay = function(startTime,stopTime) { nms.playback.stopTime = stringToEpoch(stopTime); nms.now = epochToString(nms.playback.startTime); nms.playback.play(); -} +}; /* * Pause playback @@ -215,7 +215,7 @@ nms.playback.startReplay = function(startTime,stopTime) { nms.playback.pause = function() { nms.timers.playback.stop(); nms.playback.playing = false; -} +}; /* * Start playback @@ -224,7 +224,7 @@ nms.playback.play = function() { nms.playback.tick(); nms.timers.playback.start(); nms.playback.playing = true; -} +}; /* * Toggle playback @@ -235,19 +235,18 @@ nms.playback.toggle = function() { } else { nms.playback.play(); } -} +}; /* * Jump to place in time */ nms.playback.setNow = function(now) { - var now = parseNow(now); - nms.now = now; + nms.now = parseNow(now); nms.playback.stopTime = false; nms.playback.startTime = false; nms.playback.tick(); -} +}; /* * Step forwards or backwards in timer @@ -260,7 +259,7 @@ nms.playback.stepTime = function(n) if(!nms.playback.playing) nms.playback.tick(); -} +}; /* * Ticker to trigger updates, and advance time if replaying @@ -288,7 +287,7 @@ nms.playback.tick = function() if(nms.now !== false && nms.playback.playing) { nms.playback.stepTime(nms.playback.replayIncrement); } -} +}; /* * Helper function for safely getting a valid now-epoch @@ -377,7 +376,7 @@ function commentChange(id,state) myData = JSON.stringify(myData); $.ajax({ type: "POST", - url: "/api/private/comment-change", + url: "/api/write/comment-change", dataType: "text", data:myData, success: function (data, textStatus, jqXHR) { @@ -395,7 +394,7 @@ function addComment(sw,comment) myData = JSON.stringify(myData); $.ajax({ type: "POST", - url: "/api/private/comment-add", + url: "/api/write/comment-add", dataType: "text", data:myData, success: function (data, textStatus, jqXHR) { @@ -412,11 +411,7 @@ function addComment(sw,comment) */ function isIn(box, x, y) { - if ((x >= box.x) && (x <= (box.x + box.width)) && (y >= box.y) && (y <= (box.y + box.height))) { - return true; - } - return false; - + return ((x >= box.x) && (x <= (box.x + box.width)) && (y >= box.y) && (y <= (box.y + box.height))); } /* @@ -468,6 +463,7 @@ function initNMS() { nmsData.registerSource("switches","/api/public/switches"); nmsData.registerSource("switchstate","/api/public/switch-state"); nmsData.registerSource("dhcpsummary","/api/public/dhcp-summary"); + nmsData.registerSource("dhcp","/api/public/dhcp"); // This is a magic dummy-source, it's purpose is to give a unified // way to get ticks every second. It is mainly meant to allow map @@ -481,10 +477,10 @@ function initNMS() { detectHandler(); nms.playback.play(); setupKeyhandler(); + setupSearchKeyHandler(); } function detectHandler() { - var url = document.URL; for (var i in handlers) { if (('#' + handlers[i].tag) == document.location.hash) { setUpdater(handlers[i]); @@ -524,18 +520,21 @@ function setMapModeFromN(e,key) setUpdater(handler_uplinks); break; case '3': - setUpdater(handler_temp); + setUpdater(handler_dhcp); break; case '4': - setUpdater(handler_traffic); + setUpdater(handler_comment); break; case '5': - setUpdater(handler_comment); + setUpdater(handler_temp); break; case '6': - setUpdater(handler_traffic_tot); + setUpdater(handler_traffic); break; case '7': + setUpdater(handler_traffic_tot); + break; + case '9': setUpdater(handler_disco); break; } @@ -608,6 +607,13 @@ function setupKeyhandler() }); } +function setupSearchKeyHandler() +{ + $("#searchbox").keyup(function(e) { + nmsInfoBox._searchKeyListener(e); + }); +} + function getCookie(cname) { var name = cname + "="; @@ -625,8 +631,8 @@ function getCookie(cname) { function saveSettings() { var foo={}; - for (var v in nms.settingsList) { - foo[nms.settingsList[v]] = nms[nms.settingsList[v]]; + for ( var v in nms.settingsList ) { + foo[ nms.settingsList[v] ] = nms[ nms.settingsList[v] ]; } document.cookie = 'nms='+btoa(JSON.stringify(foo)); } |