PingHandler   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 87
Duplicated Lines 0 %

Test Coverage

Coverage 97.06%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 15
eloc 16
c 1
b 0
f 0
dl 0
loc 87
ccs 33
cts 34
cp 0.9706
rs 10

11 Methods

Rating   Name   Duplication   Size   Complexity  
A supports() 0 3 1
A beforeTask() 0 3 1
A onScheduleFailure() 0 3 1
A onTaskFailure() 0 3 1
A afterSchedule() 0 3 1
A beforeSchedule() 0 3 1
A afterTask() 0 3 1
A pingIf() 0 4 2
A __construct() 0 7 4
A onTaskSuccess() 0 3 1
A onScheduleSuccess() 0 3 1
1
<?php
2
3
namespace Zenstruck\ScheduleBundle\Schedule\Extension\Handler;
4
5
use Symfony\Component\HttpClient\HttpClient;
6
use Symfony\Contracts\HttpClient\HttpClientInterface;
7
use Zenstruck\ScheduleBundle\Schedule;
8
use Zenstruck\ScheduleBundle\Schedule\Exception\MissingDependency;
9
use Zenstruck\ScheduleBundle\Schedule\Extension\ExtensionHandler;
10
use Zenstruck\ScheduleBundle\Schedule\Extension\PingExtension;
11
use Zenstruck\ScheduleBundle\Schedule\ScheduleRunContext;
12
use Zenstruck\ScheduleBundle\Schedule\Task;
13
use Zenstruck\ScheduleBundle\Schedule\Task\TaskRunContext;
14
15
/**
16
 * @author Kevin Bond <[email protected]>
17
 */
18
final class PingHandler extends ExtensionHandler
19
{
20
    /** @var HttpClientInterface */
21
    private $httpClient;
22 2
23
    public function __construct(?HttpClientInterface $httpClient = null)
24 2
    {
25
        if (null === $httpClient && !\class_exists(HttpClient::class)) {
26
            throw new MissingDependency(PingExtension::getMissingDependencyMessage());
27
        }
28 2
29 2
        $this->httpClient = $httpClient ?: HttpClient::create();
30
    }
31
32
    /**
33
     * @param PingExtension $extension
34 2
     */
35
    public function beforeSchedule(ScheduleRunContext $context, object $extension): void
36 2
    {
37 2
        $this->pingIf($extension, Schedule::BEFORE);
38
    }
39
40
    /**
41
     * @param PingExtension $extension
42 2
     */
43
    public function afterSchedule(ScheduleRunContext $context, object $extension): void
44 2
    {
45 2
        $this->pingIf($extension, Schedule::AFTER);
46
    }
47
48
    /**
49
     * @param PingExtension $extension
50 1
     */
51
    public function onScheduleSuccess(ScheduleRunContext $context, object $extension): void
52 1
    {
53 1
        $this->pingIf($extension, Schedule::SUCCESS);
54
    }
55
56
    /**
57
     * @param PingExtension $extension
58 1
     */
59
    public function onScheduleFailure(ScheduleRunContext $context, object $extension): void
60 1
    {
61 1
        $this->pingIf($extension, Schedule::FAILURE);
62
    }
63
64
    /**
65
     * @param PingExtension $extension
66 2
     */
67
    public function beforeTask(TaskRunContext $context, object $extension): void
68 2
    {
69 2
        $this->pingIf($extension, Task::BEFORE);
70
    }
71
72
    /**
73
     * @param PingExtension $extension
74 2
     */
75
    public function afterTask(TaskRunContext $context, object $extension): void
76 2
    {
77 2
        $this->pingIf($extension, Task::AFTER);
78
    }
79
80
    /**
81
     * @param PingExtension $extension
82 1
     */
83
    public function onTaskSuccess(TaskRunContext $context, object $extension): void
84 1
    {
85 1
        $this->pingIf($extension, Task::SUCCESS);
86
    }
87
88
    /**
89
     * @param PingExtension $extension
90 1
     */
91
    public function onTaskFailure(TaskRunContext $context, object $extension): void
92 1
    {
93 1
        $this->pingIf($extension, Task::FAILURE);
94
    }
95 2
96
    public function supports(object $extension): bool
97 2
    {
98
        return $extension instanceof PingExtension;
99
    }
100 2
101
    private function pingIf(PingExtension $extension, string $expectedHook): void
102 2
    {
103 2
        if ($expectedHook === $extension->getHook()) {
104
            $this->httpClient->request($extension->getMethod(), $extension->getUrl(), $extension->getOptions())->getStatusCode();
105 2
        }
106
    }
107
}
108