JobTracingMiddleware::handle()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 12
c 1
b 0
f 0
dl 0
loc 22
rs 9.8666
cc 1
nc 1
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Umbrellio\Jaravel\Middleware;
6
7
use Illuminate\Support\Facades\Config;
8
use Umbrellio\Jaravel\Services\Caller;
9
use Umbrellio\Jaravel\Services\Span\SpanCreator;
10
use Umbrellio\Jaravel\Services\Span\SpanTagHelper;
11
use Umbrellio\Jaravel\Services\TraceIdHeaderRetriever;
12
13
class JobTracingMiddleware
14
{
15
    public const JOB_TRACING_CONTEXT_FIELD = 'tracingContext';
16
17
    private SpanCreator $spanCreator;
18
    private TraceIdHeaderRetriever $traceIdHeaderRetriever;
19
20
    public function __construct(SpanCreator $spanCreator, TraceIdHeaderRetriever $traceIdHeaderRetriever)
21
    {
22
        $this->spanCreator = $spanCreator;
23
        $this->traceIdHeaderRetriever = $traceIdHeaderRetriever;
24
    }
25
26
    public function handle($job, callable $next)
27
    {
28
        $payload = $job->{self::JOB_TRACING_CONTEXT_FIELD} ?? [];
29
30
        $traceIdHeader = $this->traceIdHeaderRetriever->retrieve($payload);
31
32
        $span = $this->spanCreator->create(
33
            Caller::call(Config::get('jaravel.job.span_name'), [$job, $job->job ?? null]),
34
            $traceIdHeader
35
        );
36
        $scope = $span->activate();
37
38
        $next($job);
39
40
        $callableConfig = Config::get('jaravel.job.tags', fn () => [
41
            'type' => 'job',
42
        ]);
43
44
        SpanTagHelper::setTags($span, Caller::call($callableConfig, [$job, $job->job ?? null]));
45
46
        $span->end();
47
        $scope->detach();
48
    }
49
}
50