• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

FriendsOfOpenTelemetry / opentelemetry-bundle / 8185302027

07 Mar 2024 08:45AM UTC coverage: 89.422% (+19.0%) from 70.406%
8185302027

push

github

web-flow
tests: add instrumentation test suite (#47)

86 of 99 new or added lines in 14 files covered. (86.87%)

20 existing lines in 2 files now uncovered.

1902 of 2127 relevant lines covered (89.42%)

6.88 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

66.0
/src/Instrumentation/Symfony/Console/TraceableConsoleEventSubscriber.php
1
<?php
2

3
namespace FriendsOfOpenTelemetry\OpenTelemetryBundle\Instrumentation\Symfony\Console;
4

5
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Context\Attribute\ConsoleTraceAttributeEnum;
6
use OpenTelemetry\API\Trace\Span;
7
use OpenTelemetry\API\Trace\StatusCode;
8
use OpenTelemetry\API\Trace\TracerInterface;
9
use OpenTelemetry\Context\Context;
10
use OpenTelemetry\SemConv\TraceAttributes;
11
use Symfony\Component\Console\Command\Command;
12
use Symfony\Component\Console\ConsoleEvents;
13
use Symfony\Component\Console\Event\ConsoleCommandEvent;
14
use Symfony\Component\Console\Event\ConsoleErrorEvent;
15
use Symfony\Component\Console\Event\ConsoleSignalEvent;
16
use Symfony\Component\Console\Event\ConsoleTerminateEvent;
17
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
18

19
final class TraceableConsoleEventSubscriber implements EventSubscriberInterface
20
{
21
    public function __construct(
22
        private readonly TracerInterface $tracer,
23
    ) {
24
    }
3✔
25

26
    public static function getSubscribedEvents(): array
27
    {
UNCOV
28
        return [
×
UNCOV
29
            ConsoleEvents::COMMAND => [
×
UNCOV
30
                ['startSpan', 10000],
×
UNCOV
31
            ],
×
UNCOV
32
            ConsoleEvents::ERROR => [
×
UNCOV
33
                ['handleError', -10000],
×
UNCOV
34
            ],
×
UNCOV
35
            ConsoleEvents::TERMINATE => [
×
UNCOV
36
                ['endSpan', -10000],
×
UNCOV
37
            ],
×
UNCOV
38
            ConsoleEvents::SIGNAL => [
×
UNCOV
39
                ['handleSignal', -10000],
×
UNCOV
40
            ],
×
UNCOV
41
        ];
×
42
    }
43

44
    public function startSpan(ConsoleCommandEvent $event): void
45
    {
46
        $command = $event->getCommand();
3✔
47

48
        assert($command instanceof Command);
3✔
49

50
        $name = $command->getName();
3✔
51
        $class = get_class($command);
3✔
52

53
        $spanBuilder = $this->tracer
3✔
54
            ->spanBuilder($name)
3✔
55
            ->setAttributes([
3✔
56
                TraceAttributes::CODE_FUNCTION => 'execute',
3✔
57
                TraceAttributes::CODE_NAMESPACE => $class,
3✔
58
            ]);
3✔
59

60
        $parent = Context::getCurrent();
3✔
61

62
        $span = $spanBuilder->setParent($parent)->startSpan();
3✔
63

64
        Context::storage()->attach($span->storeInContext($parent));
3✔
65
    }
66

67
    public function handleError(ConsoleErrorEvent $event): void
68
    {
69
        $span = Span::getCurrent();
1✔
70
        $span->setStatus(StatusCode::STATUS_ERROR);
1✔
71
        $span->recordException($event->getError(), [
1✔
72
            ConsoleTraceAttributeEnum::ExitCode->value => $event->getExitCode(),
1✔
73
        ]);
1✔
74
    }
75

76
    public function endSpan(ConsoleTerminateEvent $event): void
77
    {
78
        $scope = Context::storage()->scope();
3✔
79
        if (null === $scope) {
3✔
80
            return;
×
81
        }
82
        $scope->detach();
3✔
83

84
        $span = Span::fromContext($scope->context());
3✔
85
        $span->setAttribute(
3✔
86
            ConsoleTraceAttributeEnum::ExitCode->value,
3✔
87
            $event->getExitCode()
3✔
88
        );
3✔
89

90
        $statusCode = match ($event->getExitCode()) {
3✔
91
            Command::SUCCESS => StatusCode::STATUS_OK,
3✔
92
            default => StatusCode::STATUS_ERROR,
3✔
93
        };
3✔
94
        $span->setStatus($statusCode);
3✔
95

96
        $span->end();
3✔
97
    }
98

99
    public function handleSignal(ConsoleSignalEvent $event): void
100
    {
101
        $span = Span::getCurrent();
×
102
        $span->setAttribute(ConsoleTraceAttributeEnum::SignalCode->value, $event->getHandlingSignal());
×
103
    }
104
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc