Passed
Push — master ( 7836cc...537efa )
by Zoilo
03:57
created

Handler   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

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

4 Methods

Rating   Name   Duplication   Size   Complexity  
A assertProcessors() 0 5 3
A execute() 0 7 2
A create() 0 19 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 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 2
    public function execute(array $events)
64
    {
65 2
        foreach ($this->processors as $processor) {
66 1
            $events = $processor($events);
67 2
        }
68
69 2
        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