diff --git a/contrib/monitor/index.html b/contrib/monitor/index.html index b238341..82eeb9e 100644 --- a/contrib/monitor/index.html +++ b/contrib/monitor/index.html @@ -24,7 +24,7 @@
- +
@@ -63,7 +63,7 @@
- +
@@ -120,13 +120,13 @@
- +
- +
- +

@@ -144,13 +144,13 @@

- + - +
- +
@@ -162,12 +162,12 @@
- +
- +
@@ -202,13 +202,13 @@
- +
- +
- +

@@ -226,25 +226,25 @@

- +
- +

Software

- +
- +
@@ -259,7 +259,7 @@ - +
@@ -268,7 +268,7 @@
- +
Total hits calculated since May 5, 2015 @@ -279,25 +279,26 @@

- +
- + +
@@ -345,12 +347,12 @@

Schemas

- +
- +
@@ -365,7 +367,7 @@ - +
@@ -374,7 +376,7 @@
- +
Total hits calculated since May 5, 2015 @@ -385,38 +387,38 @@

- +
- + - + - + diff --git a/contrib/monitor/js/eddn.js b/contrib/monitor/js/eddn.js index 86ffac5..78d07c6 100644 --- a/contrib/monitor/js/eddn.js +++ b/contrib/monitor/js/eddn.js @@ -1,19 +1,19 @@ var updateInterval = 60000, monitorEndPoint = 'https://eddn.edcd.io:9091/', - + //gatewayBottlePort = 8080, gatewayBottlePort = 4430, relayBottlePort = 9090, - + gateways = [ 'eddn.edcd.io' ], //TODO: Must find a way to bind them to monitor - + relays = [ 'eddn.edcd.io' ]; //TODO: Must find a way to bind them to monitor - + var stats = { 'gateways' : {}, 'relays' : {} @@ -55,11 +55,11 @@ secondsToDurationString = function(seconds) { days = Math.floor(hours / 24) hours = Math.floor((hours - days * 24) / 3600); } - + if (hours < 10) {hours = "0" + hours;} if (minutes < 10) {minutes = "0" + minutes;} if (seconds < 10) {seconds = "0" + seconds;} - + if (days > 0) { return days + "d " + hours + ":" + minutes + ":" + seconds; } @@ -79,10 +79,10 @@ var doUpdateSoftwares = function() { var dToday = new Date(), dYesterday = new (function(d){ d.setDate(d.getDate()-1); return d})(new Date), - + yesterday = dYesterday.getUTCFullYear() + '-' + ("0" + (dYesterday.getUTCMonth() + 1)).slice(-2) + '-' + ("0" + (dYesterday.getUTCDate())).slice(-2), today = dToday.getUTCFullYear() + '-' + ("0" + (dToday.getUTCMonth() + 1)).slice(-2) + '-' + ("0" + (dToday.getUTCDate())).slice(-2); - + $.ajax({ dataType: "json", url: monitorEndPoint + 'getSoftwares/?dateStart=' + yesterday + '&dateEnd = ' + today, @@ -93,40 +93,40 @@ var doUpdateSoftwares = function() success: function(softwaresTotalData){ var chart = $('#software .chart').highcharts(), series = chart.get('softwares'); - + // Count total by software, all versions included var softwareName = {}; $.each(softwaresTotalData, function(software, hits){ softwareSplit = software.split(' | '); - + if(!softwareName[softwareSplit[0]]) softwareName[softwareSplit[0]] = [0,0, parseInt(hits)]; else softwareName[softwareSplit[0]][2] += parseInt(hits); - + // Might happen when nothing is received... if(softwares[yesterday] == undefined) softwares[yesterday] = []; if(softwares[today] == undefined) softwares[today] = []; - + softwareName[softwareSplit[0]][0] += parseInt(softwares[today][software] || 0); softwareName[softwareSplit[0]][1] += parseInt(softwares[yesterday][software] || 0); - + }); - + // Sort by total DESC var tmp = new Array(); $.each(softwareName, function(software, hits){ tmp.push({name: software, today: hits[0], yesterday: hits[1], total: hits[2]}); }); tmp.sort(function(a,b) { return b.total - a.total; }); softwaresTotal = tmp; - + $('#software .table tbody').empty(); - + // Prepare drilldowns $.each(softwaresTotalData, function(software, hits){ softwareSplit = software.split(' | '); - + $('#software .table tbody').append( newTr = $('').attr('data-type', 'drilldown').attr('data-parent', softwareSplit[0]).attr('data-name', software).on('mouseover', function(){ chart.get('software-' + makeSlug(software)).setState('hover'); @@ -149,13 +149,13 @@ var doUpdateSoftwares = function() $('').addClass('stat total').html('' + formatNumber(hits) + '') ) ); - + if(!drillDownSoftware) newTr.hide(); else if(softwareSplit[0] != currentDrillDown) newTr.hide(); - + if(!softwaresVersion[softwareSplit[0]]) softwaresVersion[softwareSplit[0]] = {}; if(!softwaresVersion[softwareSplit[0]][software]) @@ -163,18 +163,18 @@ var doUpdateSoftwares = function() today: (softwares[today][software] || 0), yesterday: (softwares[yesterday][software] || 0), total: hits }; }); - + // Add main softwares $.each(softwaresTotal, function(key, values){ $('#software .table tbody').append( newTr = $('').attr('data-type', 'parent').attr('data-name', values.name).on('click', function(event){ event.stopImmediatePropagation(); currentSoftware = $(this).attr('data-name'); - + if(!drillDownSoftware) { currentDrillDown = currentSoftware; - + $('#software .table thead th:eq(0)').html('') .css('cursor','pointer') .on('click', function(){ @@ -191,17 +191,17 @@ var doUpdateSoftwares = function() $('#software .table thead th:eq(1)').html(currentSoftware); $('#software .table tbody tr[data-type=parent]').hide(); $('#software .table tbody tr[data-type=drilldown][data-parent="' + currentSoftware + '"]').show(); - + var currentData = []; - + $.each(softwaresVersion[currentSoftware], function(key, value){ currentData.push({ - id: 'software-' + makeSlug(key), - name: key, + id: 'software-' + makeSlug(key), + name: key, y: parseInt(value.total) }); }); - + chart.addSeriesAsDrilldown(chart.get('software-' + makeSlug(currentSoftware)), { id: 'softwareDrilldown-' + makeSlug(currentSoftware), type: 'pie', @@ -209,15 +209,15 @@ var doUpdateSoftwares = function() data: currentData }); chart.redraw(); - + if(chart.drillUpButton) chart.drillUpButton = chart.drillUpButton.destroy(); - + $('#software .table tbody tr[data-type=drilldown][data-parent="' + currentSoftware + '"]').each(function(){ $(this).find('.square').css('background', chart.get('software-' + makeSlug($(this).attr('data-name'))).color); }); } - + drillDownSoftware = !drillDownSoftware; }).on('mouseover', function(){ chart.get('software-' + makeSlug(values.name)).setState('hover'); @@ -241,7 +241,7 @@ var doUpdateSoftwares = function() $('').addClass('stat total').html('' + formatNumber(values.total) + '') ) ); - + if(!drillDownSoftware) { if(!chart.get('software-' + makeSlug(values.name))) @@ -250,26 +250,26 @@ var doUpdateSoftwares = function() } else chart.get('software-' + makeSlug(values.name)).update(parseInt(values.total), false); - + newTr.find('.square').css('background', chart.get('software-' + makeSlug(values.name)).color); } - + if(drillDownSoftware) newTr.hide(); }); - + if(drillDownSoftware) $('#software .table tbody tr[data-type=drilldown][data-parent="' + currentDrillDown + '"]').each(function(){ $(this).find('.square').css('background', chart.get('software-' + makeSlug($(this).attr('data-name'))).color); }); - + chart.redraw(); - + $('#software').find(".stat").removeClass("warning").each(function() { if ($(this).html() == "0") $(this).addClass("warning"); }); - + $('#software').find(".update_timestamp").html(d.toString("yyyy-MM-dd HH:mm:ss")); } }); @@ -277,15 +277,15 @@ var doUpdateSoftwares = function() }); } - +/* var doUpdateUploaders = function() { var dToday = new Date(), dYesterday = new (function(d){ d.setDate(d.getDate()-1); return d})(new Date), - + yesterday = dYesterday.getUTCFullYear() + '-' + ("0" + (dYesterday.getUTCMonth() + 1)).slice(-2) + '-' + ("0" + (dYesterday.getUTCDate())).slice(-2), today = dToday.getUTCFullYear() + '-' + ("0" + (dToday.getUTCMonth() + 1)).slice(-2) + '-' + ("0" + (dToday.getUTCDate())).slice(-2); - + $.ajax({ dataType: "json", url: monitorEndPoint + 'getUploaders/?dateStart=' + yesterday + '&dateEnd = ' + today, @@ -296,21 +296,21 @@ var doUpdateUploaders = function() success: function(uploadersTotal){ var chart = $('#uploaders .chart').highcharts(), series = chart.get('uploaders'); - + $('#uploaders .table tbody').empty(); - + $.each(uploadersTotal, function(uploader, hits){ if(uploader.length > 32) - truncateUploader = jQuery.trim(uploader).substring(0, 32)/*.split(" ").slice(0, -1).join(" ")*/ + "..." + truncateUploader = jQuery.trim(uploader).substring(0, 32) + "..." else truncateUploader = uploader - - // Might happen when nothing is received... + + // Might happen when nothing is received... if(uploaders[yesterday] == undefined) uploaders[yesterday] = []; if(uploaders[today] == undefined) uploaders[today] = []; - + $('#uploaders .table tbody').append( newTr = $('').attr('data-name', uploader).on('mouseover', function(){ chart.get('uploader-' + makeSlug(uploader)).setState('hover'); @@ -333,38 +333,39 @@ var doUpdateUploaders = function() $('').addClass('stat total').html('' + formatNumber(hits) + '') ) ); - + if(!chart.get('uploader-' + makeSlug(uploader))) series.addPoint({id: 'uploader-' + makeSlug(uploader), name: uploader, y: parseInt(hits)}, false); else chart.get('uploader-' + makeSlug(uploader)).update(parseInt(hits), false); - + newTr.find('.square').css('background', chart.get('uploader-' + makeSlug(uploader)).color); }); - + chart.redraw(); - + $('#uploaders').find(".stat").removeClass("warning").each(function() { if ($(this).html() == "0") $(this).addClass("warning"); }); - + $('#uploaders').find(".update_timestamp").html(d.toString("yyyy-MM-dd HH:mm:ss")); } }); } }); } +*/ var doUpdateSchemas = function() { var dToday = new Date(), dYesterday = new (function(d){ d.setDate(d.getDate()-1); return d})(new Date), - + yesterday = dYesterday.getUTCFullYear() + '-' + ("0" + (dYesterday.getUTCMonth() + 1)).slice(-2) + '-' + ("0" + (dYesterday.getUTCDate())).slice(-2), today = dToday.getUTCFullYear() + '-' + ("0" + (dToday.getUTCMonth() + 1)).slice(-2) + '-' + ("0" + (dToday.getUTCDate())).slice(-2); - + $.ajax({ dataType: "json", url: monitorEndPoint + 'getSchemas/?dateStart=' + yesterday + '&dateEnd = ' + today, @@ -378,23 +379,23 @@ var doUpdateSchemas = function() $.each(schemasTotalTmp, function(schema, hits){ schema = schema.replace('http://schemas.elite-markets.net/eddn/', 'https://eddn.edcd.io/schemas/'); hits = parseInt(hits); - + if(schemasTotal[schema]){ schemasTotal[schema] += hits; } else{ schemasTotal[schema] = hits; } }); - + var chart = $('#schemas .chart').highcharts(), series = chart.get('schemas'); - + $('#schemas .table tbody').empty(); - + $.each(schemasTotal, function(schema, hits){ // Might happen when nothing is received... if(schemas[yesterday] == undefined) schemas[yesterday] = []; if(schemas[today] == undefined) schemas[today] = []; - + // Convert old schemas and sum them to new schemas schemasYesterdayTmp = {}; $.each(schemas[yesterday], function(schema, hits){ @@ -405,7 +406,7 @@ var doUpdateSchemas = function() else{ schemasYesterdayTmp[schema] = hits; } }); schemas[yesterday] = schemasYesterdayTmp; - + schemasTodayTmp = {}; $.each(schemas[today], function(schema, hits){ schema = schema.replace('http://schemas.elite-markets.net/eddn/', 'https://eddn.edcd.io/schemas/'); @@ -415,10 +416,10 @@ var doUpdateSchemas = function() else{ schemasTodayTmp[schema] = hits; } }); schemas[today] = schemasTodayTmp; - + var slug = makeSlug(schema); var name = makeName(schema); - + $('#schemas .table tbody').append( newTr = $('').attr('data-name', schema).on('mouseover', function(){ chart.get('schema-' + slug).setState('hover'); @@ -441,22 +442,22 @@ var doUpdateSchemas = function() $('').addClass('stat total').html('' + formatNumber(hits) + '') ) ); - + if(!chart.get('schema-' + slug)) series.addPoint({id: 'schema-' + slug, name: name, y: parseInt(hits)}, false); else chart.get('schema-' + slug).update(parseInt(hits), false); - + newTr.find('.square').css('background', chart.get('schema-' + slug).color); }); - + chart.redraw(); - + $('#schemas').find(".stat").removeClass("warning").each(function() { if ($(this).html() == "0") $(this).addClass("warning"); }); - + $('#schemas').find(".update_timestamp").html(d.toString("yyyy-MM-dd HH:mm:ss")); } }); @@ -469,36 +470,36 @@ var doUpdates = function(type){ $("select[name=" + type + "] option").each(function(){ var currentItem = $(this).html(), isSelected = $(this).is(':selected'); - + $.ajax({ dataType: "json", url: $(this).val(), success: function(data){ d = new Date(); - + stats[type][currentItem]['lastUpdate'] = d.toString("yyyy-MM-dd HH:mm:ss"); stats[type][currentItem]['last'] = data; - + if(isSelected) showStats(type, currentItem); - + var chart = $("#" + type + " .chart[data-name='" + currentItem + "']").highcharts(); - + shift = chart.get('inbound').data.length > 60; chart.get('inbound').addPoint([d.getTime(), (data['inbound'] || {})['1min'] || 0], true, shift); - + if(type == 'gateways') { shift = chart.get('invalid').data.length > 60; chart.get('invalid').addPoint([d.getTime(), (data['invalid'] || {})['1min'] || 0], true, shift); } - + if(type == 'relays') { shift = chart.get('duplicate').data.length > 60; chart.get('duplicate').addPoint([d.getTime(), (data['duplicate'] || {})['1min'] || 0], true, shift); } - + shift = chart.get('outbound').data.length > 60; chart.get('outbound').addPoint([d.getTime(), (data['outbound'] || {})['1min'] || 0], true, shift); } @@ -509,46 +510,46 @@ var doUpdates = function(type){ var showStats = function(type, currentItem){ var el = $('#' + type), currentItemStats = stats[type][currentItem]['last']; - + el.find(".inbound_1min").html((currentItemStats['inbound'] || {})['1min'] || 0); el.find(".inbound_5min").html((currentItemStats["inbound"] || {})['5min'] || 0); el.find(".inbound_60min").html((currentItemStats["inbound"] || {})['60min'] || 0); - + if(type == 'gateways') { el.find(".invalid_1min").html((currentItemStats["invalid"] || {})['1min'] || 0); el.find(".invalid_5min").html((currentItemStats["invalid"] || {})['5min'] || 0); el.find(".invalid_60min").html((currentItemStats["invalid"] || {})['60min'] || 0); - + el.find(".outdated_1min").html((currentItemStats["outdated"] || {})['1min'] || 0); el.find(".outdated_5min").html((currentItemStats["outdated"] || {})['5min'] || 0); el.find(".outdated_60min").html((currentItemStats["outdated"] || {})['60min'] || 0); } - + if(type == 'relays') { el.find(".duplicate_1min").html((currentItemStats["duplicate"] || {})['1min'] || 0); el.find(".duplicate_5min").html((currentItemStats["duplicate"] || {})['5min'] || 0); el.find(".duplicate_60min").html((currentItemStats["duplicate"] || {})['60min'] || 0); } - + el.find(".outbound_1min").html((currentItemStats["outbound"] || {})['1min'] || 0); el.find(".outbound_5min").html((currentItemStats["outbound"] || {})['5min'] || 0); el.find(".outbound_60min").html((currentItemStats["outbound"] || {})['60min'] || 0); - + el.find(".update_timestamp").html(stats[type][currentItem]['lastUpdate']); el.find(".version").html(currentItemStats['version'] || 'N/A'); - + if (currentItemStats['uptime']) el.find(".uptime").html(secondsToDurationString(currentItemStats['uptime'])); else el.find(".uptime").html('N/A'); - + el.find(".stat").removeClass("warning").each(function() { if ($(this).html() == "0") $(this).addClass("warning"); }); - + el.find(".chart").hide(); el.find(".chart[data-name='" + currentItem + "']").show(); $(window).trigger('resize'); // Fix wrong size in chart @@ -561,24 +562,24 @@ var showStats = function(type, currentItem){ */ var start = function(){ Highcharts.setOptions({global: {useUTC: false}}); - + // Grab gateways //gateways = gateways.sort(); $.each(gateways, function(k, gateway){ gateway = gateway.replace('tcp://', ''); gateway = gateway.replace(':8500', ''); - - $("select[name=gateways]").append($('