Skip to content

Commit 199f608

Browse files
committed
Merge branch '2.0.x' into 1.0.x
2 parents 34d3728 + 4c174ab commit 199f608

File tree

6 files changed

+155
-18
lines changed

6 files changed

+155
-18
lines changed

src/Bridge/RequestSpanListener.php

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use Jaeger\Http\HttpCodeTag;
55
use Jaeger\Http\HttpMethodTag;
66
use Jaeger\Http\HttpUriTag;
7+
use Jaeger\Symfony\Name\Generator\NameGeneratorInterface;
78
use Jaeger\Symfony\Tag\SymfonyComponentTag;
89
use Jaeger\Symfony\Tag\SymfonyVersionTag;
910
use Jaeger\Symfony\Tag\TimeMicroTag;
@@ -12,7 +13,6 @@
1213
use Jaeger\Tag\SpanKindServerTag;
1314
use Jaeger\Tracer\TracerInterface;
1415
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
15-
use Symfony\Component\HttpFoundation\Request;
1616
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
1717
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
1818
use Symfony\Component\HttpKernel\HttpKernelInterface;
@@ -22,11 +22,14 @@ class RequestSpanListener implements EventSubscriberInterface
2222
{
2323
private $spans;
2424

25+
private $nameGenerator;
26+
2527
private $tracer;
2628

27-
public function __construct(\SplStack $stack, TracerInterface $tracer)
29+
public function __construct(\SplStack $stack, NameGeneratorInterface $nameGenerator, TracerInterface $tracer)
2830
{
2931
$this->spans = $stack;
32+
$this->nameGenerator = $nameGenerator;
3033
$this->tracer = $tracer;
3134
}
3235

@@ -55,7 +58,7 @@ public function onRequest(GetResponseEvent $event)
5558
{
5659
$request = $event->getRequest();
5760
$requestSpan = $this->tracer->start(
58-
$this->getOperationName($request),
61+
$this->nameGenerator->generate(),
5962
[
6063
new HttpMethodTag($request->getMethod()),
6164
new HttpUriTag($request->getRequestUri()),
@@ -79,19 +82,4 @@ public function onRequest(GetResponseEvent $event)
7982

8083
return $this;
8184
}
82-
83-
public function getOperationName(Request $request)
84-
{
85-
if (null !== ($fragment = $request->attributes->get('is_fragment'))) {
86-
return ($controller = $request->attributes->get('_controller', null))
87-
? sprintf('fragment.%s', $controller)
88-
: 'fragment';
89-
}
90-
91-
if (null === ($routeName = $request->attributes->get('_route', null))) {
92-
return $request->getRequestUri();
93-
}
94-
95-
return $routeName;
96-
}
9785
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Jaeger\Symfony\Name\Generator;
5+
6+
use Symfony\Component\Console\ConsoleEvents;
7+
use Symfony\Component\Console\Event\ConsoleCommandEvent;
8+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
9+
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
10+
use Symfony\Component\HttpKernel\KernelEvents;
11+
12+
class DefaultNameGenerator implements NameGeneratorInterface, EventSubscriberInterface
13+
{
14+
private $name = '';
15+
16+
17+
public static function getSubscribedEvents()
18+
{
19+
return [
20+
KernelEvents::REQUEST => ['onRequest', 8192],
21+
ConsoleEvents::COMMAND => ['onCommand', 8192],
22+
KernelEvents::TERMINATE => ['onTerminate'],
23+
ConsoleEvents::TERMINATE => ['onTerminate'],
24+
];
25+
}
26+
27+
public function onCommand(ConsoleCommandEvent $event)
28+
{
29+
$this->name = $event->getCommand()->getName();
30+
31+
return $this;
32+
}
33+
34+
public function onRequest(GetResponseEvent $event)
35+
{
36+
$request = $event->getRequest();
37+
if (null !== ($fragment = $request->attributes->get('is_fragment'))) {
38+
$this->name = ($controller = $request->attributes->get('_controller', null))
39+
? sprintf('fragment.%s', $controller)
40+
: 'fragment';
41+
42+
return $this;
43+
}
44+
45+
if (null === ($routeName = $request->attributes->get('_route', null))) {
46+
$this->name = $request->getRequestUri();
47+
48+
return $this;
49+
}
50+
51+
$this->name = $routeName;
52+
53+
return $this;
54+
}
55+
56+
public function onTerminate()
57+
{
58+
$this->name = '';
59+
60+
return $this;
61+
}
62+
63+
public function generate(): string
64+
{
65+
return $this->name;
66+
}
67+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Jaeger\Symfony\Name\Generator;
5+
6+
class NameGeneratorChain implements NameGeneratorInterface
7+
{
8+
private $queue;
9+
10+
public function __construct(\SplPriorityQueue $queue)
11+
{
12+
$this->queue = $queue;
13+
}
14+
15+
public function add(NameGeneratorInterface $extractor, int $priority = 0): NameGeneratorChain
16+
{
17+
$this->queue->insert($extractor, $priority);
18+
19+
return $this;
20+
}
21+
22+
public function generate(): string
23+
{
24+
$queue = clone $this->queue;
25+
while (false === $queue->isEmpty()) {
26+
if ('' !== ($debugId = $queue->extract()->generate())) {
27+
return $debugId;
28+
}
29+
}
30+
31+
return '';
32+
}
33+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Jaeger\Symfony\Name\Generator;
5+
6+
interface NameGeneratorInterface
7+
{
8+
public function generate() : string;
9+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Jaeger\Symfony\Resources\DependencyInjection;
5+
6+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
7+
use Symfony\Component\DependencyInjection\ContainerBuilder;
8+
use Symfony\Component\DependencyInjection\Reference;
9+
10+
class NameGeneratorChainCompilerPass implements CompilerPassInterface
11+
{
12+
public function process(ContainerBuilder $container)
13+
{
14+
if (false === $container->hasDefinition('jaeger.name.generator.chain')) {
15+
throw new \RuntimeException(
16+
sprintf('Required service %s is missing from container', 'jaeger.name.generator.chain')
17+
);
18+
}
19+
20+
$definition = $container->getDefinition('jaeger.name.generator.chain');
21+
foreach ($container->findTaggedServiceIds('jaeger.name.generator') as $id => $tags) {
22+
foreach ($tags as $tag) {
23+
$priority = $tag['priority'] ?? 0;
24+
$definition->addMethodCall('add', [new Reference($id), $priority]);
25+
}
26+
}
27+
}
28+
}

src/Resources/config/services.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,17 @@ services:
113113
- '@spl.priority.queue'
114114
jaeger.debug.extractor:
115115
alias: 'jaeger.debug.extractor.chain'
116+
jaeger.name.generator.default:
117+
class: Jaeger\Symfony\Name\Generator\DefaultNameGenerator
118+
tags:
119+
- {name: 'kernel.event_subscriber' }
120+
- {name: 'jaeger.name.generator', priority: -1}
121+
jaeger.name.generator.chain:
122+
class: Jaeger\Symfony\Name\Generator\NameGeneratorChain
123+
arguments:
124+
- '@spl.priority.queue'
125+
jaeger.name.generator:
126+
alias: 'jaeger.name.generator.chain'
116127
jaeger.debug.listener:
117128
class: Jaeger\Symfony\Bridge\DebugListener
118129
arguments:
@@ -131,6 +142,7 @@ services:
131142
class: Jaeger\Symfony\Bridge\RequestSpanListener
132143
arguments:
133144
- '@spl.stack'
145+
- '@jaeger.name.generator'
134146
- '@jaeger.tracer'
135147
tags:
136148
- {name: 'kernel.event_subscriber' }

0 commit comments

Comments
 (0)