Passed
Push — master ( d4876d...130a7d )
by Zoilo
02:27 queued 15s
created

Handler::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 5
ccs 3
cts 3
cp 1
crap 1
rs 10
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 13
    public function __construct(array $processors)
26
    {
27 13
        $this->assertProcessors($processors);
28
29 12
        $this->processors = $processors;
30 12
    }
31
32
    /**
33
     * @param CoreConfiguration $coreConfiguration
34
     *
35
     * @return Handler
36
     */
37 12
    public static function create(CoreConfiguration $coreConfiguration)
38
    {
39 12
        $processors = [];
40
41 12
        if (true === $coreConfiguration->metricSet()) {
42 12
            $processors[] = new MetricSetProcessor(
43 12
                new MeasurableEventsFinder(),
44 12
                new FromEventsSpanBuilder(
45 12
                    new ByParentIdFinder(),
46 12
                    new SelfDurationCalculator()
47 12
                ),
48 12
                new GroupSpanByTransactionId(),
49 12
                new ByIdFinder(),
50 12
                new GroupBySpanTypes(),
51 12
                new MetricsSetBuilder()
52 12
            );
53 12
        }
54
55 12
        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
            $events = $processor($events);
67 1
        }
68
69 1
        return $events;
70
    }
71
72
    /**
73
     * @param array $processors
74
     *
75
     * @return void
76
     */
77 13
    private function assertProcessors(array $processors)
78
    {
79 13
        foreach ($processors as $processor) {
80 13
            if (false === $processor instanceof Processor) {
81 1
                throw new \InvalidArgumentException('All elements must be of type Processor.');
82
            }
83 12
        }
84 12
    }
85
}
86