Skip to content

Commit d71cf33

Browse files
committed
ConnectionPanel: added whole stack trace listing
1 parent 69030ec commit d71cf33

File tree

4 files changed

+47
-13
lines changed

4 files changed

+47
-13
lines changed

src/Bridges/DatabaseTracy/ConnectionPanel.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -70,24 +70,24 @@ private function logQuery(Connection $connection, $result): void
7070

7171
$this->count++;
7272

73-
$source = null;
7473
$trace = $result instanceof \PDOException
75-
? $result->getTrace()
74+
? array_map(fn($row) => array_diff_key($row, ['args' => null]), $result->getTrace())
7675
: debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
76+
7777
foreach ($trace as $row) {
7878
if (preg_match('~\.(php.?|phtml)$~', $row['file'] ?? '') && !$this->blueScreen->isCollapsed($row['file'])) {
79-
$source = [$row['file'], (int) $row['line']];
8079
break;
8180
}
81+
array_shift($trace);
8282
}
8383

8484
if ($result instanceof Nette\Database\ResultSet) {
8585
$this->totalTime += $result->getTime();
8686
if ($this->count < $this->maxQueries) {
87-
$this->queries[] = [$connection, $result->getQueryString(), $result->getParameters(), $source, $result->getTime(), $result->getRowCount(), null];
87+
$this->queries[] = [$connection, $result->getQueryString(), $result->getParameters(), $trace, $result->getTime(), $result->getRowCount(), null];
8888
}
8989
} elseif ($result instanceof \PDOException && $this->count < $this->maxQueries) {
90-
$this->queries[] = [$connection, $result->queryString, null, $source, null, null, $result->getMessage()];
90+
$this->queries[] = [$connection, $result->queryString, null, $trace, null, null, $result->getMessage()];
9191
}
9292
}
9393

src/Bridges/DatabaseTracy/dist/panel.phtml

+14-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ declare(strict_types=1);
2020
<th style="width: 1%">Rows</th>
2121
</tr>
2222

23-
<?php foreach ($queries as [$connection, $sql, $params, $source, $time, $rows, $error, $command, $explain]): ?>
23+
<?php foreach ($queries as [$connection, $sql, $params, $trace, $time, $rows, $error, $command, $explain]): ?>
2424
<tr>
2525
<td style="background:rgba(255, 95, 23, <?= Tracy\Helpers::escapeHtml(sprintf('%0.3f', log($time * 1000 + 1, 10) * $performanceScale)) ?>)" data-order="<?= Tracy\Helpers::escapeHtml((float) $time) ?>">
2626
<?php if ($error): ?>
@@ -31,6 +31,8 @@ declare(strict_types=1);
3131

3232
<?php if ($explain): ?> <br/><a class="tracy-toggle tracy-collapsed" data-tracy-ref="^tr .nette-DbConnectionPanel-explain">explain</a><?php endif ?>
3333

34+
<?php if ($trace): ?> <br/><a class="tracy-toggle tracy-collapsed" data-tracy-ref="^tr .nette-DbConnectionPanel-trace">trace</a><?php endif ?>
35+
3436
</td>
3537

3638
<td class="nette-DbConnectionPanel-sql nette-DbConnectionPanel-sql-<?= Tracy\Helpers::escapeHtml($command) ?>">
@@ -54,8 +56,18 @@ declare(strict_types=1);
5456
</table>
5557
<?php endif ?>
5658

57-
<?php if ($source): ?> <?= substr_replace(Tracy\Helpers::editorLink($source[0], $source[1]), ' class="nette-DbConnectionPanel-source"', 2, 0) ?><?php endif ?>
59+
<?php if ($trace): ?>
60+
<?= substr_replace(Tracy\Helpers::editorLink($trace[0]['file'], $trace[0]['line']), ' class="nette-DbConnectionPanel-source"', 2, 0) ?>
5861

62+
<table class="tracy-collapsed nette-DbConnectionPanel-trace">
63+
<?php foreach ($trace as $row): ?>
64+
<tr>
65+
<td><?= isset($row['file']) ? Tracy\Helpers::editorLink($row['file'], $row['line']) : '' ?></td>
66+
<td><?= Tracy\Helpers::escapeHtml($row['class'] ?? '') ?><?= Tracy\Helpers::escapeHtml($row['type'] ?? '') ?><?= Tracy\Helpers::escapeHtml($row['function']) ?>()</td>
67+
</tr>
68+
<?php endforeach ?>
69+
</table>
70+
<?php endif ?>
5971
</td>
6072

6173
<td><?= Tracy\Helpers::escapeHtml($rows) ?></td>

src/Bridges/DatabaseTracy/panel.latte

+13-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<th style="width: 1%">Rows</th>
1818
</tr>
1919

20-
{foreach $queries as [$connection, $sql, $params, $source, $time, $rows, $error, $command, $explain]}
20+
{foreach $queries as [$connection, $sql, $params, $trace, $time, $rows, $error, $command, $explain]}
2121
<tr>
2222
<td style="background:rgba(255, 95, 23, {sprintf('%0.3f', log($time * 1000 + 1, 10) * $performanceScale)})" data-order="{=(float) $time}">
2323
{if $error}
@@ -26,6 +26,7 @@
2626
{/if}
2727

2828
{if $explain}<br/><a class="tracy-toggle tracy-collapsed" data-tracy-ref="^tr .nette-DbConnectionPanel-explain">explain</a>{/if}
29+
{if $trace}<br/><a class="tracy-toggle tracy-collapsed" data-tracy-ref="^tr .nette-DbConnectionPanel-trace">trace</a>{/if}
2930
</td>
3031

3132
<td class="nette-DbConnectionPanel-sql nette-DbConnectionPanel-sql-{$command}">
@@ -48,7 +49,17 @@
4849
</table>
4950
{/if}
5051

51-
{if $source}{substr_replace(Tracy\Helpers::editorLink($source[0], $source[1]), ' class="nette-DbConnectionPanel-source"', 2, 0)}{/if}
52+
{if $trace}
53+
{substr_replace(Tracy\Helpers::editorLink($trace[0][file], $trace[0][line]), ' class="nette-DbConnectionPanel-source"', 2, 0)}
54+
<table class="tracy-collapsed nette-DbConnectionPanel-trace">
55+
{foreach $trace as $row}
56+
<tr>
57+
<td>{isset($row[file]) ? Tracy\Helpers::editorLink($row[file], $row[line]) : ''}</td>
58+
<td>{$row[class] ?? ''}{$row[type] ?? ''}{$row[function]}()</td>
59+
</tr>
60+
{/foreach}
61+
</table>
62+
{/if}
5263
</td>
5364

5465
<td>{$rows}</td>

tests/Database.Tracy/panel.html

+15-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,14 @@ <h1 title="sqlite::memory:">Queries: 4, time: %a% ms, foo</h1>
99
<td class="nette-DbConnectionPanel-sql nette-DbConnectionPanel-sql-">
1010
<pre class="dump">::beginTransaction</pre>
1111

12-
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
12+
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
13+
<table class="tracy-collapsed nette-DbConnectionPanel-trace">
14+
<tr>
15+
<td><a href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a></td>
16+
<td>Nette\Utils\Arrays::invoke()</td>
17+
</tr>
18+
%A%
19+
</table>
1320
</td>
1421

1522
<td></td>
@@ -21,7 +28,8 @@ <h1 title="sqlite::memory:">Queries: 4, time: %a% ms, foo</h1>
2128
<pre class="dump"><strong style="color:blue">SELECT</strong> 1</pre>
2229

2330
<table class="tracy-collapsed nette-DbConnectionPanel-explain">%A%</table>
24-
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
31+
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
32+
<table class="tracy-collapsed nette-DbConnectionPanel-trace">%A%</table>
2533
</td>
2634

2735
<td>0</td>
@@ -32,7 +40,8 @@ <h1 title="sqlite::memory:">Queries: 4, time: %a% ms, foo</h1>
3240
<td class="nette-DbConnectionPanel-sql nette-DbConnectionPanel-sql-">
3341
<pre class="dump">::commit</pre>
3442

35-
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
43+
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
44+
<table class="tracy-collapsed nette-DbConnectionPanel-trace">%A%</table>
3645
</td>
3746

3847
<td></td>
@@ -41,12 +50,14 @@ <h1 title="sqlite::memory:">Queries: 4, time: %a% ms, foo</h1>
4150
<td %a%>
4251
<span title="SQLSTATE[HY000]: General error: 1 incomplete input">ERROR</span>
4352

53+
<br/><a class="tracy-toggle tracy-collapsed" data-tracy-ref="^tr .nette-DbConnectionPanel-trace">trace</a>
4454
</td>
4555

4656
<td class="nette-DbConnectionPanel-sql nette-DbConnectionPanel-sql-">
4757
<pre class="dump"><strong style="color:blue">SELECT</strong></pre>
4858

49-
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%SqliteDriver.php:%d%" class="tracy-editor">%a%<b>SqliteDriver.php</b>:%d%</a>
59+
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%SqliteDriver.php:%d%" class="tracy-editor">%a%<b>SqliteDriver.php</b>:%d%</a>
60+
<table class="tracy-collapsed nette-DbConnectionPanel-trace">%A%</table>
5061
</td>
5162

5263
<td></td>

0 commit comments

Comments
 (0)