MetricSetProcessor   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 94
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 30
dl 0
loc 94
ccs 30
cts 30
cp 1
rs 10
c 1
b 0
f 0
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 14 1
A __invoke() 0 32 3
1
<?php
2
3
namespace ZoiloMora\ElasticAPM\Processor;
4
5
use ZoiloMora\ElasticAPM\Events\Span\Span;
6
use ZoiloMora\ElasticAPM\Events\Transaction\Transaction;
7
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\ByIdFinder;
8
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\FromEventsSpanBuilder;
9
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\GroupBySpanTypes;
10
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\MeasurableEventsFinder;
11
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\MetricsSetBuilder;
12
use ZoiloMora\ElasticAPM\Processor\MetricSetProcessor\SpanGroupsByTransactionId;
13
14
final class MetricSetProcessor implements Processor
15
{
16
    /**
17
     * @var MeasurableEventsFinder
18
     */
19
    private $measurableEventsFinder;
20
21
    /**
22
     * @var FromEventsSpanBuilder
23
     */
24
    private $fromEventsSpanBuilder;
25
26
    /**
27
     * @var SpanGroupsByTransactionId
28
     */
29
    private $spanGroupsByTransactionId;
30
31
    /**
32
     * @var ByIdFinder
33
     */
34
    private $byIdFinder;
35
36
    /**
37
     * @var GroupBySpanTypes
38
     */
39
    private $groupBySpanTypes;
40
41
    /**
42
     * @var MetricsSetBuilder
43
     */
44
    private $metricsSetBuilder;
45
46
47
    /**
48
     * @param MeasurableEventsFinder $measurableEventsFinder
49
     * @param FromEventsSpanBuilder $fromEventsSpanBuilder
50
     * @param SpanGroupsByTransactionId $spanGroupsByTransactionId
51
     * @param ByIdFinder $byIdFinder
52
     * @param GroupBySpanTypes $groupBySpanTypes
53
     * @param MetricsSetBuilder $metricsSetBuilder
54
     */
55 12
    public function __construct(
56
        MeasurableEventsFinder $measurableEventsFinder,
57
        FromEventsSpanBuilder $fromEventsSpanBuilder,
58
        SpanGroupsByTransactionId $spanGroupsByTransactionId,
59
        ByIdFinder $byIdFinder,
60
        GroupBySpanTypes $groupBySpanTypes,
61
        MetricsSetBuilder $metricsSetBuilder
62
    ) {
63 12
        $this->measurableEventsFinder = $measurableEventsFinder;
64 12
        $this->fromEventsSpanBuilder = $fromEventsSpanBuilder;
65 12
        $this->spanGroupsByTransactionId = $spanGroupsByTransactionId;
66 12
        $this->byIdFinder = $byIdFinder;
67 12
        $this->groupBySpanTypes = $groupBySpanTypes;
68 12
        $this->metricsSetBuilder = $metricsSetBuilder;
69 12
    }
70
71
    /**
72
     * @param array $events
73
     *
74
     * @return array
75
     */
76 1
    public function __invoke(array $events)
77
    {
78 1
        $measurableEvents = $this->measurableEventsFinder->execute($events);
79
80 1
        $spans = [];
81
        /** @var Transaction|Span $event */
82 1
        foreach ($measurableEvents as $event) {
83 1
            $spans[] = $this->fromEventsSpanBuilder->execute($event, $measurableEvents);
84 1
        }
85
86 1
        $spanGroups = $this->spanGroupsByTransactionId->execute($spans);
87
88 1
        $metricSets = [];
89 1
        foreach ($spanGroups as $spanGroup) {
90
            /** @var Transaction $transaction */
91 1
            $transaction = $this->byIdFinder->execute(
92 1
                $spanGroup->transactionId(),
93
                $measurableEvents
94 1
            );
95
96 1
            $groupedBySpanTypes = $this->groupBySpanTypes->execute(
97 1
                $spanGroup->transactionId(),
98 1
                $spanGroup->spans()
99 1
            );
100
101 1
            $metricSets = array_merge(
102 1
                $metricSets,
103 1
                $this->metricsSetBuilder->execute($transaction, $groupedBySpanTypes)
104 1
            );
105 1
        }
106
107 1
        return array_merge($events, $metricSets);
108
    }
109
}
110