Passed
Pull Request — master (#417)
by Alejandro
06:44
created

TaskRunner   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 5
eloc 20
c 0
b 0
f 0
dl 0
loc 37
ccs 19
cts 19
cp 1
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A __invoke() 0 24 4
1
<?php
2
declare(strict_types=1);
3
4
namespace Shlinkio\Shlink\EventDispatcher\Async;
5
6
use Psr\Container\ContainerInterface;
7
use Psr\Log\LoggerInterface;
8
use Swoole\Http\Server as HttpServer;
9
use Throwable;
10
11
use function get_class;
12
use function gettype;
13
use function is_object;
14
15
class TaskRunner
16
{
17
    /** @var LoggerInterface */
18
    private $logger;
19
    /** @var ContainerInterface */
20
    private $container;
21
22 4
    public function __construct(LoggerInterface $logger, ContainerInterface $container)
23
    {
24 4
        $this->logger = $logger;
25 4
        $this->container = $container;
26
    }
27
28 3
    public function __invoke(HttpServer $server, int $taskId, int $fromId, $task): void
29
    {
30 3
        if (! $task instanceof TaskInterface) {
31 1
            $this->logger->warning('Invalid task provided to task worker: {type}. Task ignored', [
32 1
                'type' => is_object($task) ? get_class($task) : gettype($task),
33
            ]);
34 1
            $server->finish('');
35 1
            return;
36
        }
37
38 2
        $this->logger->notice('Starting work on task {taskId}: {task}', [
39 2
            'taskId' => $taskId,
40 2
            'task' => $task->toString(),
41
        ]);
42
43
        try {
44 2
            $task->run($this->container);
45 1
        } catch (Throwable $e) {
46 1
            $this->logger->error('Error processing task {taskId}: {e}', [
47 1
                'taskId' => $taskId,
48 1
                'e' => $e,
49
            ]);
50 2
        } finally {
51 2
            $server->finish('');
52
        }
53
    }
54
}
55