diff --git a/composer.json b/composer.json index 1b90242..05e8f74 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ ], "require": { "php": ">=7.1", - "jonahgeorge/jaeger-client-php": "0.4.0", + "jonahgeorge/jaeger-client-php": "~0.4", "symfony/config": "~3.4|~4.0", "symfony/console": "~3.4|~4.0", "symfony/dependency-injection": "~3.4.6|~4.1", @@ -18,7 +18,7 @@ "symfony/serializer-pack": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^7.4@dev" + "phpunit/phpunit": "^7.4" }, "autoload": { "psr-4": { @@ -34,9 +34,5 @@ "branch-alias": { "dev-master": "1.0-dev" } - }, - "minimum-stability": "dev", - "require-dev": { - "phpunit/phpunit": "^7.4@dev" } } diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php new file mode 100644 index 0000000..ff4202d --- /dev/null +++ b/src/DependencyInjection/Configuration.php @@ -0,0 +1,52 @@ +getRootNode(); + + // Basic Sentry configuration + $rootNode + ->children() + ->scalarNode('service_name')->end() + ->scalarNode('enabled')->defaultTrue()->end() + ->arrayNode('tracer_config') + ->children() + ->arrayNode('sampler') + ->children() + ->scalarNode('type')->defaultValue('const')->end() + ->scalarNode('param')->defaultTrue()->end() + ->end() + ->end() + ->arrayNode('local_agent') + ->children() + ->scalarNode('reporting_host')->defaultNull()->end() + ->scalarNode('reporting_port')->defaultNull()->end() + ->end() + ->end() + ->scalarNode('logging')->defaultTrue()->end() + ->scalarNode('trace_id_header')->defaultNull()->end() + ->scalarNode('baggage_header_prefix')->defaultNull()->end() + ->scalarNode('debug_id_header_key')->defaultNull()->end() + ->end() + ->end() + ->end(); + + return $treeBuilder; + } +} diff --git a/src/DependencyInjection/SymfonyOpenTracingExtension.php b/src/DependencyInjection/SymfonyOpenTracingExtension.php index 3d69240..eb229f9 100644 --- a/src/DependencyInjection/SymfonyOpenTracingExtension.php +++ b/src/DependencyInjection/SymfonyOpenTracingExtension.php @@ -7,17 +7,20 @@ use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; -use Symfony\Component\HttpKernel\DependencyInjection\Extension; +use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension; -class SymfonyOpenTracingExtension extends Extension +class SymfonyOpenTracingExtension extends ConfigurableExtension { /** - * {@inheritdoc} + * Configures the passed container according to the merged configuration. */ - public function load(array $configs, ContainerBuilder $container) + protected function loadInternal(array $mergedConfig, ContainerBuilder $container) { $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resource/config')); $loader->load('services.yml'); - $loader->load('parameters.yml'); + + $container->setParameter('symfony_open_tracing.service_name', $mergedConfig['service_name']); + $container->setParameter('symfony_open_tracing.enabled', $mergedConfig['enabled']); + $container->setParameter('symfony_open_tracing.tracer_config', $mergedConfig['tracer_config']); } } diff --git a/src/EventListener/HttpListener.php b/src/EventListener/HttpListener.php index 7bf2b2d..0ae93fe 100644 --- a/src/EventListener/HttpListener.php +++ b/src/EventListener/HttpListener.php @@ -44,7 +44,11 @@ public function onKernelRequest(GetResponseEvent $event): void $tracer = $this->openTracing->getTracer(); $request = $event->getRequest(); - $context = $tracer->extract(Formats\HTTP_HEADERS, $request->headers->all()); + $headers = []; + foreach ($request->headers->all() as $key => $values) { + $headers[$key] = is_array($values) ? $values[0] : $values; + } + $context = $tracer->extract(Formats\HTTP_HEADERS, $headers); if ($context) { $tracer->startActiveSpan($this->nameGetter->getNameByRequest($request), ['child_of' => $context]); diff --git a/src/Resource/config/parameters.yml b/src/Resource/config/parameters.yml deleted file mode 100644 index e6fc9ed..0000000 --- a/src/Resource/config/parameters.yml +++ /dev/null @@ -1,10 +0,0 @@ -parameters: - open_tracing.tracer.service_name: 'symfony-open-tracing' - open_tracing.tracer.config: - sampler: - type: 'const' - param: true - local_agent: - reporting_host: 0.0.0.0 - logging: true - null_tracer: false diff --git a/src/Resource/config/services.yml b/src/Resource/config/services.yml index 2310517..40f5793 100644 --- a/src/Resource/config/services.yml +++ b/src/Resource/config/services.yml @@ -2,8 +2,9 @@ services: open_tracing.tracer: class: Adtechpotok\Bundle\SymfonyOpenTracing\Service\OpenTracingService arguments: - - '%open_tracing.tracer.service_name%' - - '%open_tracing.tracer.config%' + - '%symfony_open_tracing.enabled%' + - '%symfony_open_tracing.service_name%' + - '%symfony_open_tracing.tracer_config%' open_tracing.name_getter: class: Adtechpotok\Bundle\SymfonyOpenTracing\Service\RootSpanNameBuilder diff --git a/src/Service/OpenTracingService.php b/src/Service/OpenTracingService.php index 432d7d3..b805d0e 100644 --- a/src/Service/OpenTracingService.php +++ b/src/Service/OpenTracingService.php @@ -20,9 +20,9 @@ class OpenTracingService * @param string $appName * @param array $config */ - public function __construct(string $appName, array $config) + public function __construct(bool $enabled, string $appName, array $config) { - if (isset($config['null_tracer']) && $config['null_tracer']) { + if (!$enabled) { $this->tracer = new NoopTracer(); } else { (new Config($config, $appName))->initializeTracer();