').append('
' + Messages.strConsoleDebugShowArgs + ' ').append('
' + Messages.strConsoleDebugHideArgs + ' '));
}
}
$traceElem.append($stepElem);
}
}
return $traceElem;
},
formatQueryOrGroup: function formatQueryOrGroup(queryInfo, totalTime) {
var grouped;
var queryText;
var queryTime;
var count;
var i;
if (Array.isArray(queryInfo)) {
// It is grouped
grouped = true;
queryText = queryInfo[0].query;
queryTime = 0;
for (i in queryInfo) {
queryTime += queryInfo[i].time;
}
count = queryInfo.length;
} else {
queryText = queryInfo.query;
queryTime = queryInfo.time;
}
var $query = $('
').append($('#debug_console').find('.templates .debug_query').clone()).append($('
').text(queryText)).data('queryInfo', queryInfo).data('totalTime', totalTime);
if (grouped) {
$query.find('.text.count').removeClass('hide');
$query.find('.text.count span').text(count);
}
$query.find('.text.time span').text(queryTime + 's (' + (queryTime * 100 / totalTime).toFixed(3) + '%)');
return $query;
},
appendQueryExtraInfo: function appendQueryExtraInfo(query, $elem) {
if ('error' in query) {
$elem.append($('
').html(query.error));
}
$elem.append(this.formatBackTrace(query.trace));
},
getQueryDetails: function getQueryDetails(queryInfo, totalTime, $query) {
if (Array.isArray(queryInfo)) {
var $singleQuery;
for (var i in queryInfo) {
$singleQuery = $('
').text(parseInt(i) + 1 + '.').append($('
').text(Messages.strConsoleDebugTimeTaken + ' ' + queryInfo[i].time + 's' + ' (' + (queryInfo[i].time * 100 / totalTime).toFixed(3) + '%)'));
this.appendQueryExtraInfo(queryInfo[i], $singleQuery);
$query.append('').append($singleQuery);
}
} else {
this.appendQueryExtraInfo(queryInfo, $query);
}
},
showLog: function showLog(debugInfo, url) {
this.lastDebugInfo.debugInfo = debugInfo;
this.lastDebugInfo.url = url;
$('#debug_console').find('.debugLog').empty();
$('#debug_console').find('.debug>.welcome').empty();
var debugJson = false;
var i;
if (_typeof(debugInfo) === 'object' && 'queries' in debugInfo) {
// Copy it to debugJson, so that it doesn't get changed
if (!('queries' in debugInfo)) {
debugJson = false;
} else {
debugJson = {
queries: []
};
for (i in debugInfo.queries) {
debugJson.queries[i] = debugInfo.queries[i];
}
}
} else if (typeof debugInfo === 'string') {
try {
debugJson = JSON.parse(debugInfo);
} catch (e) {
debugJson = false;
}
if (debugJson && !('queries' in debugJson)) {
debugJson = false;
}
}
if (debugJson === false) {
$('#debug_console').find('.debug>.welcome').text(Messages.strConsoleDebugError);
return;
}
var allQueries = debugJson.queries;
var uniqueQueries = {};
var totalExec = allQueries.length; // Calculate total time and make unique query array
var totalTime = 0;
for (i = 0; i < totalExec; ++i) {
totalTime += allQueries[i].time;
if (!(allQueries[i].hash in uniqueQueries)) {
uniqueQueries[allQueries[i].hash] = [];
}
uniqueQueries[allQueries[i].hash].push(allQueries[i]);
} // Count total unique queries, convert uniqueQueries to Array
var totalUnique = 0;
var uniqueArray = [];
for (var hash in uniqueQueries) {
if (uniqueQueries.hasOwnProperty(hash)) {
++totalUnique;
uniqueArray.push(uniqueQueries[hash]);
}
}
uniqueQueries = uniqueArray; // Show summary
$('#debug_console').find('.debug>.welcome').append($('').text(Functions.sprintf(Messages.strConsoleDebugSummary, totalUnique, totalExec, totalTime)));
if (url) {
$('#debug_console').find('.debug>.welcome').append($('').text(url.split('?')[0]));
} // For sorting queries
function sortByTime(a, b) {
var order = Console.config.Order === 'asc' ? 1 : -1;
if (Array.isArray(a) && Array.isArray(b)) {
// It is grouped
var timeA = 0;
var timeB = 0;
var i;
for (i in a) {
timeA += a[i].time;
}
for (i in b) {
timeB += b[i].time;
}
return (timeA - timeB) * order;
} else {
return (a.time - b.time) * order;
}
}
function sortByCount(a, b) {
var order = Console.config.Oorder === 'asc' ? 1 : -1;
return (a.length - b.length) * order;
}
var orderBy = Console.config.OrderBy;
var order = Console.config.Order;
if (Console.config.GroupQueries) {
// Sort queries
if (orderBy === 'time') {
uniqueQueries.sort(sortByTime);
} else if (orderBy === 'count') {
uniqueQueries.sort(sortByCount);
} else if (orderBy === 'exec' && order === 'desc') {
uniqueQueries.reverse();
}
for (i in uniqueQueries) {
if (orderBy === 'time') {
uniqueQueries[i].sort(sortByTime);
} else if (orderBy === 'exec' && order === 'desc') {
uniqueQueries[i].reverse();
}
$('#debug_console').find('.debugLog').append(this.formatQueryOrGroup(uniqueQueries[i], totalTime));
}
} else {
if (orderBy === 'time') {
allQueries.sort(sortByTime);
} else if (order === 'desc') {
allQueries.reverse();
}
for (i = 0; i < totalExec; ++i) {
$('#debug_console').find('.debugLog').append(this.formatQueryOrGroup(allQueries[i], totalTime));
}
}
ConsoleMessages.messageEventBinds($('#debug_console').find('.message:not(.binded)'));
},
refresh: function refresh() {
var last = this.lastDebugInfo;
ConsoleDebug.showLog(last.debugInfo, last.url);
}
};
/** s
* Executed on page load
*/
$(function () {
Console.initialize();
});