Skip to content

Instantly share code, notes, and snippets.

@agallou
Forked from ratibus/sfWebDebugdbCategory.js
Created July 6, 2012 09:55
Show Gist options
  • Save agallou/3059314 to your computer and use it in GitHub Desktop.
Save agallou/3059314 to your computer and use it in GitHub Desktop.
Javascript to group queries in categories within sfDebugBar
var sfWebDebugdbCategory = function () {
return {
init: function (categoriesPatterns) {
if (!$("#sfWebDebugdbDetails")) {
return ;
}
var categoryInfos = {};
var sqlInfosRegexp = /time: (.*) sec/;
$('li', $('#sfWebDebugDatabaseLogs')).each(function(index, el) {
var sql = $('.sfWebDebugDatabaseQuery', el).text();
var category = 'main';
var categoryFound = false;
for (var key in categoriesPatterns) {
for (var i = 0; i < categoriesPatterns[key].length; i++) {
var re = new RegExp(categoriesPatterns[key][i]);
if(re.test(sql))
{
category = key;
categoryFound = true;
break;
}
}
if (categoryFound) {
break;
}
}
var queryInfos = $('.sfWebDebugDatabaseLogInfo', el).text();
var queryTime = parseFloat(sqlInfosRegexp.exec(queryInfos)[1]);
if (typeof categoryInfos[category] === 'undefined')
{
categoryInfos[category] = {time: 0, nb: 0, timeslow: 0, nbslow: 0};
}
categoryInfos[category]['time'] += queryTime;
categoryInfos[category]['nb']++;
if ($(el).hasClass('sfWebDebugWarning'))
{
categoryInfos[category]['timeslow']+= queryTime;
categoryInfos[category]['nbslow']++;
}
$(el).addClass('sql-'+category);
});
var categoryTotal = {time: 0, nb: 0, timeslow: 0, nbslow: 0};
for (var key in categoryInfos)
{
categoryTotal['time'] += categoryInfos[key]['time'];
categoryTotal['nb'] += categoryInfos[key]['nb'];
categoryTotal['timeslow'] += categoryInfos[key]['timeslow'];
categoryTotal['nbslow'] += categoryInfos[key]['nbslow'];
}
categoryInfos['total'] = categoryTotal;
var sqlInfosHtml = '<ul id="sfWebDebugDatabaseLogsCategories">';
for (var key in categoryInfos)
{
var inputHtml = '<input type="checkbox" name="sfWebDebugDatabaseLogsCategory" value="' + key + '" checked="checked">'
var slowInfos = '';
if (categoryInfos[key]['time'] != 0)
{
slowInfos = categoryInfos[key]['nbslow'] + ' slow (' + Math.round(categoryInfos[key]['timeslow']/categoryInfos[key]['time']*100) + '%)';
}
sqlInfosHtml += '<li>' + inputHtml + key + ' (' + categoryInfos[key]['nb'] +' reqs): ' + Math.round(categoryInfos[key]['time']*100)/100 + ' sec ' + slowInfos + '</li>'
}
sqlInfosHtml += '</ul>';
$(sqlInfosHtml).insertAfter($('h3', $('#sfWebDebugDatabaseLogs')));
$('#sfWebDebugDatabaseLogsCategories').delegate('input', 'click', function() {
var category = this.value;
if (category === 'total') {
if (this.checked) {
$('ol li', $('#sfWebDebugDatabaseLogs')).show();
$('input[name=sfWebDebugDatabaseLogsCategory]', $('#sfWebDebugDatabaseLogs')).attr('checked', 'checked');
} else {
$('ol li', $('#sfWebDebugDatabaseLogs')).hide();
$('input[name=sfWebDebugDatabaseLogsCategory]', $('#sfWebDebugDatabaseLogs')).attr('checked', '');
}
} else {
$('.sql-'+this.value, $('#sfWebDebugDatabaseLogs')).toggle();
}
});
}
}
}();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment