').addClass('stat total').html('' + formatNumber(item.total) + '')
);
},
onRefreshed: function(grid) {
// Gets fired when sort is changed
//console.log('softwares.onRefreshed(): %o', grid);
if (grid && grid.grid && grid.grid._sortField) {
//console.log(' grid sort is: %o, %o', grid.grid._sortField.name, grid.grid._sortOrder);
//console.log(' saved sort is: %o', softwaresSort);
if (softwaresSort.field != grid.grid._sortField.name) {
softwaresSort.field = grid.grid._sortField.name;
$("#table-softwares").jsGrid("sort", softwaresSort);
return;
} else {
softwaresSort.order = grid.grid._sortOrder;
}
$.each(softwaresViewData, function(key, values) {
if(!chart.get('software-' + makeSlug(values.name)))
{
//console.log('Adding data point sort is: %o', softwaresSort.field);
// Populates the data into the overall Software pie chart as per current sort column
series.addPoint({id: 'software-' + makeSlug(values.name), name: values.name, y: parseInt(values[grid.grid._sortField.name]), drilldown: true}, false);
} else {
// Populates the data into the overall Software pie chart as per current sort column
chart.get('software-' + makeSlug(values.name)).update(parseInt(values[grid.grid._sortField.name]), false);
}
$(".square[data-name='" + this.name.replace("'", "\\'") + "']").css('background', chart.get('software-' + makeSlug(values.name)).color);
});
}
chart.redraw();
},
});
}
// Because we're using a controller for data we need to trigger it
$("#table-softwares").jsGrid("loadData");
// Re-apply the last stored sor
$("#table-softwares").jsGrid("sort", softwaresSort);
// Populate the chart with the data
series.remove(false);
series = chart.addSeries({
id: 'softwares',
name: 'Softwares',
type: 'pie',
data: []
});
$.each(softwaresViewData, function(key, values) {
field = $("#table-softwares").jsGrid("getSorting").field;
if(!chart.get('software-' + makeSlug(values.name)))
{
//console.log('Adding data point sort is: %o', softwaresSort.field);
// Populates the data into the overall Software pie chart as per current sort column
series.addPoint({id: 'software-' + makeSlug(values.name), name: values.name, y: parseInt(values[field]), drilldown: true}, false);
} else {
// Populates the data into the overall Software pie chart as per current sort column
chart.get('software-' + makeSlug(values.name)).update(parseInt(values[field]), false);
}
$(".square[data-name='" + this.name.replace("'", "\\'") + "']").css('background', chart.get('software-' + makeSlug(values.name)).color);
});
chart.redraw();
$('#software').find(".stat").removeClass("warning").each(function() {
if ($(this).html() == "0")
$(this).addClass("warning");
});
return newJsGrid;
}
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);
/*
* Gathering the data per a " | " tuple takes two calls.
*
* 1) First a /getSoftwares/?dateStart=&dateEnd=
*
* This returns an object with two top level keys, one for each date. The value
* for each is another object with " | " as each key,
* and the value as the count for that tuple.
*
* 2) Then the lifetime totals for each " | " tuple, from
* /getTotalSoftwares/
*
* This returns an object with " | " tuples as keys,
* the values being the lifetime totals for each tuple.
*
* The calls are nested here, so only the inner .ajax() has access to the totality of data.
*/
$.ajax({
dataType: "json",
url: monitorEndPoint + 'getSoftwares/?dateStart=' + yesterday + '&dateEnd = ' + today,
success: function(softwaresTodayYesterday){
$.ajax({
dataType: "json",
url: monitorEndPoint + 'getTotalSoftwares/',
success: function(softwaresTotals){
// Might happen when nothing is received...
if(softwaresTodayYesterday[yesterday] == undefined)
softwaresTodayYesterday[yesterday] = [];
if(softwaresTodayYesterday[today] == undefined)
softwaresTodayYesterday[today] = [];
/*
* Prepare 'softwaresData' dictionary:
*
* key: software name, including the version
* value: dictionary with counts for: today, yesterday, total (all time)
*/
softwaresData = new Array();
$.each(softwaresTotals, function(softwareName, total){
var sw = { 'name': softwareName, 'today': 0, 'yesterday': 0, 'total': parseInt(total)};
sw['today'] += parseInt(softwaresTodayYesterday[today][softwareName] || 0);
sw['yesterday'] += parseInt(softwaresTodayYesterday[yesterday][softwareName] || 0);
softwaresData.push(sw);
});
/*
* Now the data we need for the current view (overall data or a drilldown of a software)
*/
softwaresViewData = new Array();
softwaresData.forEach(function(software, s) {
softwareSplit = software.name.split(' | ');
var name = "";
if (currentDrillDown) {
if (currentDrillDown == softwareSplit[0]) {
name = softwareSplit[1];
} else {
return true;
}
} else {
name = softwareSplit[0];
}
var sw = softwaresViewData.find(o => o.name === name);
if(!sw) {
softwaresViewData.push({ 'name': name, 'today': software.today, 'yesterday': software.yesterday, 'total': software.total});
sw = softwaresViewData.find(o => o.name === name);
} else {
sw['today'] += software.today;
sw['yesterday'] += software.yesterday;
sw['total'] += software.total;
}
});
// Ensure we have the jsGrid added
if (! $("#table-softwares").length ) {
// Append a new DIV for this jsGrid to the "#software #tables" div
$('#software #tables').append(
$('').addClass('jsGridTable').attr('id', 'table-softwares')
);
} else {
// Store the last selected sort so we can apply it to the new version
softwaresSort = $("#table-softwares").jsGrid("getSorting");
}
newJsGrid = softwaresNewJsGrid();
$('#software').find(".update_timestamp").html(d.toString("yyyy-MM-dd HH:mm:ss"));
}
});
}
});
}
var schemasSort = { field: 'today', order: 'desc' }; // Very first load sort order
var schemasData = new Array();
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,
success: function(schemasTodayYesterday){
// Might happen when nothing is received...
if(schemasTodayYesterday[yesterday] == undefined)
schemasTodayYesterday[yesterday] = [];
if(schemasTodayYesterday[today] == undefined)
schemasTodayYesterday[today] = [];
$.ajax({
dataType: "json",
url: monitorEndPoint + 'getTotalSchemas/',
success: function(schemasTotals){
var chart = $('#schemas .chart').highcharts(),
series = chart.get('schemas');
/*
* Prepare 'schemasData' dictionary
*/
schemasData = new Array();
$.each(schemasTotals, function(schema, total) {
schemaName = schema.replace('http://schemas.elite-markets.net/eddn/', 'https://eddn.edcd.io/schemas/');
// Due to the schema renames and us merging them there could be more than one
// row of data input per schema
var sch = schemasData.find(o => o.name === schemaName);
if (!sch) {
schemasData.push({ 'name': schemaName, 'today': 0, 'yesterday': 0, 'total': parseInt(total)});
sch = schemasData.find(o => o.name === schemaName);
} else {
sch['total'] += parseInt(total);
}
});
// Today
$.each(schemasTodayYesterday[today], function(schema, hits) {
schemaName = schema.replace('http://schemas.elite-markets.net/eddn/', 'https://eddn.edcd.io/schemas/');
var sch = schemasData.find(o => o.name === schemaName);
sch['today'] += parseInt(hits);
});
// Yesterday
$.each(schemasTodayYesterday[yesterday], function(schema, hits) {
schemaName = schema.replace('http://schemas.elite-markets.net/eddn/', 'https://eddn.edcd.io/schemas/');
var sch = schemasData.find(o => o.name === schemaName);
sch['yesterday'] += parseInt(hits);
});
// Ensure we have the jsGrid added
if (! $("#table-schemas").length ) {
// Append a new DIV for this jsGrid to the "#schemas #tables" div
$('#schemas #tables').append(
$('').addClass('jsGridTable').attr('id', 'table-schemas')
);
} else {
// Store the last selected sort so we can apply it to the new version
schemasSort = $("#table-schemas").jsGrid("getSorting");
}
newJsGrid = $("#table-schemas").jsGrid({
width: "100%",
filtering: false,
inserting: false,
editing: false,
sorting: true,
autoload: false,
data: schemasData,
fields: [
{
title: "",
width: "30px",
name: "chartslug",
sorting: false,
readOnly: true,
},
{
title: "Schema",
width: "50%",
name: "name",
type: "text",
align: "left",
readOnly: true,
},
{
title: "Today hits",
name: "today",
type: "number",
align: "right",
readOnly: true,
css: "stat today",
itemTemplate: formatNumberJsGrid,
},
{
title: "Yesterday hits",
name: "yesterday",
type: "number",
align: "right",
readOnly: true,
css: "stat yesterday",
itemTemplate: formatNumberJsGrid,
},
{
title: "Total hits",
name: "total",
type: "number",
align: "right",
readOnly: true,
css: "stat total",
itemTemplate: formatNumberJsGrid,
},
],
rowRenderer: function(item) {
return $('