Passed
Push — v2 ( c4de3c...f057b3 )
by Brice
03:43
created

TaskHandler::onTaskFetched()   A

Complexity

Conditions 3
Paths 10

Size

Total Lines 20
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 3.0067

Importance

Changes 0
Metric Value
dl 0
loc 20
ccs 10
cts 11
cp 0.9091
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 11
nc 10
nop 1
crap 3.0067
1
<?php
2
3
namespace JobQueue\Domain\Task;
4
5
use Psr\Log\LoggerAwareInterface;
6
use Psr\Log\LoggerAwareTrait;
7
use Symfony\Component\EventDispatcher\EventDispatcher;
8
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
9
10
final class TaskHandler implements EventSubscriberInterface, LoggerAwareInterface
11
{
12
    use LoggerAwareTrait;
13
14
    /**
15
     *
16
     * @var Queue
17
     */
18
    private $queue;
19
20
    /**
21
     *
22
     * @var EventDispatcher
23
     */
24
    private $dispatcher;
25
26
    /**
27
     *
28
     * @param Queue           $queue
29
     * @param EventDispatcher $dispatcher
30
     */
31 4
    public function __construct(Queue $queue, EventDispatcher $dispatcher)
32
    {
33 4
        $this->queue = $queue;
34 4
        $this->dispatcher = $dispatcher;
35 4
    }
36
37
    /**
38
     *
39
     * @return array
40
     */
41 4
    public static function getSubscribedEvents(): array
42
    {
43
        return [
44 4
            TaskWasFetched::NAME  => 'onTaskFetched',
45 4
            TaskWasExecuted::NAME => 'onTaskExecuted',
46 4
            TaskHasFailed::NAME   => 'onTaskFailed',
47
        ];
48
    }
49
50
    /**
51
     *
52
     * @param TaskWasFetched $event
53
     */
54 4
    public function onTaskFetched(TaskWasFetched $event)
55
    {
56 4
        $task = $event->getTask();
57 4
        $job = $task->getJob();
58
59
        // Configure the job
60 4
        if ($this->logger) {
61
            $job->setLogger($this->logger);
62
        }
63
64
        try {
65
            // Execute the job
66 4
            $job->setUp($task);
67 4
            $job->perform($task);
68 2
            $job->tearDown($task);
69
70 2
            $this->dispatcher->dispatch(TaskWasExecuted::NAME, new TaskWasExecuted($task));
71
72 2
        } catch (\Exception $e) {
73 2
            $this->dispatcher->dispatch(TaskHasFailed::NAME, new TaskHasFailed($task));
74
        }
75 4
    }
76
77
    /**
78
     *
79
     * @param TaskWasExecuted $event
80
     */
81 2
    public function onTaskExecuted(TaskWasExecuted $event)
82
    {
83 2
        $this->queue->updateStatus($event->getTask(), new Status(Status::FINISHED));
84 2
    }
85
86
    /**
87
     *
88
     * @param TaskHasFailed $event
89
     */
90 2
    public function onTaskFailed(TaskHasFailed $event)
91
    {
92 2
        $this->queue->updateStatus($event->getTask(), new Status(Status::FAILED));
93 2
    }
94
}
95