HttpTracingMiddlewareFactory::create()   A
last analyzed

Complexity

Conditions 2
Paths 1

Size

Total Lines 25
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 13
c 2
b 0
f 0
dl 0
loc 25
rs 9.8333
cc 2
nc 1
nop 0
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