Test Failed
Push — master ( 5a8b85...1177ba )
by Zoilo
01:48
created

Handler   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Test Coverage

Coverage 44.83%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 22
c 1
b 0
f 0
dl 0
loc 67
ccs 13
cts 29
cp 0.4483
rs 10
wmc 8

4 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 19 2
A assertProcessors() 0 5 3
A execute() 0 7 2
A __construct() 0 5 1
1
<?php
2
3
namespace ZoiloMora\ElasticAPM\Processor;
4
5
use ZoiloMora\ElasticAPM\Configuration\CoreConfiguration;
6
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\ByIdFinder;
7
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\ByParentIdFinder;
8
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\FromEventsSpanBuilder;
9
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\GroupBySpanTypes;
10
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\GroupSpanByTransactionId;
11
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\MeasurableEventsFinder;
12
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\MetricsSetBuilder;
13
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\SelfDurationCalculator;
14
15
final class Handler
16
{
17
    /**
18
     * @var Processor[]
19
     */
20
    private $processors;
21
22
    /**
23
     * @param array $processors
24
     */
25 2
    public function __construct(array $processors)
26
    {
27 2
        $this->assertProcessors($processors);
28
29 1
        $this->processors = $processors;
30 1
    }
31
32
    /**
33
     * @param CoreConfiguration $coreConfiguration
34
     *
35
     * @return Handler
36
     */
37
    public static function create(CoreConfiguration $coreConfiguration)
38
    {
39
        $processors = [];
40
41
        if (true === $coreConfiguration->metricSet()) {
42
            $processors[] = new MetricSetProcessor(
43
                new MeasurableEventsFinder(),
44
                new FromEventsSpanBuilder(
45
                    new ByParentIdFinder(),
46
                    new SelfDurationCalculator()
47
                ),
48
                new GroupSpanByTransactionId(),
49
                new ByIdFinder(),
50
                new GroupBySpanTypes(),
51
                new MetricsSetBuilder()
52
            );
53
        }
54
55
        return new self($processors);
56
    }
57
58
    /**
59
     * @param array $events
60
     *
61
     * @return array
62
     */
63 1
    public function execute(array $events)
64
    {
65 1
        foreach ($this->processors as $processor) {
66 1
            $events = $processor($events);
67 1
        }
68
69 1
        return $events;
70
    }
71
72
    /**
73
     * @param array $processors
74
     *
75
     * @return void
76
     */
77 2
    private function assertProcessors(array $processors)
78
    {
79 2
        foreach ($processors as $processor) {
80 2
            if (false === $processor instanceof Processor) {
81 1
                throw new \InvalidArgumentException('All elements must be of type Processor.');
82
            }
83 1
        }
84 1
    }
85
}
86