aboutsummaryrefslogtreecommitdiffstats
path: root/web/js
diff options
context:
space:
mode:
Diffstat (limited to 'web/js')
-rw-r--r--web/js/nms-draw-chart.js2
-rw-r--r--web/js/nms-info-box.js79
-rw-r--r--web/js/nms-map-handlers.js91
-rw-r--r--web/js/nms-template.js4
-rw-r--r--web/js/nms.js1
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();
}
}
});