diff options
Diffstat (limited to 'web/js/nms-draw-chart.js')
-rw-r--r-- | web/js/nms-draw-chart.js | 186 |
1 files changed, 88 insertions, 98 deletions
diff --git a/web/js/nms-draw-chart.js b/web/js/nms-draw-chart.js index 4145a9a..ccdf220 100644 --- a/web/js/nms-draw-chart.js +++ b/web/js/nms-draw-chart.js @@ -14,7 +14,7 @@ function setNightModeChart(night) { function drawLatency(canvas, sw, chart, callback) { var q = encodeURIComponent('SELECT mean("latency") AS "mean_latency" FROM "ping" WHERE time > now() - 1h AND "switch"=\''+sw+'\' GROUP BY time(60s), "version" fill(null)'); var dataset = []; - + $.getJSON( "/query?db=gondul&q="+q, function( results ) { try { results['results'][0]['series'].forEach(function(serie) { @@ -67,8 +67,11 @@ function drawLatency(canvas, sw, chart, callback) { responsive: true, animation: false, elements: { + point: { + radius: 0 + }, line: { - tension: 0.05 + tension: 0.4 } } } @@ -86,68 +89,52 @@ function drawSumOfPorts(canvas, sw) { var megabit = kilobit * 1024; var gigabit = megabit * 1024; var terabit = gigabit * 1024; - - var q = encodeURIComponent('SELECT non_negative_derivative(first("ifHCInOctets"), 1s) * 8 AS "ifHCInOctets", non_negative_derivative(first("ifHCOutOctets"), 1s) * 8 AS "ifHCOutOctets" FROM "ports" WHERE time > now() - 30m AND "switch"=\''+sw+'\' GROUP BY time(90s),"interface" fill(null)'); + + var q = encodeURIComponent('SELECT non_negative_derivative(first("ifHCInOctets"), 1s) * 8 AS "ifHCInOctets", non_negative_derivative(first("ifHCOutOctets"), 1s) * 8 AS "ifHCOutOctets" FROM "ports" WHERE time > now() - 60m AND "switch"=\'' + sw + '\' GROUP BY time(90s),"interface" fill(null)'); var dataset = []; - - $.getJSON( "/query?db=gondul&q="+q, function( results ) { - var bits_in = []; - var bits_out = []; - - results['results'][0]['series'].forEach(function(serie) { - // Bytes in - serie['values'].forEach(function(element) { - bits_in.push(element[1]); - }); - // Bytes out - serie['values'].forEach(function(element) { - bits_out.push(element[2]); + + $.getJSON("/query?db=gondul&q=" + q, function (results) { + var bits_in = {}; + var bits_out = {}; + + results['results'][0]['series'].forEach(function (serie) { + serie['values'].forEach(function (element) { + var time = new Date(element[0]); + var timeStr = time.toISOString(); + bits_in[timeStr] = (bits_in[timeStr] || 0) + element[1]; + bits_out[timeStr] = (bits_out[timeStr] || 0) + element[2]; }); }); - - var bits_in_size = bitToSize(Math.max.apply( Math, bits_in )); - var bits_out_size = bitToSize(Math.max.apply( Math, bits_out )); - var size = 0; - - if(bits_in_size >= bits_out_size) { - size = bits_in_size; - } else { - size = bits_out_size; - } - + + var max_bits_in = Math.max(...Object.values(bits_in)); + var max_bits_out = Math.max(...Object.values(bits_out)); + var size = bitToSize(Math.max(max_bits_in, max_bits_out)); + var size_divider; switch (size) { case 0: - size_divider = 1; - break; + size_divider = 1; + break; case 1: - size_divider = kilobit; - break; + size_divider = kilobit; + break; case 2: - size_divider = megabit; - break; + size_divider = megabit; + break; case 3: - size_divider = gigabit; - break; + size_divider = gigabit; + break; case 4: - size_divider = terabit; - break; + size_divider = terabit; + break; } - results['results'][0]['series'].forEach(function(serie) { - // Bytes in - var data = []; - serie['values'].forEach(function(element) { - data.push({t: new Date(element[0]), y: element[1] / size_divider }); - }); - dataset.push({data: data, backgroundColor:'rgba(58,125,48,200)', label:'Traffic in (' + sizeToText(size)+')'}); - // Bytes out - data = []; - serie['values'].forEach(function(element) { - data.push({t: new Date(element[0]), y: -Math.abs(element[2] / size_divider) }); - }); - dataset.push({data: data, backgroundColor:'rgba(84,84,142,225)', label:'Traffic out (' + sizeToText(size)+')'}); - }); - + + var inData = Object.entries(bits_in).map(([t, y]) => ({ t: new Date(t), y: y / size_divider })); + var outData = Object.entries(bits_out).map(([t, y]) => ({ t: new Date(t), y: -Math.abs(y / size_divider) })); + + dataset.push({ data: inData, backgroundColor: 'rgba(100,155,100,0.8)', label: 'Traffic in (' + sizeToText(size) + ')' }); + dataset.push({ data: outData, backgroundColor: 'rgba(0,155,200,0.8)', label: 'Traffic out (' + sizeToText(size) + ')' }); + // Draw the chart var ctx = document.getElementById(canvas).getContext('2d'); var myChart = new Chart(ctx, { @@ -160,7 +147,7 @@ function drawSumOfPorts(canvas, sw) { display: false }, scales: { - xAxes:[{ + xAxes: [{ type: 'time', time: { parser: "HH:mm", @@ -175,15 +162,15 @@ function drawSumOfPorts(canvas, sw) { } }], yAxes: [{ - stacked: true, + stacked: false, ticks: { - callback: function(label, index, labels) { - return Math.abs(label)+' '+sizeToText(size); + callback: function (label, index, labels) { + return Math.abs(label) + ' ' + sizeToText(size); } }, scaleLabel: { display: true, - labelString: sw+' - All ports' + labelString: sw + ' - All ports' } }] }, @@ -194,7 +181,7 @@ function drawSumOfPorts(canvas, sw) { radius: 0 }, line: { - tension: 0 + tension: 0.4 } } } @@ -204,75 +191,75 @@ function drawSumOfPorts(canvas, sw) { function drawPort(canvas, sw, port) { - + var kilobit = 1024; var megabit = kilobit * 1024; var gigabit = megabit * 1024; var terabit = gigabit * 1024; - - var q = encodeURIComponent('SELECT non_negative_derivative(first("ifHCInOctets"), 1s) * 8 AS "ifHCInOctets", non_negative_derivative(first("ifHCOutOctets"), 1s) * 8 AS "ifHCOutOctets" FROM "ports" WHERE time > now() - 30m AND "switch"=\''+sw+'\' AND "interface"=\''+port+'\' GROUP BY time(30s) fill(null)'); + + var q = encodeURIComponent('SELECT non_negative_derivative(first("ifHCInOctets"), 1s) * 8 AS "ifHCInOctets", non_negative_derivative(first("ifHCOutOctets"), 1s) * 8 AS "ifHCOutOctets" FROM "ports" WHERE time > now() - 60m AND "switch"=\''+sw+'\' AND "interface"=\''+port+'\' GROUP BY time(30s) fill(null)'); var dataset = []; - + $.getJSON( "/query?db=gondul&q="+q, function( results ) { var serie = results['results'][0]['series'][0]; - + var bits_in = []; var bits_out = []; - + // Bytes in serie['values'].forEach(function(element) { bits_in.push(element[1]); }); - + // Bytes out serie['values'].forEach(function(element) { bits_out.push(element[2]); }); - + var bits_in_size = bitToSize(Math.max.apply( Math, bits_in )); var bits_out_size = bitToSize(Math.max.apply( Math, bits_out )); var size = 0; - + if(bits_in_size >= bits_out_size) { size = bits_in_size; } else { size = bits_out_size; } - + var size_divider; switch (size) { case 0: - size_divider = 1; - break; + size_divider = 1; + break; case 1: - size_divider = kilobit; - break; + size_divider = kilobit; + break; case 2: - size_divider = megabit; - break; + size_divider = megabit; + break; case 3: - size_divider = gigabit; - break; + size_divider = gigabit; + break; case 4: - size_divider = terabit; - break; + size_divider = terabit; + break; } - + // Bytes in var data = []; serie['values'].forEach(function(element) { data.push({t: new Date(element[0]), y: element[1] / size_divider }); }); - dataset.push({data: data, backgroundColor:'rgba(58,125,48,200)', label:'Traffic in (' + sizeToText(size)+')'}); - + dataset.push({data: data, backgroundColor:'rgba(100,155,100,0.8)', label:'Traffic in (' + sizeToText(size)+')'}); + // Bytes out data = []; serie['values'].forEach(function(element) { data.push({t: new Date(element[0]), y: -Math.abs(element[2] / size_divider) }); }); - dataset.push({data: data, backgroundColor:'rgba(84,84,142,225)', label:'Traffic out (' + sizeToText(size)+')'}); - - + dataset.push({data: data, backgroundColor:'rgba(0,155,200,0.8)', label:'Traffic out (' + sizeToText(size)+')'}); + + // Draw the chart var ctx = document.getElementById(canvas).getContext('2d'); var myChart = new Chart(ctx, { @@ -311,11 +298,14 @@ function drawPort(canvas, sw, port) { responsive: true, animation: false, elements: { + point: { + radius: 0 + }, line: { - tension: 0 + tension: 0.3 } } - + } }); }); @@ -327,7 +317,7 @@ function bitToSize(bits) { var megabit = kilobit * 1024; var gigabit = megabit * 1024; var terabit = gigabit * 1024; - + if(bits >= 0 && bits < kilobit) { return 0; } @@ -348,19 +338,19 @@ function bitToSize(bits) { function sizeToText(size) { switch(size) { case 0: - return 'bit/s'; - break; + return 'bit/s'; + break; case 1: - return 'Kb/s'; - break; + return 'Kb/s'; + break; case 2: - return 'Mb/s'; - break; + return 'Mb/s'; + break; case 3: - return 'Gb/s'; - break; + return 'Gb/s'; + break; case 4: - return 'Tb/s'; - break; + return 'Tb/s'; + break; } } |