Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added stacktraces for queries #275

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
56 changes: 53 additions & 3 deletions Resources/views/Collector/db.html.twig
@@ -1,5 +1,10 @@
{% extends app.request.isXmlHttpRequest ? 'WebProfilerBundle:Profiler:ajax_layout.html.twig' : 'WebProfilerBundle:Profiler:layout.html.twig' %}

{% block head %}
{{ parent() }}
<link href="{{ asset('bundles/framework/css/exception.css') }}" rel="stylesheet" type="text/css" media="all" />
{% endblock %}

{% block toolbar %}
{% set icon %}
<img width="20" height="28" alt="Database" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQRJREFUeNpi/P//PwM1ARMDlcGogZQDlpMnT7pxc3NbA9nhQKxOpL5rQLwJiPeBsI6Ozl+YBOOOHTv+AOllQNwtLS39F2owKYZ/gRq8G4i3ggxEToggWzvc3d2Pk+1lNL4fFAs6ODi8JzdS7mMRVyDVoAMHDsANdAPiOCC+jCQvQKqBQB/BDbwBxK5AHA3E/kB8nKJkA8TMQBwLxaBIKQbi70AvTADSBiSadwFXpCikpKQU8PDwkGTaly9fHFigkaKIJid4584dkiMFFI6jkTJII0WVmpHCAixZQEXWYhDeuXMnyLsVlEQKI45qFBQZ8eRECi4DBaAlDqle/8A48ip6gAADANdQY88Uc0oGAAAAAElFTkSuQmCC" />
Expand Down Expand Up @@ -100,7 +105,7 @@
{{ query.sql|doctrine_minify_query|raw }}
</span>
</div>
<code id="code-{{ i }}-{{ loop.parent.loop.index }}">
<code id="code-{{ i }}-{{ loop.parent.loop.index }}" class="pretty_query">
{{ query.sql|doctrine_pretty_query(i, loop.parent.loop.index)|raw }}
</code>
<span id="original-query-{{ i }}-{{ loop.parent.loop.index }}" style="display: none;">
Expand All @@ -120,10 +125,16 @@
{% else %}
This query cannot be explained
{% endif %}
[<a href="#" onclick="return stacktrace(this);" style="text-decoration: none;" title="Show stacktrace" data-target-id="stacktrace-{{ i }}-{{ loop.parent.loop.index }}" >
<img alt="+" src="{{ asset('bundles/framework/images/blue_picto_more.gif') }}" style="display: inline; width: 12px; height: 12px;" />
<img alt="-" src="{{ asset('bundles/framework/images/blue_picto_less.gif') }}" style="display: none; width: 12px; height: 12px;" />
<span style="vertical-align:top">Show stacktrace</span>
</a>]
</div>
{% if query.explainable %}
<div id="explain-{{ i }}-{{ loop.parent.loop.index }}" class="loading"></div>
{% endif %}
<div id="stacktrace-{{ i }}-{{ loop.parent.loop.index }}" style="display: none">{{ include('DoctrineBundle:Collector:stacktrace.html.twig', { 'connectionName': connection, 'position': i, 'stacktrace': query.stacktrace } ) }}</div>
</li>
{% endfor %}
</ul>
Expand Down Expand Up @@ -232,6 +243,15 @@
return false;
}

function stacktrace(link) {
var imgs = link.children,
target = link.getAttribute('data-target-id');

Sfjs.toggle(target, imgs[0], imgs[1]);

return false;
}

function expandAllQueries(button) {
var queries = document.getElementsByClassName('query-section'),
i = queries.length,
Expand Down Expand Up @@ -319,18 +339,48 @@
}
}

function toggleTrace(id, clazz) {
var el = document.getElementById(id),
current = el.style.display,
i;

if (clazz) {
var tags = document.getElementsByTagName('*');
for (i = tags.length - 1; i >= 0 ; i--) {
if (tags[i].className === clazz) {
tags[i].style.display = 'none';
}
}
}

el.style.display = current === 'none' ? 'block' : 'none';
}

function switchIcons(id1, id2) {
var icon1, icon2, visibility1, visibility2;

icon1 = document.getElementById(id1);
icon2 = document.getElementById(id2);

visibility1 = icon1.style.visibility;
visibility2 = icon2.style.visibility;

icon1.style.visibility = visibility2;
icon2.style.visibility = visibility1;
}

//]]></script>

<style>
h3 {
margin-bottom: 0px;
}

code {
.pretty_query {
display: none;
}

code pre {
.pretty_query pre {
padding: 5px;
}
</style>
Expand Down
33 changes: 33 additions & 0 deletions Resources/views/Collector/stacktrace.html.twig
@@ -0,0 +1,33 @@
<div class="sf-reset">
<div class="block">
<h2>Stack Trace</h2>
<ol class="traces list-exception" id="traces-{{ connectionName ~ '-' ~ position }}">
{% for i, trace in stacktrace %}
<li>
{% if trace.function %}
at
<strong>
{% if trace.class is defined %}<abbr title="{{ trace.class }}">{{ trace.class }}</abbr>{% endif %}
{{ trace.type ~ trace.function }}
</strong>
({{ trace.args|format_args }})
{% endif %}

{% if trace.file is defined and trace.file and trace.line is defined and trace.line %}
{{ trace.function ? '<br />' : '' }}
in {{ trace.file|format_file(trace.line) }}&nbsp;
{% spaceless %}
<a href="#" onclick="toggleTrace('trace-{{ connectionName ~ '-' ~ position ~ '-' ~ i }}'); switchIcons('icon-{{ connectionName ~ '-' ~ position ~ '-' ~ i }}-open', 'icon-{{ connectionName ~ '-' ~ position ~ '-' ~ i }}-close'); return false;">
<img class="toggle" id="icon-{{ connectionName ~ '-' ~ position ~ '-' ~ i }}-close" alt="-" src="data:image/gif;base64,R0lGODlhEgASAMQSANft94TG57Hb8GS44ez1+mC24IvK6ePx+Wa44dXs92+942e54o3L6W2844/M6dnu+P/+/l614P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABIALAAAAAASABIAQAVCoCQBTBOd6Kk4gJhGBCTPxysJb44K0qD/ER/wlxjmisZkMqBEBW5NHrMZmVKvv9hMVsO+hE0EoNAstEYGxG9heIhCADs=" style="visibility: {{ 0 == i ? 'visible' : 'hidden' }}" />
<img class="toggle" id="icon-{{ connectionName ~ '-' ~ position ~ '-' ~ i }}-open" alt="+" src="data:image/gif;base64,R0lGODlhEgASAMQTANft99/v+Ga44bHb8ITG52S44dXs9+z1+uPx+YvK6WC24G+944/M6W28443L6dnu+Ge54v/+/l614P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABMALAAAAAASABIAQAVS4DQBTiOd6LkwgJgeUSzHSDoNaZ4PU6FLgYBA5/vFID/DbylRGiNIZu74I0h1hNsVxbNuUV4d9SsZM2EzWe1qThVzwWFOAFCQFa1RQq6DJB4iIQA7" style="visibility: {{ 0 == i ? 'hidden' : 'visible' }}; margin-left: -18px" />
</a>
{% endspaceless %}
<div id="trace-{{ connectionName ~ '-' ~ position ~ '-' ~ i }}" style="display: {{ 0 == i ? 'block' : 'none' }}" class="trace">
{{ trace.file|file_excerpt(trace.line) }}
</div>
{% endif %}
</li>
{% endfor %}
</ol>
</div>
</div>