Skip to content

Commit 70520ba

Browse files
committed
Add client info
1 parent 0c81a3f commit 70520ba

File tree

2 files changed

+83
-28
lines changed

2 files changed

+83
-28
lines changed

src/DataCollector/MongoDBDataCollector.php

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,7 @@
2828
use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface;
2929
use Throwable;
3030

31-
use function array_column;
3231
use function array_diff_key;
33-
use function array_map;
34-
use function array_sum;
35-
use function count;
36-
use function iterator_to_array;
3732

3833
/** @internal */
3934
final class MongoDBDataCollector extends DataCollector implements LateDataCollectorInterface
@@ -66,15 +61,36 @@ public function collect(Request $request, Response $response, ?Throwable $except
6661

6762
public function lateCollect(): void
6863
{
64+
$requests = $this->requests;
65+
$requestCount = 0;
66+
$errorCount = 0;
67+
$durationMicros = 0;
68+
69+
foreach ($requests as $clientName => $requestsByClient) {
70+
foreach ($requestsByClient as $requestId => $request) {
71+
$requestCount++;
72+
$durationMicros += $request['durationMicros'] ?? 0;
73+
$errorCount += isset($request['error']) ? 1 : 0;
74+
}
75+
}
76+
77+
$clients = [];
78+
foreach ($this->clients as $name => $client) {
79+
$clients[$name] = [
80+
'serverBuildInfo' => array_diff_key(
81+
(array) $client->getManager()->executeCommand('admin', new Command(['buildInfo' => 1]))->toArray()[0],
82+
['versionArray' => 0, 'ok' => 0],
83+
),
84+
'clientInfo' => array_diff_key($client->__debugInfo(), ['manager' => 0]),
85+
];
86+
}
87+
6988
$this->data = [
70-
'clients' => array_map(static fn (Client $client) => [
71-
'serverBuildInfo' => $client->getManager()->executeCommand('admin', new Command(['buildInfo' => 1]))->toArray()[0],
72-
'clientInfo' => array_diff_key($client->__debugInfo(), ['manager' => 1]),
73-
], iterator_to_array($this->clients)),
74-
'requests' => $this->requests,
75-
'requestCount' => array_sum(array_map(count(...), $this->requests)),
76-
'errorCount' => array_sum(array_map(static fn (array $requests) => count(array_column($requests, 'error')), $this->requests)),
77-
'durationMicros' => array_sum(array_map(static fn (array $requests) => array_sum(array_column($requests, 'durationMicros')), $this->requests)),
89+
'clients' => $clients,
90+
'requests' => $requests,
91+
'requestCount' => $requestCount,
92+
'errorCount' => $errorCount,
93+
'durationMicros' => $durationMicros,
7894
];
7995
}
8096

templates/Collector/mongodb.html.twig

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -79,26 +79,26 @@
7979

8080
{% block panel %}
8181

82-
<h2>Request Metrics</h2>
82+
<h2>Request Metrics</h2>
8383

84-
<div class="metrics">
85-
<div class="metric-group">
86-
<div class="metric">
87-
<span class="value">{{ collector.requestCount }}</span>
88-
<span class="label">Requests</span>
89-
</div>
84+
<div class="metrics">
85+
<div class="metric-group">
86+
<div class="metric">
87+
<span class="value">{{ collector.requestCount }}</span>
88+
<span class="label">Requests</span>
89+
</div>
9090

91-
<div class="metric">
92-
<span class="value">{{ collector.errorCount }}</span>
93-
<span class="label">Errors</span>
94-
</div>
91+
<div class="metric">
92+
<span class="value">{{ collector.errorCount }}</span>
93+
<span class="label">Errors</span>
94+
</div>
9595

96-
<div class="metric">
97-
<span class="value">{{ '%0.2f'|format(collector.time / 1000) }} ms</span>
98-
<span class="label">Request time</span>
99-
</div>
96+
<div class="metric">
97+
<span class="value">{{ '%0.2f'|format(collector.time / 1000) }} ms</span>
98+
<span class="label">Request time</span>
10099
</div>
101100
</div>
101+
</div>
102102

103103
<div class="sf-tabs" style="margin-top: 20px;">
104104
<div class="tab {{ collector.requests is empty ? 'disabled' }}">
@@ -200,4 +200,43 @@
200200
{% endif %}
201201
</div>
202202
</div>
203+
204+
<div class="tab {{ collector.clients is empty ? 'disabled' }}">
205+
<h3 class="tab-title">
206+
Clients
207+
<span class="badge">{{ collector.clients|length }}</span>
208+
</h3>
209+
210+
211+
<div class="tab-content">
212+
{% if collector.clients is empty %}
213+
<div class="empty">
214+
<p>No clients were used.</p>
215+
</div>
216+
{% endif %}
217+
{% for clientName, client in collector.clients %}
218+
<h3>Client <code>{{ clientName }}</code></h3>
219+
<table>
220+
<thead>
221+
<tr>
222+
<th scope="col" class="key">Key</th>
223+
<th scope="col">Value</th>
224+
</tr>
225+
</thead>
226+
227+
<tbody>
228+
<tr>
229+
<td class="key">Client Debug Info</td>
230+
<td>{{ dump(client.clientInfo) }}</td>
231+
</tr>
232+
<tr>
233+
<td class="key">Server Build Info</td>
234+
<td>{{ dump(client.serverBuildInfo) }}</td>
235+
</tr>
236+
</tbody>
237+
</table>
238+
{% endfor %}
239+
</div>
240+
</div>
241+
</div>
203242
{% endblock %}

0 commit comments

Comments
 (0)