Completed
Push — master ( 509b14...929e7e )
by Barney
04:52 queued 03:02
created

ResponseTimeLogger::quickStart()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
cc 2
eloc 3
nc 2
nop 2
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
24
/**
25
 * Class ResponseTimeLogger.
26
 */
27
class ResponseTimeLogger implements ResponseTimeLoggerInterface
28
{
29
    /**
30
     * @var \Shrikeh\GuzzleMiddleware\TimerLogger\RequestTimers\RequestTimersInterface
31
     */
32
    private $timers;
33
34
    /**
35
     * @var \Shrikeh\GuzzleMiddleware\TimerLogger\ResponseLogger\ResponseLoggerInterface
36
     */
37
    private $logger;
38
39
    /**
40
     * @param \Psr\Log\LoggerInterface                                           $logger    A logger to log to
41
     * @param \Shrikeh\GuzzleMiddleware\TimerLogger\Formatter\FormatterInterface $formatter An optional formatter
42
     *
43
     * @return \Shrikeh\GuzzleMiddleware\TimerLogger\ResponseTimeLogger\ResponseTimeLogger
44
     */
45
    public static function quickStart(
46
        LoggerInterface $logger,
47
        FormatterInterface $formatter = null
48
    ) {
49
        if (!$formatter) {
50
            $formatter = Verbose::quickStart();
51
        }
52
53
        return self::createFrom(new ResponseLogger($logger, $formatter));
54
    }
55
56
    /**
57
     * @param ResponseLoggerInterface     $logger a logger to log to
58
     * @param RequestTimersInterface|null $timers An optional timers collection
59
     *
60
     * @return ResponseTimeLogger
61
     */
62
    public static function createFrom(
63
        ResponseLoggerInterface $logger,
64
        RequestTimersInterface $timers = null
65
    ) {
66
        if (!$timers) {
67
            $timers = new RequestTimers();
68
        }
69
70
        return new self($timers, $logger);
71
    }
72
73
    /**
74
     * @param RequestTimersInterface  $timers A timers collection
75
     * @param ResponseLoggerInterface $logger a logger to log to
76
     */
77
    public function __construct(
78
        RequestTimersInterface $timers,
79
        ResponseLoggerInterface $logger
80
    ) {
81
        $this->timers = $timers;
82
        $this->logger = $logger;
83
    }
84
85
    /**
86
     * {@inheritdoc}
87
     */
88
    public function start(RequestInterface $request)
89
    {
90
        $this->logger->logStart(
91
            $this->timers->start($request),
92
            $request
93
        );
94
    }
95
96
    /**
97
     * {@inheritdoc}
98
     */
99
    public function stop(RequestInterface $request, ResponseInterface $response)
100
    {
101
        $this->logger->logStop(
102
            $this->timers->stop($request),
103
            $request,
104
            $response
105
        );
106
    }
107
}
108