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

FriendsOfOpenTelemetry / opentelemetry-bundle / 7738721920

01 Feb 2024 09:03AM UTC coverage: 38.028% (-26.5%) from 64.527%
7738721920

Pull #38

github

gaelreyrol
wip
Pull Request #38: Refactor services injection

103 of 459 new or added lines in 44 files covered. (22.44%)

255 existing lines in 18 files now uncovered.

802 of 2109 relevant lines covered (38.03%)

8.63 hits per line

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

0.0
/src/DependencyInjection/OpenTelemetryLogsExtension.php
1
<?php
2

3
namespace FriendsOfOpenTelemetry\OpenTelemetryBundle\DependencyInjection;
4

5
use FriendsOfOpenTelemetry\OpenTelemetryBundle\OpenTelemetry\Exporter\ExporterOptionsInterface;
6
use Symfony\Component\DependencyInjection\ChildDefinition;
7
use Symfony\Component\DependencyInjection\ContainerBuilder;
8
use Symfony\Component\DependencyInjection\ContainerInterface;
9
use Symfony\Component\DependencyInjection\Reference;
10

11
/**
12
 * @phpstan-import-type ExporterOptions from ExporterOptionsInterface
13
 */
14
final class OpenTelemetryLogsExtension
15
{
16
    /**
17
     * @var array<string, mixed>
18
     */
19
    private array $config;
20
    private ContainerBuilder $container;
21

22
    /**
23
     * @param array{
24
     *     loggers: array<string, mixed>,
25
     *     exporters: array<string, mixed>,
26
     *     processors: array<string, mixed>,
27
     *     providers: array<string, mixed>
28
     * }|array<string, mixed> $config
29
     */
30
    public function __invoke(array $config, ContainerBuilder $container): void
31
    {
UNCOV
32
        $this->config = $config;
×
UNCOV
33
        $this->container = $container;
×
34

UNCOV
35
        foreach ($this->config['exporters'] as $name => $exporter) {
×
UNCOV
36
            $this->loadLogExporter($name, $exporter);
×
37
        }
38

UNCOV
39
        foreach ($this->config['processors'] as $name => $processor) {
×
UNCOV
40
            $this->loadLogProcessor($name, $processor);
×
41
        }
42

UNCOV
43
        foreach ($this->config['providers'] as $name => $provider) {
×
UNCOV
44
            $this->loadLogProvider($name, $provider);
×
45
        }
46

UNCOV
47
        foreach ($this->config['loggers'] as $name => $logger) {
×
UNCOV
48
            $this->loadLogLogger($name, $logger);
×
49
        }
50

UNCOV
51
        $defaultLogger = null;
×
UNCOV
52
        if (0 < count($this->config['loggers'])) {
×
UNCOV
53
            $defaultLogger = array_key_first($this->config['loggers']);
×
54
        }
55

UNCOV
56
        if (null !== $defaultLogger) {
×
UNCOV
57
            $this->container->setAlias('open_telemetry.logs.default_logger', new Reference(sprintf('open_telemetry.logs.loggers.%s', $defaultLogger)));
×
58
        }
59
    }
60

61
    /**
62
     * @param array{
63
     *      dsn: string,
64
     *      options?: ExporterOptions
65
     *  } $options
66
     */
67
    private function loadLogExporter(string $name, array $options): void
68
    {
NEW
69
        $dsn = $this->container->getDefinition('open_telemetry.exporter_dsn')->setArguments([$options['dsn']]);
×
NEW
70
        $exporterOptions = $this->container->getDefinition('open_telemetry.otlp_exporter_options')->setArguments([$options['options'] ?? []]);
×
71

UNCOV
72
        $this->container
×
NEW
73
            ->setDefinition(
×
NEW
74
                sprintf('open_telemetry.logs.exporters.%s', $name),
×
NEW
75
                new ChildDefinition('open_telemetry.logs.exporter_interface'),
×
NEW
76
            )
×
NEW
77
            ->setArguments([$dsn, $exporterOptions]);
×
78
    }
79

80
    /**
81
     * @param array{
82
     *      type: string,
83
     *      processors?: string[],
84
     *      exporter?: string
85
     *  } $processor
86
     */
87
    private function loadLogProcessor(string $name, array $processor): void
88
    {
UNCOV
89
        $this->container
×
NEW
90
            ->setDefinition(
×
NEW
91
                sprintf('open_telemetry.logs.processors.%s', $name),
×
NEW
92
                new ChildDefinition('open_telemetry.logs.processor_interface')
×
NEW
93
            )
×
NEW
94
            ->setFactory([new Reference(sprintf('open_telemetry.logs.processor_factory.%s', $processor['type'])), 'createProcessor'])
×
UNCOV
95
            ->setArguments([
×
NEW
96
                array_map(fn (string $processor) => new Reference($processor), $processor['processors'] ?? []),
×
NEW
97
                new Reference($processor['exporter'], ContainerInterface::NULL_ON_INVALID_REFERENCE),
×
UNCOV
98
            ]);
×
99
    }
100

101
    /**
102
     * @param array{
103
     *     type: string,
104
     *     processor?: string,
105
     * } $provider
106
     */
107
    private function loadLogProvider(string $name, array $provider): void
108
    {
UNCOV
109
        $this->container
×
NEW
110
            ->setDefinition(
×
NEW
111
                sprintf('open_telemetry.logs.providers.%s', $name),
×
NEW
112
                new ChildDefinition('open_telemetry.logs.provider_interface')
×
NEW
113
            )
×
NEW
114
            ->setFactory([new Reference(sprintf('open_telemetry.logs.provider_factory.%s', $provider['type'])), 'createProvider'])
×
UNCOV
115
            ->setArguments([
×
NEW
116
                new Reference($provider['processor'] ?? ''),
×
UNCOV
117
            ]);
×
118
    }
119

120
    /**
121
     * @param array{
122
     *     provider: string,
123
     *     name?: string,
124
     *     version?: string,
125
     * } $logger
126
     */
127
    private function loadLogLogger(string $name, array $logger): void
128
    {
UNCOV
129
        $this->container
×
NEW
130
            ->setDefinition(
×
NEW
131
                sprintf('open_telemetry.logs.loggers.%s', $name),
×
NEW
132
                new ChildDefinition('open_telemetry.logs.logger'),
×
NEW
133
            )
×
UNCOV
134
            ->setPublic(true)
×
NEW
135
            ->setFactory([new Reference($logger['provider']), 'getLogger'])
×
UNCOV
136
            ->setArguments([
×
UNCOV
137
                $logger['name'] ?? $this->container->getParameter('open_telemetry.bundle.name'),
×
UNCOV
138
                $logger['version'] ?? $this->container->getParameter('open_telemetry.bundle.version'),
×
UNCOV
139
            ]);
×
140
    }
141
}
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