HttpTracingMiddlewareFactory   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 27
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 2
eloc 14
c 2
b 0
f 0
dl 0
loc 27
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A create() 0 25 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Umbrellio\Jaravel\Services\Guzzle;
6
7
use Illuminate\Support\Facades\App;
8
use Illuminate\Support\Facades\Config;
9
use OpenTelemetry\API\Trace\Propagation\TraceContextPropagator;
10
use Psr\Http\Message\RequestInterface;
11
use Umbrellio\Jaravel\Services\Caller;
12
use Umbrellio\Jaravel\Services\Span\SpanCreator;
13
use Umbrellio\Jaravel\Services\Span\SpanTagHelper;
14
15
class HttpTracingMiddlewareFactory
16
{
17
    public static function create(): callable
18
    {
19
        return function (callable $handler) {
20
            return function (RequestInterface $request, array $options) use ($handler) {
21
                /** @var TraceContextPropagator $contextPropagator */
22
                $contextPropagator = App::make(TraceContextPropagator::class);
23
                /** @var SpanCreator $spanCreator */
24
                $spanCreator = App::make(SpanCreator::class);
25
26
                $span = $spanCreator->create(Caller::call(Config::get('jaravel.guzzle.span_name'), [$request]));
27
28
                $headers = [];
29
                $contextPropagator->inject($headers);
30
31
                SpanTagHelper::setTags($span, Caller::call(Config::get('jaravel.guzzle.tags'), [$request]));
32
33
                foreach ($headers as $name => $value) {
34
                    $request = $request->withHeader($name, $value);
35
                }
36
37
                $promise = $handler($request, $options);
38
39
                $span->end();
40
41
                return $promise;
42
            };
43
        };
44
    }
45
}
46