Completed
Push — master ( fcd0cb...b5926c )
by Alessandro
05:40
created

MongoDbDataCollector   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 98
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 11
lcom 1
cbo 4
dl 0
loc 98
ccs 32
cts 32
cp 1
rs 10
c 0
b 0
f 0

10 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A reset() 0 8 1
A setLogger() 0 4 1
A collect() 0 14 2
A getQueryCount() 0 4 1
A getQueries() 0 4 1
A getTime() 0 4 1
A getConnectionsCount() 0 4 1
A getConnections() 0 4 1
A getName() 0 4 1
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
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
    /** @var array */
24
    protected $data;
25
26 1
    public function __construct()
27
    {
28 1
        $this->reset();
29 1
    }
30
31 1
    public function reset()
32
    {
33 1
        $this->data = [
34 1
            self::QUERY_KEYWORD => [],
35 1
            self::TIME_KEYWORD => 0.0,
36 1
            self::CONNECTION_KEYWORD => [],
37
        ];
38 1
    }
39
40
    /**
41
     * @param DataCollectorLoggerInterface $logger
42
     */
43 1
    public function setLogger(DataCollectorLoggerInterface $logger)
44
    {
45 1
        $this->logger = $logger;
46 1
    }
47
48
    /**
49
     * {@inheritdoc}
50
     */
51 1
    public function collect(Request $request, Response $response, \Exception $exception = null)
52
    {
53 1
        while ($this->logger->hasLoggedEvents()) {
54
            /** @var Query $event */
55 1
            $event = $this->logger->getLoggedEvent();
56
57 1
            MongoQuerySerializer::serialize($event);
58
59 1
            $this->data[self::QUERY_KEYWORD][] = $event;
60 1
            $this->data[self::TIME_KEYWORD] += $event->getExecutionTime();
61
        }
62
63 1
        $this->data[self::CONNECTION_KEYWORD] = $this->logger->getConnections();
64 1
    }
65
66
    /**
67
     * @return int
68
     */
69 1
    public function getQueryCount(): int
70
    {
71 1
        return count($this->data[self::QUERY_KEYWORD]);
72
    }
73
74
    /**
75
     * @return array
76
     */
77 1
    public function getQueries(): array
78
    {
79 1
        return $this->data[self::QUERY_KEYWORD];
80
    }
81
82
    /**
83
     * @return float
84
     */
85 1
    public function getTime(): float
86
    {
87 1
        return (float) ($this->data[self::TIME_KEYWORD] * 1000);
88
    }
89
90
    /**
91
     * @return int
92
     */
93 1
    public function getConnectionsCount(): int
94
    {
95 1
        return count($this->data[self::CONNECTION_KEYWORD]);
96
    }
97
    /**
98
     * @return array|string[]
99
     */
100 1
    public function getConnections(): array
101
    {
102 1
        return $this->data[self::CONNECTION_KEYWORD];
103
    }
104
105
    /**
106
     * {@inheritdoc}
107
     */
108 1
    public function getName()
109
    {
110 1
        return 'mongodb';
111
    }
112
}
113