|
20 | 20 |
|
21 | 21 | namespace MongoDB\Bundle\DataCollector; |
22 | 22 |
|
23 | | -use MongoDB\BSON\Document; |
24 | | -use MongoDB\Bundle\TraceableClient; |
25 | | -use MongoDB\Client; |
| 23 | +use MongoDB\Bundle\Client; |
26 | 24 | use MongoDB\Driver\Monitoring\CommandFailedEvent; |
27 | 25 | use MongoDB\Driver\Monitoring\CommandStartedEvent; |
28 | 26 | use MongoDB\Driver\Monitoring\CommandSucceededEvent; |
|
33 | 31 | final class MongoDBDataCollector extends DataCollector |
34 | 32 | { |
35 | 33 | /** |
36 | | - * @var list<Client> |
| 34 | + * @var list<array{client:Client, subscriber:DriverEventSubscriber}> |
37 | 35 | */ |
38 | 36 | private array $clients = []; |
39 | 37 |
|
40 | | - public function addClient(string $name, Client $client): void |
| 38 | + public function addClient(string $name, Client $client, DriverEventSubscriber $subscriber): void |
41 | 39 | { |
42 | | - $this->clients[$name] = $client; |
| 40 | + $this->clients[$name] = [ |
| 41 | + 'client' => $client, |
| 42 | + 'subscriber' => $subscriber, |
| 43 | + ]; |
43 | 44 | } |
44 | 45 |
|
45 | 46 | public function collect(Request $request, Response $response, ?\Throwable $exception = null): void |
46 | 47 | { |
47 | | - foreach ($this->clients as $name => $client) { |
| 48 | + foreach ($this->clients as $name => ['client' => $client, 'subscriber' => $subscriber]) { |
48 | 49 | $totalTime = 0; |
49 | 50 | $requestCount = 0; |
50 | 51 | $errorCount = 0; |
51 | 52 | $requests = []; |
52 | 53 |
|
53 | | - if ($client instanceof TraceableClient) { |
54 | | - foreach ($client->getEvents() as $event) { |
55 | | - $requestId = $event->getRequestId(); |
| 54 | + foreach ($subscriber->getEvents() as $event) { |
| 55 | + $requestId = $event->getRequestId(); |
56 | 56 |
|
57 | | - $eventData = [ |
58 | | - 'class' => $event::class, |
59 | | - 'commandName' => $event->getCommandName(), |
60 | | - 'server' => $event->getServer()->getInfo(), |
| 57 | + if ($event instanceof CommandStartedEvent) { |
| 58 | + $command = (array) $event->getCommand(); |
| 59 | + unset($command['lsid'], $command['$clusterTime']); |
| 60 | + |
| 61 | + $requests[$requestId] = [ |
61 | 62 | 'client' => $name, |
| 63 | + 'startedAt' => hrtime(true), |
| 64 | + 'commandName' => $event->getCommandName(), |
| 65 | + 'command' => $command, |
| 66 | + // 'server' => $event->getServer()->getInfo(), |
| 67 | + 'operationId' => $event->getOperationId(), |
| 68 | + 'database' => $event->getDatabaseName(), |
| 69 | + 'serviceId' => $event->getServiceId(), |
62 | 70 | ]; |
63 | | - |
64 | | - if ($event instanceof CommandStartedEvent) { |
65 | | - $command = (array) $event->getCommand(); |
66 | | - unset($command['lsid'], $command['$clusterTime']); |
67 | | - |
68 | | - $requests[$requestId] = [ |
69 | | - 'client' => $name, |
70 | | - 'startedAt' => hrtime(true), |
71 | | - 'commandName' => $event->getCommandName(), |
72 | | - 'command' => $command, |
73 | | - // 'server' => $event->getServer()->getInfo(), |
74 | | - 'operationId' => $event->getOperationId(), |
75 | | - 'database' => $event->getDatabaseName(), |
76 | | - 'serviceId' => $event->getServiceId(), |
77 | | - ]; |
78 | | - ++$requestCount; |
79 | | - } elseif ($event instanceof CommandSucceededEvent) { |
80 | | - $requests[$requestId] += [ |
81 | | - // 'reply' => Document::fromPHP($event->getReply()), |
82 | | - 'duration' => $event->getDurationMicros(), |
83 | | - 'endedAt' => hrtime(true), |
84 | | - 'success' => true, |
85 | | - ]; |
86 | | - $totalTime += $event->getDurationMicros(); |
87 | | - } elseif ($event instanceof CommandFailedEvent) { |
88 | | - $requests[$requestId] += [ |
89 | | - // 'reply' => Document::fromPHP($event->getReply()), |
90 | | - 'duration' => $event->getDurationMicros(), |
91 | | - 'error' => $event->getError(), |
92 | | - 'success' => false, |
93 | | - ]; |
94 | | - $totalTime += $event->getDurationMicros(); |
95 | | - ++$errorCount; |
96 | | - } |
| 71 | + ++$requestCount; |
| 72 | + } elseif ($event instanceof CommandSucceededEvent) { |
| 73 | + $requests[$requestId] += [ |
| 74 | + // 'reply' => Document::fromPHP($event->getReply()), |
| 75 | + 'duration' => $event->getDurationMicros(), |
| 76 | + 'endedAt' => hrtime(true), |
| 77 | + 'success' => true, |
| 78 | + ]; |
| 79 | + $totalTime += $event->getDurationMicros(); |
| 80 | + } elseif ($event instanceof CommandFailedEvent) { |
| 81 | + $requests[$requestId] += [ |
| 82 | + // 'reply' => Document::fromPHP($event->getReply()), |
| 83 | + 'duration' => $event->getDurationMicros(), |
| 84 | + 'error' => $event->getError(), |
| 85 | + 'success' => false, |
| 86 | + ]; |
| 87 | + $totalTime += $event->getDurationMicros(); |
| 88 | + ++$errorCount; |
97 | 89 | } |
98 | 90 | } |
99 | 91 |
|
|
0 commit comments