')
.append(
'
' +
Messages.strConsoleDebugShowArgs +
' '
)
.append(
'
' +
Messages.strConsoleDebugHideArgs +
' '
)
);
}
}
$traceElem.append($stepElem);
}
}
return $traceElem;
},
formatQueryOrGroup: function (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 (query, $elem) {
if ('error' in query) {
$elem.append(
$('
').html(query.error)
);
}
$elem.append(this.formatBackTrace(query.trace));
},
getQueryDetails: function (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 (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 () {
var last = this.lastDebugInfo;
ConsoleDebug.showLog(last.debugInfo, last.url);
}
};
/** s
* Executed on page load
*/
$(function () {
Console.initialize();
});