diff options
Diffstat (limited to 'web/js')
| -rw-r--r-- | web/js/nms-draw-chart.js | 111 | ||||
| -rw-r--r-- | web/js/nms-info-box.js | 90 | ||||
| -rw-r--r-- | web/js/nms-map-handlers.js | 146 | ||||
| -rw-r--r-- | web/js/nms-template.js | 74 | ||||
| -rw-r--r-- | web/js/nms-time.js | 12 | ||||
| -rw-r--r-- | web/js/nms.js | 32 | 
6 files changed, 340 insertions, 125 deletions
| diff --git a/web/js/nms-draw-chart.js b/web/js/nms-draw-chart.js index da621e7..60698c0 100644 --- a/web/js/nms-draw-chart.js +++ b/web/js/nms-draw-chart.js @@ -16,63 +16,65 @@ function drawLatency(canvas, sw, chart, callback) {          var dataset = [];          $.getJSON( "/query?db=gondul&q="+q, function( results ) { -                results['results'][0]['series'].forEach(function(serie) { -                        var data = []; -                        serie['values'].forEach(function(element) { -                                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)"; +		try { +			results['results'][0]['series'].forEach(function(serie) { +				var data = []; +				serie['values'].forEach(function(element) { +					data.push({t: new Date(element[0]), y: element[1]}); +				}); +				var borderColor = "rgba(0,155,200,255)"; +				if(serie['tags']['version'] === "v6") { +					borderColor = "rgba(100,155,100,255)"; +				} +				dataset.push({data: data, fill:false, borderColor:borderColor, label:serie['tags']['version'] }); +			}); +			if(chart != false) { +				chart.data.datasets = dataset; +				chart.update(); +				return;	  			} -                        dataset.push({data: data, fill:false, borderColor:borderColor, label:serie['tags']['version'] }); -                }); -		if(chart != false) { -			chart.data.datasets = dataset; -			chart.update(); -			return;	 -		} -		var ctx = document.getElementById(canvas).getContext('2d'); -                var myChart = new Chart(ctx, { -                        type: 'line', -                        data: { -                                datasets: dataset -                        }, -                        options: { -				legend: { -					display: false +			var ctx = document.getElementById(canvas).getContext('2d'); +			var myChart = new Chart(ctx, { +				type: 'line', +				data: { +					datasets: dataset  				}, -                                scales: { -                                        xAxes:[{ -                                                type: 'time', -                                                time: { -                                                        format: "HH:mm", -                                                        unit: 'minute', -                                                        tooltipFormat: 'HH:mm', -                                                        displayFormats: { -                                                                'minute': 'HH:mm', -                                                                'hour': 'HH:mm', -                                                                min: '00:00', -                                                                max: '23:59' -                                                        }, -                                                } -                                        }], -					yAxes: [{ -						ticks: { -							beginAtZero: true +				options: { +					legend: { +						display: false +					}, +					scales: { +						xAxes:[{ +							type: 'time', +							time: { +								format: "HH:mm", +								unit: 'minute', +								tooltipFormat: 'HH:mm', +								displayFormats: { +									'minute': 'HH:mm', +									'hour': 'HH:mm', +									min: '00:00', +									max: '23:59' +								}, +							} +						}], +						yAxes: [{ +							ticks: { +								beginAtZero: true +							} +						}] +					}, +					responsive: true, +					animation: false, +					elements: { +						line: { +							tension: 0.05  						} -					}] -                                }, -                                responsive: true, -				animation: false, -                                elements: { -                                        line: { -                                                tension: 0.05 -                                        } -                                } -                        } -                }); +					} +				} +			}); +		} catch(e) { +		}  	if(callback != undefined) {  		callback(myChart);  	} @@ -95,6 +97,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 1971b61..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].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>'; +			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(); @@ -986,7 +1018,12 @@ var switchEditPanel = function () {  			var tmpsw = '\'' + this.sw + '\'';  			var tmpv = '\'' + v + '\'';  			var tmphandler = '"nmsInfoBox._editChange(' + tmpsw + ',' + tmpv + ');"'; +			if(v == 'community') { +				var html = '<input type="password" autocomplete="off" onfocus="this.type = \'text\'" class="form-control" value="' + template[v] + '" id="edit-' + this.sw + '-' + v + '" onchange=' + tmphandler + ' oninput=' + tmphandler + '>'; +			} +			else {  			var html = '<input type="text" class="form-control" value="' + template[v] + '" id="edit-' + this.sw + '-' + v + '" onchange=' + tmphandler + ' oninput=' + tmphandler + ' ' + (v == 'sysname' || v == 'subnet4' || v == 'subnet6' || v == 'mgmt_v4_gw' || v == 'mgmt_v6_gw' ? "readonly" : "") + '>'; +			}  			if (v == "placement") {  				v = "placement <a onclick='var _x = document.getElementById(\"edit-" + this.sw + "-placement\"); _x.value = \"\\\"reset\\\"\"; _x.oninput();' class='pull-right'>Reset</a>";  			} @@ -1199,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  * @@ -1253,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); @@ -1384,7 +1454,7 @@ var networkEditPanel = function() {  	};  	this.save = function () { -		var myData = nmsInfoBox._editStringify(this.sw); +		var myData = nmsInfoBox._editStringify(this.sw,"name");  		$.ajax({  			type: "POST",  			url: "/api/write/network-update", @@ -1500,7 +1570,7 @@ nmsInfoBox._editChange = function(sw, v) {  	out.value = myData;  }; -nmsInfoBox._editStringify = function(sw) { -	nmsInfoBox._editValues['sysname'] = sw; +nmsInfoBox._editStringify = function(sw, sysname='sysname') { +	nmsInfoBox._editValues[sysname] = sw;  	return JSON.stringify([nmsInfoBox._editValues]);  }; 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"); diff --git a/web/js/nms-template.js b/web/js/nms-template.js index c34ef34..0f25367 100644 --- a/web/js/nms-template.js +++ b/web/js/nms-template.js @@ -4,36 +4,52 @@ var nmsTemplate = nmsTemplate || {  }  nmsTemplate.test = function() { -	var input = document.getElementById("template-input"); -	var output = document.getElementById("template-output"); -	var qp = document.getElementById("template-query-params"); -	$.ajax({ -		type: "POST", -		url: "/api/templates/test" + qp.value, -		async: false, -		data: input.value, -		dataType: "text", -		success: function (indata, textStatus, jqXHR) { -			var output = document.getElementById("template-output"); -			output.value = jqXHR.responseText; -		}, -		error: function (jqXHR, textStatus) { -			var output = document.getElementById("template-output"); -			output.value = jqXHR.responseText; -		} -	}); +        var input = document.getElementById("template-input"); +        var output = document.getElementById("template-output"); +        var qp = document.getElementById("template-query-params"); +        $.ajax({ +                type: "POST", +                url: "/api/templates/test" + qp.value, +                async: false, +                data: input.value, +                dataType: "text", +                success: function (indata, textStatus, jqXHR) { +                        var output = document.getElementById("template-output"); +                        output.value = jqXHR.responseText; +                }, +                error: function (jqXHR, textStatus) { +                        var output = document.getElementById("template-output"); +                        output.value = jqXHR.responseText; +                } +        });  }  nmsTemplate.fromFile = function(template) { -	$.ajax({ -		type: "GET", -		url: "/templates/" + template, -		async: false, -		dataType: "text", -		success: function (indata, textStatus, jqXHR) { -			var output = document.getElementById("template-input"); -			output.value = indata; -		} -	}); -	nmsTemplate.test(); +        if(template == '') { return; } +        $.ajax({ +                type: "GET", +                url: "/templates/" + template, +                async: false, +                dataType: "text", +                success: function (indata, textStatus, jqXHR) { +                        var output = document.getElementById("template-input"); +                        output.value = indata; +                } +        }); +        nmsTemplate.test();  } + +nmsTemplate.getTemplates = function() { +        $.ajax({ +                type: "GET", +                url: "/api/read/template-list", +                async: false, +                dataType: "json", +                success: function (indata, textStatus, jqXHR) { +                        $.each( indata['templates'], function( value ) { +                                $('#nmsTemplate-select').append($("<option></option>").attr("value",indata['templates'][value]['file']).text(indata['templates'][value]['file'])); +                        }); +                } +        }); +} +//nmsTemplate.getTemplates(); diff --git a/web/js/nms-time.js b/web/js/nms-time.js index 315ac79..30604cd 100644 --- a/web/js/nms-time.js +++ b/web/js/nms-time.js @@ -10,11 +10,15 @@   */  var nmsTime = nmsTime || {  	_now: undefined, -	_handle: undefined +	_handle: undefined, +	_stopTime: undefined  }  nmsTime.replayEvent = function() { -	throw "Not yet implemented."; +	var eStart = setTree(nmsData,["config","config","data","start"],"2018-03-23T00:00:00+0200"); +	nmsTime._stopTime = new Date(setTree(nmsData,["config","config","data","end"],"2018-04-01T14:30:00+0200")); +	nmsTime.setNow(eStart); +	nmsTime.startPlayback(10);  }  nmsTime.isRealTime = function() { @@ -89,6 +93,10 @@ nmsTime.step = function(amount) {  		nmsTime.realTime();  		return;  	} +	if (nmsTime._stopTime != undefined && nmsTime._now.getTime() >= nmsTime._stopTime.getTime()) { +		nmsTime.stopPlayback(); +		nmsTime._stopTime = undefined; +	}  	nmsTime._now.setMinutes(nmsTime._now.getMinutes() + amount);  	nmsTime._updateData();  } diff --git a/web/js/nms.js b/web/js/nms.js index 0caac24..3a37e4a 100644 --- a/web/js/nms.js +++ b/web/js/nms.js @@ -134,7 +134,7 @@ function nmsTimer(handler, interval, name, description) {  function byteCount(bytes,precision) {  	if (precision ==undefined)  		precision = 1; -	var units = ['', 'K', 'M', 'G', 'T', 'P']; +	var units = ['', 'K', 'M', 'G', 'T', 'P', 'E','Z'];  	var i = 0;  	while (bytes > 1024) {  		bytes = bytes / 1024; @@ -356,6 +356,7 @@ function getInitialConfig() {  			} else {  				nms._public = false;  				document.body.classList.add("gondul-private"); +				nmsTemplate.getTemplates();  			}  		}  	}); @@ -414,7 +415,7 @@ function detectHandler() {  	var views = document.location.hash.slice(1);  	var interval = nms.interval;  	if (views == undefined || views == "") -		views = "ping"; +		views = "health";  	views = views.split(",");  	if (views.length > 1) { @@ -639,14 +640,25 @@ function nmsUpdateNavbarGraph() {   * 	do stuff with nmsData.snmp.snmp[sw].misc   * }   * + * New: setTree(root, array, default): + * same thing, but instead of just returing true/false, return the value found + * or the provided default.   */ -function testTree(root, ar) { -	if (ar == undefined || root == undefined) -		return false; -	for (var i in ar) { -		root = root[ar[i]]; -		if (root == undefined) -			return false; +function setTree(root, ar, def) { +	if (ar == undefined || root == undefined) { +		return def; +	} else { +		for (var i in ar) { +			root = root[ar[i]]; +			if (root == undefined) +				return def; +		}  	} -	return true; +	return root; +} +function testTree(root, ar) { +	var x = setTree(root,ar,false); +	if (x != false) +		return true;  } + | 
