/** * Client-side script for manipulating the debug panel on Rhymix. * * @file debug.js * @author Kijin Sung */ $(function() { "use strict"; // Find debug panel elements. var panel = $("#rhymix_debug_panel"); var button = $("#rhymix_debug_button"); // Initialize the debug button. var button_link = $('').text("DEBUG").appendTo(button).click(function(event) { event.preventDefault(); var max_width = Math.min(540, $(window).width()); panel.css({ width: max_width, left: max_width * -1 }).show().animate({ left: 0 }, 200); button.hide(); }); // Initialize the debug panel. var header = $('
').appendTo(panel); header.append('

RHYMIX DEBUG

'); header.append($('+').click(function(event) { panel.animate({ width: "100%" }, 300); })); header.append($('×').click(function(event) { event.preventDefault(); panel.animate({ left: panel.width() * -1 }, 200, function() { panel.hide(); button.show(); }); })); // Define a function for adding debug data to the panel. window.rhymix_debug_add_data = function(data, open) { // Define loop variables. var i, j, entry, num, backtrace, description; // New pages are open by default. if (open !== true && open !== false) { open = true; } // Create the page. var page = $('
').appendTo(panel); var page_body = $('
').appendTo(page); if (!open) { page_body.hide(); } // Create the page header. var page_header = $('
').prependTo(page).click(function() { $(this).find("a.debug_page_collapse").triggerHandler("click"); }); page_header.append($('

').text(data.page_title).attr("title", data.url)); page_header.append($('').text(open ? "▲" : "▼").click(function(event) { event.preventDefault(); event.stopPropagation(); if (page_body.is(":visible")) { page_body.slideUp(200); $(this).text("▼"); } else { page_body.slideDown(200); $(this).text("▲"); } })); // Add general information. page_body.append($('

').text('General Information')); entry = $('
').appendTo(page_body); var metadata = $('').appendTo(entry); metadata.append($('
  • ').text('Request: ' + data.request.method + (data.request.method !== "GET" ? (' - ' + data.request.size + ' bytes') : ""))); metadata.append($('
  • ').text('Response: ' + data.response.method + ' - ' + data.response.size + ' bytes')); metadata.append($('
  • ').text('Total Time: ' + data.timing.total)); metadata.append($('
  • ').text('Query Time: ' + data.timing.db_query)); // Add debug entries. if (data.entries && data.entries.length) { page_body.append($('

    ').text('Debug Entries (' + data.entries.length + ')')); for (i in data.entries) { entry = $('
    ').appendTo(page_body); num = parseInt(i) + 1; if (num < 10) num = "0" + num; entry.text(num + ". " + data.entries[i].message); backtrace = $('').appendTo(entry); for (j in data.entries[i].backtrace) { if (data.entries[i].backtrace[j].file) { backtrace.append($('
  • ').text(data.entries[i].backtrace[j].file + ":" + data.entries[i].backtrace[j].line)); } } } } // Add errors. if (data.errors && data.errors.length) { page_body.append($('

    ').text('Errors (' + data.errors.length + ')')); for (i in data.errors) { entry = $('
    ').appendTo(page_body); num = parseInt(i) + 1; if (num < 10) num = "0" + num; entry.text(num + ". " + data.errors[i].type + ": " + data.errors[i].message); backtrace = $('').appendTo(entry); for (j in data.errors[i].backtrace) { if (data.errors[i].backtrace[j].file) { backtrace.append($('
  • ').text(data.errors[i].backtrace[j].file + ":" + data.errors[i].backtrace[j].line)); } } } } // Add queries. if (data.queries && data.queries.length) { page_body.append($('

    ').text('Queries (' + data.queries.length + ')')); for (i in data.queries) { entry = $('
    ').appendTo(page_body); num = parseInt(i) + 1; if (num < 10) num = "0" + num; entry.text(num + ". " + data.queries[i].query_string); description = $('').appendTo(entry); if (data.queries[i].file && data.queries[i].line) { description.append($('
  • ').text("Caller: " + data.queries[i].file + ":" + data.queries[i].line).append("
    (" + data.queries[i].method + ")")); description.append($('
  • ').text("Connection: " + data.queries[i].query_connection)); description.append($('
  • ').text("Query ID: " + data.queries[i].query_id)); description.append($('
  • ').text("Query Time: " + (data.queries[i].query_time ? (data.queries[i].query_time.toFixed(4) + " sec") : ""))); } description.append($('
  • ').text("Result: " + ((data.queries[i].message === "success" || !data.queries[i].message) ? "success" : ("error " + data.queries[i].error_code + " " + data.queries[i].message)))); } } // Add slow queries. if (data.slow_queries && data.slow_queries.length) { page_body.append($('

    ').text('Slow Queries (' + data.slow_queries.length + ')')); for (i in data.slow_queries) { entry = $('
    ').appendTo(page_body); num = parseInt(i) + 1; if (num < 10) num = "0" + num; entry.text(num + ". " + data.slow_queries[i].query_string); description = $('').appendTo(entry); if (data.slow_queries[i].file && data.slow_queries[i].line) { description.append($('
  • ').text("Caller: " + data.slow_queries[i].file + ":" + data.slow_queries[i].line).append("
    (" + data.slow_queries[i].method + ")")); description.append($('
  • ').text("Connection: " + data.slow_queries[i].query_connection)); description.append($('
  • ').text("Query ID: " + data.slow_queries[i].query_id)); description.append($('
  • ').text("Query Time: " + (data.slow_queries[i].query_time ? (data.slow_queries[i].query_time.toFixed(4) + " sec") : ""))); } description.append($('
  • ').text("Result: " + ((data.slow_queries[i].message === "success" || !data.slow_queries[i].message) ? "success" : ("error " + data.slow_queries[i].error_code + " " + data.slow_queries[i].message)))); } } // Add slow triggers. if (data.slow_triggers && data.slow_triggers.length) { page_body.append($('

    ').text('Slow Triggers (' + data.slow_triggers.length + ')')); for (i in data.slow_triggers) { entry = $('
    ').appendTo(page_body); num = parseInt(i) + 1; if (num < 10) num = "0" + num; entry.text(num + ". " + data.slow_triggers[i].trigger_name); description = $('').appendTo(entry); description.append($('
  • ').text("Target: " + data.slow_triggers[i].trigger_target)); description.append($('
  • ').text("Exec Time: " + (data.slow_triggers[i].trigger_time ? (data.slow_triggers[i].trigger_time.toFixed(4) + " sec") : ""))); } } // Add slow widgets. if (data.slow_widgets && data.slow_widgets.length) { page_body.append($('

    ').text('Slow Widgets (' + data.slow_widgets.length + ')')); for (i in data.slow_widgets) { entry = $('
    ').appendTo(page_body); num = parseInt(i) + 1; if (num < 10) num = "0" + num; entry.text(num + ". " + data.slow_widgets[i].widget_name); description = $('').appendTo(entry); description.append($('
  • ').text("Exec Time: " + (data.slow_widgets[i].widget_time ? (data.slow_widgets[i].widget_time.toFixed(4) + " sec") : ""))); } } // If there are errors, turn the button text red. if (data.errors && data.errors.length) { button_link.addClass("has_errors"); } }; // Add debug data from the previous request. if (window.rhymix_debug_previous) { window.rhymix_debug_previous.page_title = 'PREVIOUS POST : ' + window.rhymix_debug_previous.ajax_module + "." + window.rhymix_debug_previous.ajax_act; rhymix_debug_add_data(window.rhymix_debug_previous, false); } // Add debug data from the current request. if (window.rhymix_debug_content) { window.rhymix_debug_content.page_title = 'MAIN PAGE'; rhymix_debug_add_data(window.rhymix_debug_content, true); } // Add debug data from pending AJAX requests. if (window.rhymix_debug_pending_data) { while (window.rhymix_debug_pending_data.length) { rhymix_debug_add_data(window.rhymix_debug_pending_data.shift()); } } });