Skip to content

Commit 5ec8395

Browse files
authored
Merge pull request #406 from alcaeus/data-collector-aggregate-support
Format aggregation queries in data collector
2 parents a7a3738 + f280f33 commit 5ec8395

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

DataCollector/PrettyDataCollector.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,15 @@ public function collect(Request $request, Response $response, \Exception $except
8484
}
8585

8686
// format the method call
87-
if (isset($log['authenticate'])) {
87+
if (isset($log['aggregate'])) {
88+
$query .= '.aggregate(' . $this->bsonEncode($log['pipeline']);
89+
90+
if ($log['options']) {
91+
$query .= ', ' . $this->bsonEncode($log['options']);
92+
}
93+
94+
$query .= ')';
95+
} elseif (isset($log['authenticate'])) {
8896
$query .= '.authenticate()';
8997
} elseif (isset($log['batchInsert'])) {
9098
if (1 === $log['num']) {

Tests/DataCollector/PrettyDataCollectorTest.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,4 +312,54 @@ public function testCollectLimitAndSort()
312312
$this->assertEquals(1, $collector->getQueryCount());
313313
$this->assertEquals($formatted, $collector->getQueries());
314314
}
315+
316+
public function testCollectAggregate()
317+
{
318+
$queries = [
319+
[
320+
'aggregate' => true,
321+
'pipeline' => [
322+
[
323+
'$group' => [
324+
'_id' => '$verified',
325+
'count' => ['$sum' => 1],
326+
],
327+
],
328+
],
329+
'options' => [],
330+
'db' => 'foo',
331+
'collection' => 'User',
332+
],
333+
[
334+
'aggregate' => true,
335+
'pipeline' => [
336+
[
337+
'$group' => [
338+
'_id' => '$verified',
339+
'count' => ['$sum' => 1],
340+
],
341+
],
342+
],
343+
'options' => ['group' => true],
344+
'db' => 'foo',
345+
'collection' => 'User',
346+
],
347+
];
348+
349+
$formatted = [
350+
'use foo;',
351+
'db.User.aggregate([ { "$group": { "_id": "$verified", "count": { "$sum": 1 } } } ]);',
352+
'db.User.aggregate([ { "$group": { "_id": "$verified", "count": { "$sum": 1 } } } ], { "group": true });',
353+
];
354+
355+
356+
$collector = new PrettyDataCollector();
357+
foreach ($queries as $query) {
358+
$collector->logQuery($query);
359+
}
360+
$collector->collect(new Request(), new Response());
361+
362+
$this->assertEquals(2, $collector->getQueryCount());
363+
$this->assertEquals($formatted, $collector->getQueries());
364+
}
315365
}

0 commit comments

Comments
 (0)