diff options
Diffstat (limited to 'web/js/nms-map-handlers.js')
-rw-r--r-- | web/js/nms-map-handlers.js | 146 |
1 files changed, 126 insertions, 20 deletions
diff --git a/web/js/nms-map-handlers.js b/web/js/nms-map-handlers.js index 521b8a7..9f0c548 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, @@ -133,12 +140,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; @@ -180,7 +188,7 @@ function uplinkInfo(sw) } } } - if (testTree(nmsData,['switchstate','switches',sw,'clients','live'])) { + 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] = {}; @@ -478,7 +486,7 @@ function pingInfo(sw) 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!"; } } @@ -516,13 +524,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 +544,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 +572,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 > 5) { + 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 +745,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 +754,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 +817,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'])) { @@ -793,6 +874,14 @@ function mgmtInfo(sw) { ret.why = "All good"; if (testTree(nmsData,['smanagement','switches',sw])) { var mg = nmsData.smanagement.switches[sw]; + var traffic_vlan = "N/A"; + var mgmt_vlan = "N/A"; + if (testTree(nmsData,['networks','networks',mg.traffic_vlan,"vlan"])) { + traffic_vlan = nmsData["networks"]["networks"][mg.traffic_vlan]["vlan"]; + } + if (testTree(nmsData,['networks','networks',mg.mgmt_vlan,"vlan"])) { + mgmt_vlan = nmsData["networks"]["networks"][mg.mgmt_vlan]["vlan"]; + } ret.data = [{ value: mg.mgmt_v4_addr || "N/A", @@ -809,7 +898,14 @@ function mgmtInfo(sw) { }, { value: mg.distro_name || "N/A", description: "Distro" - }]; + }, { + value: traffic_vlan || "N/A", + description: "Client VLAN" + }, { + value: mgmt_vlan || "N/A", + description: "Management VLAN" + } + ]; 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 +939,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"); |