diff options
Diffstat (limited to 'web/js/nms-map-handlers.js')
-rw-r--r-- | web/js/nms-map-handlers.js | 272 |
1 files changed, 214 insertions, 58 deletions
diff --git a/web/js/nms-map-handlers.js b/web/js/nms-map-handlers.js index f9fe52b..90f6922 100644 --- a/web/js/nms-map-handlers.js +++ b/web/js/nms-map-handlers.js @@ -73,6 +73,13 @@ var handler_cpu = { name:"CPU utilization" }; +var handler_memory = { + init:memoryInit, + getInfo:memoryInfo, + tag:"memory", + name:"Memory utilization" +}; + var handler_health = { init:healthInit, getInfo:healthInfo, @@ -85,6 +92,11 @@ var handler_mgmt = { tag:"mgmt", name:"Management info" }; +var handler_net = { + getInfo:networkInfo, + tag:"net", + name:"Network info" +}; var handler_snmpup = { getInfo:snmpUpInfo, tag:"snmpup", @@ -124,6 +136,7 @@ var handlerInfo = function(tag,desc) { var handlers = [ handler_health, handler_mgmt, + handler_net, handler_uplinks, handler_temp, handler_ping, @@ -133,12 +146,13 @@ var handlers = [ handler_dhcp, handler_snmp, handler_cpu, + handler_memory, handler_snmpup ]; function uplinkInfo(sw) { - var ret = new handlerInfo("uplink","Uplinks"); + var ret = new handlerInfo("snmpup","Uplinks"); ret.why = "Uplinks"; ret.score = 0; var u = 0; @@ -152,39 +166,41 @@ function uplinkInfo(sw) ret.data[0].description = "Uplinks (live/configured)"; if (nmsData.switches.switches[sw].subnet4 == undefined || nmsData.switches.switches[sw].subnet4 == null) { - if (tagged(sw,'3up')) { - known_t = 3; - } else if (tagged(sw,'2up')) { - known_t = 2; - } else if (tagged(sw, '1up')) { - known_t = 1; - } else if (tagged(sw,'4up')) { - known_t = 4; - } - if (known_t != t) { - ret.data[0].value += "(Overridden: " + known_t + ")"; - } - - if (u == known_t) { - ret.score = 0; - ret.why = "All uplinks up"; - } else if (u == 1) { - ret.score = 800; - ret.why = "Only 1 of " + known_t + " uplinks alive"; - } else if (u < known_t) { - ret.score = 450; - ret.why = u + " of " + known_t + " uplinks alive"; - } else if (u > known_t) { - ret.score = 350; - ret.why = u + " of " + known_t + " uplinks alive"; - } - } - } - if (testTree(nmsData,['switchstate','switches',sw,'clients','live'])) { + if (tagged(sw,'3up')) { + known_t = 3; + } else if (tagged(sw,'2up')) { + known_t = 2; + } else if (tagged(sw, '1up')) { + known_t = 1; + } else if (tagged(sw,'4up')) { + known_t = 4; + } + if (known_t != t) { + ret.data[0].value += "(Overridden: " + known_t + ")"; + } + if (u == known_t) { + ret.score = 0; + ret.why = "All uplinks up"; + } else if (u == 1) { + ret.score = 800; + ret.why = "Only 1 of " + known_t + " uplinks alive"; + } else if (u < known_t && !(t >= 10 && u <5)) { + ret.score = 450; + ret.why = u + " of " + known_t + " uplinks alive"; + } else if (u > known_t) { + ret.score = 350; + ret.why = u + " of " + known_t + " uplinks alive"; + } else if (u < known_t && (t >= 10 && u < 5)) { + ret.score = 150; + ret.why = u + " of " + known_t + " uplinks alive (huge diff suggests WIP - downgrading)"; + } + } + } + if (testTree(nmsData,['switchstate','switches',sw,'clients','total'])) { var tu = parseInt(nmsData.switchstate.switches[sw].clients.live); var tt = parseInt(nmsData.switchstate.switches[sw].clients.total); ret.data[1] = {}; - ret.data[1].value = (tu) + " / " + (tt); + ret.data[1].value = (tu && tt) ? (tu) + " / " + (tt) : "None configured"; ret.data[1].description = "Client ports (live/total)"; } if (testTree(nmsData,['switchstate','switches',sw,'totals','live'])) { @@ -471,21 +487,26 @@ function pingInfo(sw) if (!(distro == "" || phy == "" || distro == undefined || phy == undefined)) { if (testTree(nmsData,['snmp','snmp',distro, 'ports',phy,'ifOperStatus'])) { var x = nmsData['snmp']['snmp'][distro]['ports'][phy]['ifOperStatus']; - var ping = parseFloat(nmsData["ping"]["switches"][sw]["latency4"]); - var ping6 = parseFloat(nmsData["ping"]["switches"][sw]["latency6"]); + var ping = "no"; + var ping6 = "no "; + try { + ping = parseFloat(nmsData["ping"]["switches"][sw]["latency4"]); + ping6 = parseFloat(nmsData["ping"]["switches"][sw]["latency6"]); + } catch(e) {} if (x == "up") { ret.data[3] = {}; ret.data[3].description = "Distro-port"; ret.data[3].value = "Distro port is live"; if (isNaN(ping) && isNaN(ping6)) { - ret.score = 850; + ret.score = 700; ret.why = "Distro port is alive, but no IPv4/IPv6 ping. ROLLBACK!"; } } } } } catch(e) { - console.log("lol"); + console.log("Lazy about errors...."); + console.log(e); } } return ret; @@ -516,13 +537,13 @@ function getDhcpColor(stop) function dhcpUpdater() { - if (!testTree(nmsData,['dhcp','dhcp']) || !testTree(nmsData,['switches','switches'])) { - return + if (!testTree(nmsData,['dhcp','dhcp']) || !testTree(nmsData,['switches','switches']) || !testTree(nmsData,['smanagement','switches'])) { + return; } var now = nmsData.dhcp.time; for (var sw in nmsData.switches.switches) { var c = nmsColor.blue; - var s = nmsData.dhcp.dhcp[sw]; + var s = nmsData.dhcp.dhcp[nmsData.smanagement.switches[sw].traffic_vlan]; if (s == undefined) { nmsMap.setSwitchColor(sw,c); continue; @@ -536,11 +557,24 @@ function dhcpInfo(sw) { var ret = new handlerInfo("dhcp","DHCP state"); ret.why = "No DHCP data"; ret.data[0].description = "DHCP age"; - if (testTree(nmsData,['dhcp','dhcp',sw])) { + if (!testTree(nmsData,['dhcp','dhcp']) || !testTree(nmsData,['switches','switches']) || !testTree(nmsData,['smanagement','switches'])) { + return ret.data[1] = {}; + } + var dhcpClients = 0; + var clientPortsUp = 0; + var clientPortsUp = setTree(nmsData,['switchstate','switches',sw,'clients','live'],0); + var clientPortsTotal = setTree(nmsData,['switchstate','switches',sw,'clients','total'],0); + if (testTree(nmsData,['dhcp','networks',nmsData.smanagement.switches[sw].traffic_vlan,'clients'])) { + dhcpClients = nmsData.dhcp.networks[nmsData.smanagement.switches[sw].traffic_vlan].clients; + } + if (testTree(nmsData,['dhcp','dhcp',nmsData.smanagement.switches[sw].traffic_vlan])) { var now = nmsData.dhcp.time; - var then = nmsData.dhcp.dhcp[sw]; + var then = nmsData.dhcp.dhcp[nmsData.smanagement.switches[sw].traffic_vlan]; var diff = now - then; var divider = 6; + if (dhcpClients < 10) { + divider = 12; + } if(tagged(sw,'slowdhcp')) { divider = 12; } @@ -551,24 +585,39 @@ function dhcpInfo(sw) { } else { ret.data[0].value = "No DHCP data"; if (testTree(nmsData,['smanagement','switches',sw])) { - if (nmsData.smanagement.switches[sw].subnet4 == undefined || - nmsData.smanagement.switches[sw].subnet4 == "") { - ret.data[0].value = "No associated subnets"; + if (nmsData.smanagement.switches[sw].traffic_vlan == undefined || + nmsData.smanagement.switches[sw].traffic_vlan == "") { + ret.data[0].value = "No associated networks"; ret.score = 0; - ret.why = "No subnet registered"; + ret.why = "No network associated"; } else { - ret.score = 350; - ret.why = "No DHCP data"; + if (!(clientPortsUp < 2 && clientPortsTotal > 20)) { + ret.score = 350; + ret.why = "No DHCP data"; + } else { + ret.data[0].value = "No DHCP data, but too few clients anyway"; + } } } else { ret.score = 100; ret.why = "No management data for DHCP"; } } - if (testTree(nmsData,['dhcp','switches',sw,'clients'])) { + if (testTree(nmsData,['dhcp','networks',nmsData.smanagement.switches[sw].traffic_vlan,'clients'])) { + var dhcpClients = nmsData.dhcp.networks[nmsData.smanagement.switches[sw].traffic_vlan].clients; ret.data[1] = {}; - ret.data[1].value = nmsData.dhcp.switches[sw].clients; + ret.data[1].value = nmsData.dhcp.networks[nmsData.smanagement.switches[sw].traffic_vlan].clients; ret.data[1].description = "DHCP clients"; + if (testTree(nmsData,['switchstate','switches',sw,'clients','live'])) { + var tu = parseInt(nmsData.switchstate.switches[sw].clients.live); + var tt = parseInt(nmsData.switchstate.switches[sw].clients.total); + if (tu - dhcpClients > 12) { + if (ret.score < 450) { + ret.score = 450; + ret.why = "Far more client ports than dhcp clients"; + } + } + } } if (testTree(nmsData,['switches','switches',sw, 'tags'])) { if (tagged(sw,'ignoredhcp')) { @@ -709,7 +758,7 @@ function snmpInit() { } function snmpUpInfo(sw) { - var ret = new handlerInfo("snmpup","SNMP uplink data"); + var ret = new handlerInfo("uplink","SNMP uplink data"); ret.why = "No SNMP data"; ret.score = 0; @@ -718,16 +767,20 @@ function snmpUpInfo(sw) { var seen_up = 0; for (var port in nmsData.snmp.snmp[sw].ports) { var x = nmsData.snmp.snmp[sw].ports[port]; - if (x["ifAlias"].match(/Uplink/i) && x["ifOperStatus"] == "up") { + if (x["ifAlias"].match(/Gruppe/i) && x["ifOperStatus"] == "up") { total_up += parseInt(x["ifHighSpeed"]); } - if (x["ifAlias"].match(/LAG Member/i) && x["ifOperStatus"] == "up") { + if (x["ifAlias"].match(/Fysisk/i) && x["ifOperStatus"] == "up") { seen_up += parseInt(x["ifHighSpeed"]); } } ret.data[0].value = "LAG member speed and total speed is " + seen_up; if (total_up != seen_up) { ret.score = 500; + if (tagged(sw,'ignoreuplink')) { + ret.score = 0; + } + ret.why = "LAG member (ge/xe/et) speed is " + seen_up + " but logical (ae) is " + total_up; ret.data[0].value = ret.why; } @@ -777,6 +830,47 @@ function cpuUpdater() { } } } +function memoryUpdater() { + for (var sw in nmsData.switches.switches) { + try { + var buffer = 0; + for (var u in nmsData.snmp.snmp[sw].misc.jnxOperatingBuffer) { + var local = nmsData.snmp.snmp[sw].misc['jnxOperatingBuffer'][u]; + buffer = Math.max(nmsData.snmp.snmp[sw].misc.jnxOperatingBuffer[u],buffer); + } + nmsMap.setSwitchColor(sw, nmsColor.getColorStop(buffer * 10)); + nmsMap.setSwitchInfo(sw, buffer + " % "); + } catch (e) { + nmsMap.setSwitchColor(sw, "white"); + nmsMap.setSwitchInfo(sw, "N/A"); + } + } +} +function memoryInfo(sw) { + var ret = new handlerInfo("memory","Memory utilization"); + ret.why = "No Memory info"; + ret.score = 0; + + if (testTree(nmsData,['snmp','snmp',sw, 'misc','jnxOperatingBuffer'])) { + var memory = 0; + for (var u in nmsData.snmp.snmp[sw].misc.jnxOperatingBuffer) { + var local = nmsData.snmp.snmp[sw].misc['jnxOperatingBuffer'][u]; + memory = Math.max(nmsData.snmp.snmp[sw].misc.jnxOperatingBuffer[u],memory); + } + if (memory < 70) { + ret.score = 0; + } else if (memory < 80) { + ret.score = 100; + } else if (memory < 90) { + ret.score = memory * 2; + } else { + ret.score = memory * 6; + } + ret.why = "Memory utilization: " + memory + "%"; + ret.data[0].value = memory + "%"; + } + return ret; +} function tagged(sw, tag) { if (testTree(nmsData,['switches','switches',sw, 'tags'])) { @@ -787,6 +881,63 @@ function tagged(sw, tag) { return false; } +function networkInfo(sw) { + var ret = new handlerInfo("net","Network info"); + ret.score = 0; + ret.why = "All good"; + if (testTree(nmsData,['smanagement','switches',sw])) { + var i = 0; + var mg = nmsData.smanagement.switches[sw]; + var objs = [{ + d: "Management", + v: setTree(nmsData,['networks','networks',mg.mgmt_vlan],undefined) + },{ + d: "Traffic", + v: setTree(nmsData,['networks','networks',mg.traffic_vlan],undefined) + } + ]; + for (var x in objs) { + a = objs[x]; + if (a.v == undefined) { + ret.data[i++] = { + value: 'Not set', + description: a.d + ' network' + }; + continue; + } + + ret.data[i++] = { + value: a.v.name || "Not set", + description: a.d + " network" + } + ret.data[i++] = { + value: a.v.vlan || "Not set", + description: a.d + " vlan" + } + ret.data[i++] = { + value: a.v.subnet4 || "Not set", + description: a.d + " subnet IPv4" + } + ret.data[i++] = { + value: a.v.gw4 || "Not set", + description: a.d + " gw IPv4" + } + ret.data[i++] = { + value: a.v.subnet6 || "Not set", + description: a.d + " subnet IPv6" + } + ret.data[i++] = { + value: a.v.gw6 || "Not set", + description: a.d + " gw IPv6" + } + ret.data[i++] = { + value: a.v.router || "Not set", + description: a.d + " net router" + } + } + } + return ret; +} function mgmtInfo(sw) { var ret = new handlerInfo("mgmt","Management info"); ret.score = 0; @@ -801,15 +952,10 @@ function mgmtInfo(sw) { value: mg.mgmt_v6_addr || "N/A", description: "Management IP (v6)" }, { - value: mg.subnet4 || "N/A", - description: "Subnet (v4)" - }, { - value: mg.subnet6 || "N/A", - description: "Subnet (v6)" - }, { value: mg.distro_name || "N/A", description: "Distro" - }]; + } + ]; if ((mg.mgmt_v4_addr == undefined || mg.mgmt_v4_addr == "") && (mg.mgmt_v6_addr == undefined || mg.mgmt_v6_addr == "")) { ret.why = "No IPv4 or IPv6 management IP"; ret.score = 1000; @@ -843,6 +989,16 @@ function cpuInit() { setLegend(5,"white","N/A"); cpuUpdater(); } +function memoryInit() { + nmsData.addHandler("snmp", "mapHandler", memoryUpdater); + nmsColor.drawGradient([nmsColor.green,nmsColor.orange,nmsColor.red]); + setLegend(1,getColorStop(0),"0 %"); + setLegend(2,getColorStop(250),"25 %"); + setLegend(3,getColorStop(600),"60 %"); + setLegend(4,getColorStop(1000),"100 %"); + setLegend(5,"white","N/A"); + memoryUpdater(); +} function healthInfo(sw) { var worst = new handlerInfo("health", "Health"); |