From ac60582a0e1ff8b5208527c2dbe524ec49013140 Mon Sep 17 00:00:00 2001 From: Daniel Mecke Date: Fri, 28 Feb 2014 14:34:03 +0100 Subject: [PATCH 1/2] added stracktraces for queries --- Controller/ProfilerController.php | 29 ++++++++ Resources/views/Collector/db.html.twig | 72 ++++++++++++++++++- .../views/Collector/stacktrace.html.twig | 33 +++++++++ 3 files changed, 131 insertions(+), 3 deletions(-) create mode 100644 Resources/views/Collector/stacktrace.html.twig diff --git a/Controller/ProfilerController.php b/Controller/ProfilerController.php index 859b6c694..68084afd4 100644 --- a/Controller/ProfilerController.php +++ b/Controller/ProfilerController.php @@ -65,4 +65,33 @@ public function explainAction($token, $connectionName, $query) 'query' => $query, )); } + + /** + * Renders the stacktrace for the given token and query. + * + * @param string $token + * @param string $connectionName + * @param integer $query + * + * @return Response + */ + public function stacktraceAction($token, $connectionName, $query) + { + /** @var $profiler \Symfony\Component\HttpKernel\Profiler\Profiler */ + $profiler = $this->container->get('profiler'); + $profiler->disable(); + + $profile = $profiler->loadProfile($token); + $queries = $profile->getCollector('db')->getQueries(); + + if (!isset($queries[$connectionName][$query])) { + return new Response('This query does not exist.'); + } + + return $this->container->get('templating')->renderResponse('DoctrineBundle:Collector:stacktrace.html.twig', array( + 'connectionName' => $connectionName, + 'position' => $query, + 'stacktrace' => $queries[$connectionName][$query]['stacktrace'], + )); + } } diff --git a/Resources/views/Collector/db.html.twig b/Resources/views/Collector/db.html.twig index 8e276f56f..98137c9f6 100644 --- a/Resources/views/Collector/db.html.twig +++ b/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() }} + +{% endblock %} + {% block toolbar %} {% set icon %} Database @@ -64,6 +69,13 @@ 'connectionName': app.request.query.get('connection'), 'query': app.request.query.get('query') })) }} + {% elseif 'stacktrace' == page %} + {{ render(controller('DoctrineBundle:Profiler:stacktrace', { + 'token': token, + 'panel': 'db', + 'connectionName': app.request.query.get('connection'), + 'query': app.request.query.get('query') + })) }} {% else %} {{ block('queries') }} {% endif %} @@ -100,7 +112,7 @@ {{ query.sql|doctrine_minify_query|raw }} - + {{ query.sql|doctrine_pretty_query(i, loop.parent.loop.index)|raw }}