Passed
Pull Request — develop (#22)
by Barney
01:39
created

ResponseTimeLogger::stopTimer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
/**
3
 * @codingStandardsIgnoreStart
4
 *
5
 * @author       Barney Hanlon <[email protected]>
6
 * @copyright    Barney Hanlon 2017
7
 * @license      https://opensource.org/licenses/MIT
8
 *
9
 * @codingStandardsIgnoreEnd
10
 */
11
12
namespace Shrikeh\GuzzleMiddleware\TimerLogger\ResponseTimeLogger;
13
14
use Psr\Http\Message\RequestInterface;
15
use Psr\Http\Message\ResponseInterface;
16
use Psr\Log\LoggerInterface;
17
use Shrikeh\GuzzleMiddleware\TimerLogger\Formatter\FormatterInterface;
18
use Shrikeh\GuzzleMiddleware\TimerLogger\Formatter\Verbose;
19
use Shrikeh\GuzzleMiddleware\TimerLogger\RequestTimers\RequestTimers;
20
use Shrikeh\GuzzleMiddleware\TimerLogger\RequestTimers\RequestTimersInterface;
21
use Shrikeh\GuzzleMiddleware\TimerLogger\ResponseLogger\ResponseLogger;
22
use Shrikeh\GuzzleMiddleware\TimerLogger\ResponseLogger\ResponseLoggerInterface;
23
use Shrikeh\GuzzleMiddleware\TimerLogger\Timer\TimerInterface;
24
25
/**
26
 * Class ResponseTimeLogger.
27
 */
28
final class ResponseTimeLogger implements ResponseTimeLoggerInterface
29
{
30
    /**
31
     * @var RequestTimersInterface
32
     */
33
    private $timers;
34
35
    /**
36
     * @var \Shrikeh\GuzzleMiddleware\TimerLogger\ResponseLogger\ResponseLoggerInterface
37
     */
38
    private $logger;
39
40
    /**
41
     * @param \Psr\Log\LoggerInterface $logger    A logger to log to
42
     * @param FormatterInterface       $formatter An optional formatter
43
     *
44
     * @return ResponseTimeLogger
45
     */
46
    public static function quickStart(
47
        LoggerInterface $logger,
48
        FormatterInterface $formatter = null
49
    ) {
50
        if (!$formatter) {
51
            $formatter = Verbose::quickStart();
52
        }
53
54
        return self::createFrom(new ResponseLogger($logger, $formatter));
55
    }
56
57
    /**
58
     * @param ResponseLoggerInterface     $logger a logger to log to
59
     * @param RequestTimersInterface|null $timers An optional timers collection
60
     *
61
     * @return ResponseTimeLogger
62
     */
63
    public static function createFrom(
64
        ResponseLoggerInterface $logger,
65
        RequestTimersInterface $timers = null
66
    ) {
67
        if (!$timers) {
68
            $timers = new RequestTimers();
69
        }
70
71
        return new self($timers, $logger);
72
    }
73
74
    /**
75
     * @param RequestTimersInterface  $timers A timers collection
76
     * @param ResponseLoggerInterface $logger a logger to log to
77
     */
78
    public function __construct(
79
        RequestTimersInterface $timers,
80
        ResponseLoggerInterface $logger
81
    ) {
82
        $this->timers = $timers;
83
        $this->logger = $logger;
84
    }
85
86
    /**
87
     * {@inheritdoc}
88
     */
89
    public function start(RequestInterface $request)
90
    {
91
        $this->logger->logStart(
92
            $this->startTimer($request),
93
            $request
94
        );
95
    }
96
97
    /**
98
     * {@inheritdoc}
99
     */
100
    public function stop(RequestInterface $request, ResponseInterface $response)
101
    {
102
        $this->logger->logStop(
103
            $this->stopTimer($request),
104
            $request,
105
            $response
106
        );
107
    }
108
109
    /**
110
     * @param \Psr\Http\Message\RequestInterface $request
111
     *
112
     * @return TimerInterface
113
     */
114
    private function startTimer(RequestInterface $request)
115
    {
116
        return $this->timers->start($request);
117
    }
118
119
    /**
120
     * @param \Psr\Http\Message\RequestInterface $request
121
     *
122
     * @return TimerInterface
123
     */
124
    private function stopTimer(RequestInterface $request)
125
    {
126
        return $this->timers->stop($request);
127
    }
128
}
129