Completed
Pull Request — master (#11)
by Barney
03:39
created

StartTimer::createFrom()   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\Handler;
13
14
use Exception;
15
use Psr\Http\Message\RequestInterface;
16
use Shrikeh\GuzzleMiddleware\TimerLogger\Handler\ExceptionHandler\ExceptionHandlerInterface;
17
use Shrikeh\GuzzleMiddleware\TimerLogger\Handler\ExceptionHandler\TriggerErrorHandler;
18
use Shrikeh\GuzzleMiddleware\TimerLogger\ResponseTimeLogger\ResponseTimeLoggerInterface;
19
20
/**
21
 * Class StartHandler.
22
 */
23
class StartTimer
24
{
25
    /**
26
     * @var ResponseTimeLoggerInterface
27
     */
28
    private $responseTimeLogger;
29
30
    /**
31
     * @var ExceptionHandlerInterface
32
     */
33
    private $exceptionHandler;
34
35
    /**
36
     * @param ResponseTimeLoggerInterface    $responseTimeLogger A logger for logging the response start
37
     * @param ExceptionHandlerInterface|null $exceptionHandler   An optional handler for exceptions
38
     *
39
     * @return \Shrikeh\GuzzleMiddleware\TimerLogger\Handler\StartTimer
40
     */
41
    public static function createFrom(
42
        ResponseTimeLoggerInterface $responseTimeLogger,
43
        ExceptionHandlerInterface $exceptionHandler = null
44
    ) {
45
        if (!$exceptionHandler) {
46
            $exceptionHandler = new TriggerErrorHandler();
47
        }
48
49
        return new self($responseTimeLogger, $exceptionHandler);
50
    }
51
52
    /**
53
     * StartTimer constructor.
54
     *
55
     * @param ResponseTimeLoggerInterface $responseTimeLogger A logger for logging the response start
56
     * @param ExceptionHandlerInterface   $exceptionHandler   A handler for exceptions
57
     */
58
    public function __construct(
59
        ResponseTimeLoggerInterface $responseTimeLogger,
60
        ExceptionHandlerInterface $exceptionHandler
61
    ) {
62
        $this->responseTimeLogger = $responseTimeLogger;
63
        $this->exceptionHandler = $exceptionHandler;
64
    }
65
66
    /**
67
     * @param RequestInterface $request The Request to start timing
68
     */
69
    public function __invoke(RequestInterface $request)
70
    {
71
        try {
72
            $this->responseTimeLogger->start($request);
73
        } catch (Exception $e) {
74
            // Pass the exception to the handler
75
            $this->exceptionHandler->handle($e);
76
        }
77
    }
78
}
79