Passed
Push — master ( b8c962...9f04d2 )
by Brice
02:37
created

TaskHandler::onTaskExecuted()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 1
nc 1
nop 1
crap 1
1
<?php
2
3
namespace JobQueue\Domain\Task;
4
5
use Psr\Log\LoggerAwareInterface;
6
use Psr\Log\LoggerAwareTrait;
7
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
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 EventDispatcherInterface
23
     */
24
    private $eventDispatcher;
25
26
    /**
27
28
     * @param Queue                    $queue
29
     * @param EventDispatcherInterface $eventDispatcher
30
     */
31 4
    public function __construct(Queue $queue, EventDispatcherInterface $eventDispatcher)
32
    {
33 4
        $this->queue = $queue;
34 4
        $this->eventDispatcher = $eventDispatcher;
35 4
    }
36
37
    /**
38
     *
39
     * @return array
40
     */
41 4
    public static function getSubscribedEvents(): array
42
    {
43
        return [
44 4
            TaskWasFetched::NAME  => [
45
                ['onTaskFetchedConfigureJob', 100],
46
                ['onTaskFetchedExecuteJob', -100],
47
            ],
48 4
            TaskWasExecuted::NAME => 'onTaskExecuted',
49 4
            TaskHasFailed::NAME   => 'onTaskFailed',
50
        ];
51
    }
52
53
    /**
54
     *
55
     * @param TaskWasFetched $event
56
     */
57 4
    public function onTaskFetchedConfigureJob(TaskWasFetched $event)
58
    {
59 4
        $task = $event->getTask();
60 4
        $job = $task->getJob();
61
62
        // Configure the job
63 4
        if ($this->logger) {
64
            $job->setLogger($this->logger);
65
        }
66 4
    }
67
68
    /**
69
     *
70
     * @param TaskWasFetched $event
71
     */
72 4
    public function onTaskFetchedExecuteJob(TaskWasFetched $event)
73
    {
74 4
        $task = $event->getTask();
75 4
        $job = $task->getJob();
76
77
        try {
78
            // Execute the job
79 4
            $job->setUp($task);
80 4
            $job->perform($task);
81 2
            $job->tearDown($task);
82
83 2
            $this->eventDispatcher->dispatch(TaskWasExecuted::NAME, new TaskWasExecuted($task));
84
85 2
        } catch (\Exception $e) {
86 2
            $this->eventDispatcher->dispatch(TaskHasFailed::NAME, new TaskHasFailed($task));
87
88 2
            if ($this->logger) {
89
                $this->logger->error($e->getMessage(), [
90
                    'file' => $e->getFile(),
91
                    'line' => $e->getLine(),
92
                ]);
93
            }
94
        }
95 4
    }
96
97
    /**
98
     *
99
     * @param TaskWasExecuted $event
100
     */
101 2
    public function onTaskExecuted(TaskWasExecuted $event)
102
    {
103 2
        $this->queue->updateStatus($event->getTask(), new Status(Status::FINISHED));
104 2
    }
105
106
    /**
107
     *
108
     * @param TaskHasFailed $event
109
     */
110 2
    public function onTaskFailed(TaskHasFailed $event)
111
    {
112 2
        $this->queue->updateStatus($event->getTask(), new Status(Status::FAILED));
113 2
    }
114
}
115