Completed
Push — master ( e0634d...00e983 )
by Alessandro
09:03
created

MongoDbDataCollector::prepareUnserializableData()   C

Complexity

Conditions 7
Paths 9

Size

Total Lines 24
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 7.1782

Importance

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