diff options
author | root <root@colazero.tele.tg18.gathering.org> | 2018-03-31 22:28:26 +0200 |
---|---|---|
committer | root <root@colazero.tele.tg18.gathering.org> | 2018-03-31 22:28:26 +0200 |
commit | 38b48dd77b57b116f633b1cf5d68cc70a44b1ea8 (patch) | |
tree | 52b6b4a1af7c4aff3321f4ce60e88d4a483ba315 /web/js | |
parent | be54730288b9925003e88788e65f11199cc8292b (diff) |
Throw TG18-stuff over the wall
Diffstat (limited to 'web/js')
-rw-r--r-- | web/js/nms-draw-chart.js | 2 | ||||
-rw-r--r-- | web/js/nms-info-box.js | 79 | ||||
-rw-r--r-- | web/js/nms-map-handlers.js | 91 | ||||
-rw-r--r-- | web/js/nms-template.js | 4 | ||||
-rw-r--r-- | web/js/nms.js | 1 |
5 files changed, 161 insertions, 16 deletions
diff --git a/web/js/nms-draw-chart.js b/web/js/nms-draw-chart.js index da621e7..0920d05 100644 --- a/web/js/nms-draw-chart.js +++ b/web/js/nms-draw-chart.js @@ -22,7 +22,6 @@ function drawLatency(canvas, sw, chart, callback) { data.push({t: new Date(element[0]), y: element[1]}); }); var borderColor = "rgba(0,155,200,255)"; - console.log(serie['tags']['version']); if(serie['tags']['version'] === "v6") { borderColor = "rgba(100,155,100,255)"; } @@ -95,6 +94,7 @@ function drawSumOfPorts(canvas, sw) { var bits_in = []; var bits_out = []; + results['results'][0]['series'].forEach(function(serie) { // Bytes in diff --git a/web/js/nms-info-box.js b/web/js/nms-info-box.js index 4e8b18d..a7ddfc1 100644 --- a/web/js/nms-info-box.js +++ b/web/js/nms-info-box.js @@ -50,6 +50,10 @@ var nmsInfoBox = nmsInfoBox || { 'name': 'SNMP', 'panels': ['switchSNMP:misc'] }, + 'links': { + 'name': 'Links', + 'panels': ['switchLinks'] + }, 'edit': { 'name': 'Edit settings', 'panels': ['switchEdit'] @@ -125,7 +129,11 @@ var nmsInfoBox = nmsInfoBox || { 'jnxBoxSerialNo': { 'name': 'Serial numbers', 'panels': ['inventoryListing:jnxBoxSerialNo'] - } + }, + 'transceiver': { + 'name': 'Transceivers', + 'panels': ['inventoryListing:transceiver'] + } } }, { @@ -657,7 +665,13 @@ var switchPortsPanel = function () { indicies.push(obj); } indicies.sort(function(a,b) { - return snmpJson[a].ifIndex - snmpJson[b].ifIndex; + var tmpx = [ snmpJson[a].ifName, snmpJson[b].ifName ]; + tmpx.sort(); + if (tmpx[0] == snmpJson[a].ifName) { + return -1; + } else { + return 1; + } }); for(var obji in indicies) { var obj = indicies[obji]; @@ -686,7 +700,7 @@ var switchPortsPanel = function () { } } catch(e) {}; - groupObj.innerHTML = '<span class="panel-heading" style="display:block;"><a class="collapse-controller" role="button" data-toggle="collapse" href="#'+cleanObj+'-group">' + snmpJson[obj].ifDescr + ' </a><small>' + snmpJson[obj].ifName + '</small><span class="pull-right">' + traffic + '<i class="btn-xs ' + button + '"><span class="glyphicon ' + glyphicon + '" title="' + title + '" aria-hidden="true"></span></i></span></span>'; + groupObj.innerHTML = '<span class="panel-heading" style="display:block;"><a class="collapse-controller" role="button" data-toggle="collapse" href="#'+cleanObj+'-group">' + snmpJson[obj].ifName + ' </a><small>' + snmpJson[obj].ifAlias + '</small><span class="pull-right">' + traffic + '<i class="btn-xs ' + button + '"><span class="glyphicon ' + glyphicon + '" title="' + title + '" aria-hidden="true"></span></i></span></span>'; var groupObjCollapse = document.createElement("div"); groupObjCollapse.id = cleanObj + "-group"; @@ -885,6 +899,9 @@ var inventoryListingPanel = function() { case 'jnxBoxSerialNo': listTitle = 'Serial Numbers'; break; + case 'transceiver': + listTitle = 'Transceivers'; + break; default: listTitle = 'Distro names'; } @@ -900,15 +917,18 @@ var inventoryListingPanel = function() { switch (this.mode) { case 'distro_name': value = nmsData.switches.switches[sw]["distro_name"]; + resultArray.push([sw, value]); break; case 'sysDescr': value = nmsData.snmp.snmp[sw]["misc"]["sysDescr"][0]; + resultArray.push([sw, value]); break; case 'jnxBoxSerialNo': if(testTree(nmsData,["snmp","snmp",sw,"misc","entPhysicalSerialNum"])) { for (var x in nmsData.snmp.snmp[sw]["misc"]["entPhysicalSerialNum"]) { value = "misc" + x + ":" + nmsData.snmp.snmp[sw]["misc"]["entPhysicalSerialNum"][x]; - resultArray.push([sw, value]); + var entPhysicalDescr = nmsData.snmp.snmp[sw]["misc"]["entPhysicalDescr"][x]; + resultArray.push([sw, entPhysicalDescr+': '+value]); } } if (testTree(nmsData,["snmp","snmp",sw,"misc","jnxVirtualChassisMemberSerialnumber"])) { @@ -918,11 +938,23 @@ var inventoryListingPanel = function() { } } value = nmsData.snmp.snmp[sw]["misc"]["jnxBoxSerialNo"][0]; + resultArray.push([sw, value]); break; + case 'transceiver': + if(testTree(nmsData,["snmp","snmp",sw,"misc","entPhysicalSerialNum"])) { + for (var x in nmsData.snmp.snmp[sw]["misc"]["entPhysicalSerialNum"]) { + var entPhysicalDescr = nmsData.snmp.snmp[sw]["misc"]["entPhysicalDescr"][x]; + if(!entPhysicalDescr.match(/^SFP/)) { + continue; + } + value = entPhysicalDescr + ": " + nmsData.snmp.snmp[sw]["misc"]["entPhysicalSerialNum"][x]; + resultArray.push([sw, entPhysicalDescr+': '+value]); + } + } + break; + } } catch (e) {console.log("sw: " + sw); console.log(e);} - - resultArray.push([sw, value]); } resultArray.sort(); @@ -1204,6 +1236,40 @@ nmsInfoBox.setLegendPick = function(tag,id) { } nmsInfoBox.addPanelType("switchSummary",switchSummaryPanel); +var switchLinks = function() { + nmsInfoPanel.call(this,"switchLinks"); + var latencyChart; + this.init = function() { + this.refresh(); + }; + this.refresh = function(reason) { + var content = []; + if (this.sw == false) { + console.log("ugh, cleanup failed?"); + return; + } + var sw = this.sw; + + var topp = document.createElement("div") + var urls = [ "https://gondul.tg.lol/api/templates/magic.conf/switch=" + sw, + "http://185.110.148.5/api/templates/magic.conf/switch=" + sw, + "http://gondul.tg.lol/api/templates/magic.conf/switch=" + sw ]; + if (testTree(nmsData,['smanagement','switches',sw])) { + var mg = nmsData["smanagement"]["switches"][sw]; + urls.push("ssh://[" + mg.mgmt_v6_addr + "]"); + urls.push("ssh://" + mg.mgmt_v4_addr); + } + for (var x in urls) { + topp.appendChild(document.createElement("br")); + var link = document.createElement("a"); + link.href = urls[x]; + link.textContent = urls[x]; + topp.appendChild(link); + } + this._render(topp); + }; +}; +nmsInfoBox.addPanelType("switchLinks",switchLinks); /* * Panel type: Add network * @@ -1258,7 +1324,6 @@ var networkListPanel = function() { table.className = "table table-condensed"; table.id = "searchResults-table" for (var net in networks) { - console.log(networks[net]); var row = table.insertRow(net); var cell1 = row.insertCell(0); var cell2 = row.insertCell(1); diff --git a/web/js/nms-map-handlers.js b/web/js/nms-map-handlers.js index 7200c60..5b39fa3 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,6 +140,7 @@ var handlers = [ handler_dhcp, handler_snmp, handler_cpu, + handler_memory, handler_snmpup ]; @@ -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!"; } } @@ -517,7 +525,7 @@ function getDhcpColor(stop) function dhcpUpdater() { if (!testTree(nmsData,['dhcp','dhcp']) || !testTree(nmsData,['switches','switches']) || !testTree(nmsData,['smanagement','switches'])) { - return + return; } var now = nmsData.dhcp.time; for (var sw in nmsData.switches.switches) { @@ -536,6 +544,9 @@ 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']) || !testTree(nmsData,['switches','switches']) || !testTree(nmsData,['smanagement','switches'])) { + return ret.data[1] = {}; + } if (testTree(nmsData,['dhcp','dhcp',nmsData.smanagement.switches[sw].traffic_vlan])) { var now = nmsData.dhcp.time; var then = nmsData.dhcp.dhcp[nmsData.smanagement.switches[sw].traffic_vlan]; @@ -719,16 +730,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; } @@ -778,6 +793,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 < 30) { + ret.score = 0; + } else if (memory < 60) { + 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'])) { @@ -794,6 +850,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", @@ -810,7 +874,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; @@ -844,6 +915,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"); diff --git a/web/js/nms-template.js b/web/js/nms-template.js index 6159f5b..0f25367 100644 --- a/web/js/nms-template.js +++ b/web/js/nms-template.js @@ -46,12 +46,10 @@ nmsTemplate.getTemplates = function() { async: false, dataType: "json", success: function (indata, textStatus, jqXHR) { - console.log(indata['templates']); $.each( indata['templates'], function( value ) { $('#nmsTemplate-select').append($("<option></option>").attr("value",indata['templates'][value]['file']).text(indata['templates'][value]['file'])); }); } }); } - -nmsTemplate.getTemplates(); +//nmsTemplate.getTemplates(); diff --git a/web/js/nms.js b/web/js/nms.js index 5e2dc22..fe2dd8e 100644 --- a/web/js/nms.js +++ b/web/js/nms.js @@ -356,6 +356,7 @@ function getInitialConfig() { } else { nms._public = false; document.body.classList.add("gondul-private"); + nmsTemplate.getTemplates(); } } }); |