Passed
Pull Request — master (#19)
by
unknown
04:48 queued 01:58
created

SentryTraceLogTarget::export()   B

Complexity

Conditions 10
Paths 1

Size

Total Lines 45
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 27
CRAP Score 10.0328

Importance

Changes 0
Metric Value
cc 10
eloc 30
nc 1
nop 0
dl 0
loc 45
ccs 27
cts 29
cp 0.931
crap 10.0328
rs 7.6666
c 0
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Yii\Sentry\Tracing;
6
7
use Sentry\Tracing\SpanContext;
8
use Yiisoft\Log\Message;
9
use Yiisoft\Log\Target;
10
use Yiisoft\Yii\Sentry\Integration\Integration;
11
12
final class SentryTraceLogTarget extends Target
13
{
14 4
    protected function export(): void
15
    {
16 4
        array_map(function (Message $message): Message {
17
            /** @var array<string, mixed> $context */
18 4
            $context = $message->context();
19 4
            $category = (string)($context['category'] ?? 'log');
20 4
            $time = (float)($message->context()['time'] ?? microtime(true));
21 4
            unset($context['category'], $context['time']);
22
            if (
23 4
                array_key_exists('trace', $context)
24 4
                && empty($context['trace'])
25
            ) {
26 4
                unset($context['trace']);
27
            }
28 4
            if (!empty($context['memory']) && is_numeric($context['memory'])) {
29 4
                $context['memory'] = round(
30 4
                    ((float)$context['memory'] / (1024 * 1024)),
31
                    2
32
                ) . 'MB';
33
            }
34 4
            $parentSpan = Integration::currentTracingSpan();
35
36
            // If there is no tracing span active there is no need to handle the event
37 4
            if ($parentSpan === null) {
38 3
                return $message;
39
            }
40 1
            $spanContext = new SpanContext();
41 1
            if (isset($context['tags']) && is_array($context['tags'])) {
42
                /**  @psalm-suppress MixedArgumentTypeCoercion */
43
                $spanContext->setTags($context['tags']);
44
                unset($context['tags']);
45
            }
46 1
            $spanContext->setOp($category);
47 1
            $spanContext->setDescription($message->message());
48 1
            $spanContext->setStartTimestamp($time);
49 1
            $elapsed = empty($context['elapsed']) ? null : (float)$context['elapsed'];
50 1
            if ($elapsed) {
51 1
                $spanContext->setEndTimestamp($time + $elapsed);
52
            }
53 1
            $spanContext->setData($context);
54
55 1
            $parentSpan->startChild($spanContext);
56
57 1
            return $message;
58 4
        }, $this->getMessages());
59
    }
60
}
61