Passed
Pull Request — master (#3)
by
unknown
03:35
created

JobTracingMiddleware   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 2
eloc 21
c 1
b 0
f 0
dl 0
loc 38
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A handle() 0 23 1
A __construct() 0 5 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Umbrellio\Jaravel\Middleware;
6
7
use Illuminate\Support\Facades\App;
8
use Illuminate\Support\Facades\Config;
9
use OpenTracing\Reference;
10
use OpenTracing\Tracer;
11
use Umbrellio\Jaravel\Services\Caller;
12
use Umbrellio\Jaravel\Services\Span\SpanCreator;
13
use Umbrellio\Jaravel\Services\Span\SpanTagHelper;
14
use Umbrellio\Jaravel\Services\TraceIdHeaderRetriever;
15
16
class JobTracingMiddleware
17
{
18
    public const JOB_TRACING_CONTEXT_FIELD = 'tracingContext';
19
20
    private Tracer $tracer;
21
    private SpanCreator $spanCreator;
22
    private TraceIdHeaderRetriever $traceIdHeaderRetriever;
23
24
    public function __construct(Tracer $tracer, SpanCreator $spanCreator, TraceIdHeaderRetriever $traceIdHeaderRetriever)
25
    {
26
        $this->tracer = $tracer;
27
        $this->spanCreator = $spanCreator;
28
        $this->traceIdHeaderRetriever = $traceIdHeaderRetriever;
29
    }
30
31
    public function handle($job, callable $next)
32
    {
33
        $payload = $job->{self::JOB_TRACING_CONTEXT_FIELD} ?? [];
34
35
        $traceIdHeader = $this->traceIdHeaderRetriever->retrieve($payload);
36
37
        $span = $this->spanCreator->create(
38
            Caller::call(Config::get('jaravel.job.span_name'), [$job, $job->job ?? null]),
39
            $traceIdHeader,
40
            Reference::FOLLOWS_FROM
41
        );
42
43
        $next($job);
44
45
        $callableConfig = Config::get('jaravel.job.tags', fn () => [
46
            'type' => 'job',
47
        ]);
48
49
        SpanTagHelper::setTags($span, Caller::call($callableConfig, [$job, $job->job ?? null]));
50
51
        optional($this->tracer->getScopeManager()->getActive())
52
            ->close();
53
        $this->tracer->flush();
54
    }
55
}
56