Completed
Pull Request — master (#1149)
by Oleg
06:13
created

ElasticaLogger::logQuery()   B

Complexity

Conditions 3
Paths 4

Size

Total Lines 24
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 24
ccs 18
cts 18
cp 1
rs 8.9713
c 0
b 0
f 0
cc 3
eloc 17
nc 4
nop 8
crap 3

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
namespace FOS\ElasticaBundle\Logger;
4
5
use Psr\Log\AbstractLogger;
6
use Psr\Log\LoggerInterface;
7
8
/**
9
 * Logger for the Elastica.
10
 *
11
 * The {@link logQuery()} method is configured as the logger callable in the
12
 * service container.
13
 *
14
 * @author Gordon Franke <[email protected]>
15
 */
16
class ElasticaLogger extends AbstractLogger
17
{
18
    /**
19
     * @var LoggerInterface
20
     */
21
    protected $logger;
22
23
    /**
24
     * @var array
25
     */
26
    protected $queries = array();
27
28
    /**
29
     * @var boolean
30
     */
31
    protected $debug;
32
33
    /**
34
     * Constructor.
35
     *
36
     * @param LoggerInterface|null $logger The Symfony logger
37
     * @param boolean              $debug
38
     */
39 28
    public function __construct(LoggerInterface $logger = null, $debug = false)
40
    {
41 28
        $this->logger = $logger;
42 28
        $this->debug = $debug;
43 28
    }
44
45
    /**
46
     * Logs a query.
47
     *
48
     * @param string $path Path to call
49
     * @param string $method Rest method to use (GET, POST, DELETE, PUT)
50
     * @param array  $data Arguments
51
     * @param float  $queryTime Execution time (in seconds)
52
     * @param array  $connection Host, port, transport, and headers of the query
53
     * @param array  $query Arguments
54
     * @param int    $engineTime
55
     * @param int    $itemCount
56
     */
57 13
    public function logQuery($path, $method, $data, $queryTime, $connection = array(), $query = array(), $engineTime = 0, $itemCount = 0)
58
    {
59 13
        $executionMS = $queryTime * 1000;
60
61 13
        if ($this->debug) {
62 11
            $e = new \Exception();
63 11
            $this->queries[] = array(
64 11
                'path' => $path,
65 11
                'method' => $method,
66 11
                'data' => $data,
67 11
                'executionMS' => $executionMS,
68 11
                'engineMS' => $engineTime,
69 11
                'connection' => $connection,
70 11
                'queryString' => $query,
71 11
                'itemCount' => $itemCount,
72 11
                'backtrace' => $e->getTraceAsString()
73
            );
74
        }
75
76 13
        if (null !== $this->logger) {
77 10
            $message = sprintf("%s (%s) %0.2f ms", $path, $method, $executionMS);
78 10
            $this->logger->info($message, (array) $data);
79
        }
80 13
    }
81
82
    /**
83
     * Returns the number of queries that have been logged.
84
     *
85
     * @return integer The number of queries logged
86
     */
87 3
    public function getNbQueries()
88
    {
89 3
        return count($this->queries);
90
    }
91
92
    /**
93
     * Returns a human-readable array of queries logged.
94
     *
95
     * @return array An array of queries
96
     */
97 1
    public function getQueries()
98
    {
99 1
        return $this->queries;
100
    }
101
102
    /**
103
     * {@inheritdoc}
104
     */
105 18
    public function log($level, $message, array $context = array())
106
    {
107 18
        return $this->logger->log($level, $message, $context);
108
    }
109
}
110