Completed
Branch exstension_version_drop (8f362f)
by Alessandro
05:46
created

MongoDbDataCollector::collect()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 12
ccs 7
cts 7
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 6
nc 2
nop 3
crap 2
1
<?php declare(strict_types = 1);
2
3
namespace Facile\MongoDbBundle\DataCollector;
4
5
use Facile\MongoDbBundle\Models\Query;
6
use Facile\MongoDbBundle\Services\Loggers\DataCollectorLoggerInterface;
7
use Symfony\Component\HttpFoundation\Request;
8
use Symfony\Component\HttpFoundation\Response;
9
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
10
11
/**
12
 * Class MongoDbDataCollector.
13
 * @internal
14
 */
15
final class MongoDbDataCollector extends DataCollector
16
{
17
    const QUERY_KEYWORD = 'queries';
18
    const CONNECTION_KEYWORD = 'connections';
19
    const TIME_KEYWORD = 'totalTime';
20
21
    /** @var DataCollectorLoggerInterface */
22
    private $logger;
23
24 1
    public function __construct()
25
    {
26 1
        $this->data = [
27 1
            self::QUERY_KEYWORD => [],
28 1
            self::TIME_KEYWORD => 0.0,
29 1
            self::CONNECTION_KEYWORD => [],
30
        ];
31 1
    }
32
33
    /**
34
     * @param DataCollectorLoggerInterface $logger
35
     */
36 1
    public function setLogger(DataCollectorLoggerInterface $logger)
37
    {
38 1
        $this->logger = $logger;
39 1
    }
40
41
    /**
42
     * {@inheritdoc}
43
     */
44 1
    public function collect(Request $request, Response $response, \Exception $exception = null)
45
    {
46 1
        while ($this->logger->hasLoggedEvents()) {
47
            /** @var Query $event */
48 1
            $event = $this->logger->getLoggedEvent();
49
50 1
            $this->data[self::QUERY_KEYWORD][] = $event;
51 1
            $this->data[self::TIME_KEYWORD] += $event->getExecutionTime();
52
        }
53
54 1
        $this->data[self::CONNECTION_KEYWORD] = $this->logger->getConnections();
55 1
    }
56
57
    /**
58
     * @return int
59
     */
60 1
    public function getQueryCount(): int
61
    {
62 1
        return count($this->data[self::QUERY_KEYWORD]);
63
    }
64
65
    /**
66
     * @return array
67
     */
68 1
    public function getQueries(): array
69
    {
70 1
        return $this->data[self::QUERY_KEYWORD];
71
    }
72
73
    /**
74
     * @return float
75
     */
76 1
    public function getTime(): float
77
    {
78 1
        return (float)($this->data[self::TIME_KEYWORD] * 1000);
79
    }
80
81
    /**
82
     * @return int
83
     */
84 1
    public function getConnectionsCount(): int
85
    {
86 1
        return count($this->data[self::CONNECTION_KEYWORD]);
87
    }
88
    /**
89
     * @return array|string[]
90
     */
91 1
    public function getConnections(): array
92
    {
93 1
        return $this->data[self::CONNECTION_KEYWORD];
94
    }
95
96
    /**
97
     * {@inheritdoc}
98
     */
99 1
    public function getName()
100
    {
101 1
        return 'mongodb';
102
    }
103
}
104