Completed
Push — master ( 2a509a...44df6b )
by Dmitry
03:30
created

BasisExporter::convertEvent()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 6
c 0
b 0
f 0
nc 2
nop 1
dl 0
loc 12
ccs 0
cts 6
cp 0
crap 6
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace OpenTelemetry\Exporter;
6
7
use OpenTelemetry\Exporter;
8
use OpenTelemetry\Tracing\Event;
9
use OpenTelemetry\Tracing\Span;
10
use OpenTelemetry\Tracing\Status;
11
use OpenTelemetry\Tracing\SpanContext;
12
use OpenTelemetry\Tracing\Tracer;
13
14
class BasisExporter extends Exporter
15
{
16
    public function restoreSpan(array $source): Span
17
    {
18
        [$parentSpanId, $traceId, $spanId, $name, $start, $end, $statusCode, $attributes, $events] = $source;
19
        $context = SpanContext::restore($traceId, $spanId);
20
21
        $parent = null;
22
        if ($parentSpanId) {
23
            $parent = SpanContext::restore($traceId, $parentSpanId);
24
        }
25
26
        $span = (new Span($name ?: 'tracer', $context, $parent));
27
28
        if ($attributes) {
29
            $span->setAttributes($attributes);
30
        }
31
32
        if ($events) {
33
            foreach ($events as $info) {
34
                @[$name, $timestamp, $attributes] = $info;
35
                $span->addEvent($name, $attributes ?: [], $timestamp);
36
            }
37
        }
38
39
        $span->setInterval($start, $end);
40
41
        if ($statusCode) {
42
            $span->setStatus(new Status($statusCode));
43
        }
44
45
46
        return $span;
47
    }
48
49
    public function convertSpan(Span $span): array
50
    {
51
        return [
52
            $span->getParentSpanContext() ? $span->getParentSpanContext()->getSpanId() : null,
53
            $span->getSpanContext()->getTraceId(),
54
            $span->getSpanContext()->getSpanId(),
55
            $span->getName(),
56
            $span->getStart(),
57
            $span->getEnd(),
58
            $span->getStatus() ? $span->getStatus()->getCanonicalCode() : null,
59
            $span->getAttributes() ?: null,
60
            array_map([$this, 'convertEvent'], $span->getEvents()) ?: null
61
        ];
62
    }
63
64
    public function convertEvent(Event $event): array
65
    {
66
        $result = [
67
            $event->getName(),
68
            $event->getTimestamp(),
69
        ];
70
71
        if (count($event->getAttributes())) {
72
            $result[] = $event->getAttributes();
73
        }
74
75
        return $result;
76
    }
77
}
78