Completed
Push — master ( afaf42...8ac772 )
by Raffael
20:10 queued 16:21
created

WorkerFactory   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 1
dl 0
loc 67
ccs 0
cts 39
cp 0
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A build() 0 7 1
B setErrorHandler() 0 35 6
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * balloon
7
 *
8
 * @copyright   Copryright (c) 2012-2018 gyselroth GmbH (https://gyselroth.com)
9
 * @license     GPL-3.0 https://opensource.org/licenses/GPL-3.0
10
 */
11
12
namespace Balloon\Async;
13
14
use Balloon\Bootstrap\ContainerBuilder;
15
use Composer\Autoload\ClassLoader as Composer;
16
use ErrorException;
17
use MongoDB\BSON\ObjectId;
18
use MongoDB\Database;
19
use Psr\Log\LoggerInterface;
20
use TaskScheduler\Scheduler;
21
use TaskScheduler\Worker;
22
use TaskScheduler\WorkerFactoryInterface;
23
24
class WorkerFactory implements WorkerFactoryInterface
25
{
26
    /**
27
     * Composer.
28
     *
29
     * @var Composer
30
     */
31
    protected $composer;
32
33
    /**
34
     * Construct.
35
     */
36
    public function __construct(Composer $composer)
37
    {
38
        $this->composer = $composer;
39
    }
40
41
    /**
42
     * {@inheritdoc}
43
     */
44
    public function build(ObjectId $id): Worker
45
    {
46
        $dic = ContainerBuilder::get($this->composer);
47
        $this->setErrorHandler($dic->get(LoggerInterface::class));
48
49
        return new Worker($id, $dic->get(Scheduler::class), $dic->get(Database::class), $dic->get(LoggerInterface::class), $dic);
50
    }
51
52
    /**
53
     * Set error handler.
54
     */
55
    protected function setErrorHandler(LoggerInterface $logger): self
56
    {
57
        set_error_handler(function ($severity, $message, $file, $line) use ($logger) {
58
            $log = $message.' in '.$file.':'.$line;
59
60
            switch ($severity) {
61
                case E_ERROR:
62
                case E_USER_ERROR:
63
                    $logger->error($log, [
64
                        'category' => get_class($this),
65
                    ]);
66
67
                break;
68
                case E_WARNING:
69
                case E_USER_WARNING:
70
                    $logger->warning($log, [
71
                        'category' => get_class($this),
72
                    ]);
73
74
                break;
75
                default:
76
                    $logger->debug($log, [
77
                        'category' => get_class($this),
78
                    ]);
79
80
                break;
81
            }
82
83
            if (error_reporting() !== 0) {
84
                throw new ErrorException($message, 0, $severity, $file, $line);
85
            }
86
        });
87
88
        return $this;
89
    }
90
}
91