Passed
Pull Request — master (#8)
by
unknown
02:41
created

SpanCreator::detectSpanOptions()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 18
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 18
rs 9.9332
c 1
b 0
f 0
eloc 10
cc 3
nc 2
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Umbrellio\Jaravel\Services\Span;
6
7
use OpenTelemetry\API\Trace\Propagation\TraceContextPropagator;
8
use OpenTelemetry\API\Trace\SpanInterface;
9
use OpenTelemetry\API\Trace\TracerInterface;
10
11
class SpanCreator
12
{
13
    private TracerInterface $tracer;
14
    private TraceContextPropagator $contextPropagator;
15
16
    public function __construct(TracerInterface $tracer, TraceContextPropagator $contextPropagator)
17
    {
18
        $this->tracer = $tracer;
19
        $this->contextPropagator = $contextPropagator;
20
    }
21
22
    public function create(string $operationName, ?string $traceIdHeader = null, ?string $traceStateHeader = null): SpanInterface
23
    {
24
        $spanBuilder = $this->tracer->spanBuilder($operationName);
25
26
        if ($traceIdHeader) {
27
            $fields = [
28
                TraceContextPropagator::TRACEPARENT => $traceIdHeader,
29
                TraceContextPropagator::TRACESTATE => $traceStateHeader ?? null,
30
            ];
31
            $context = $this->contextPropagator->extract($fields);
32
            $spanBuilder->setParent($context);
33
        }
34
35
        return $spanBuilder->startSpan();
36
    }
37
}
38