Skip to content

Commit f56b261

Browse files
committed
Merge branch '2.0.x' into 1.0.x
# Conflicts: # composer.json # src/Bridge/ContextListener.php # src/Context/Extractor/EnvContextExtractor.php # src/Context/Extractor/HeaderContextExtractor.php
2 parents b4c3a24 + dc9e6ef commit f56b261

14 files changed

+342
-34
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"symfony/console": "~2 || ~3",
1313
"symfony/http-kernel": "~2 || ~3",
1414
"symfony/dependency-injection": "~2 || ~3",
15-
"code-tool/jaeger-client-php": "~1.4"
15+
"code-tool/jaeger-client-php": "~1.5"
1616
},
1717
"require-dev": {
1818
"php-ds/php-ds": "@stable",

src/Bridge/AppStartSpanListener.php

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33

44
use Jaeger\Symfony\Tag\SymfonyComponentTag;
55
use Jaeger\Symfony\Tag\SymfonyVersionTag;
6-
use Jaeger\Tag\DoubleTag;
7-
use Jaeger\Tag\LongTag;
6+
use Jaeger\Symfony\Tag\TimeMicroTag;
7+
use Jaeger\Symfony\Tag\TimeSourceTag;
8+
use Jaeger\Symfony\Tag\TimeValueTag;
89
use Jaeger\Tag\SpanKindServerTag;
9-
use Jaeger\Tag\StringTag;
1010
use Jaeger\Tracer\TracerInterface;
1111
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
1212
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
@@ -32,21 +32,22 @@ public static function getSubscribedEvents()
3232
public function onRequest(GetResponseEvent $event)
3333
{
3434
$request = $event->getRequest();
35-
if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
36-
$source = $request->server->has('REQUEST_TIME_FLOAT') ? 'header' : 'microtime';
37-
$value = $request->server->get('REQUEST_TIME_FLOAT', microtime(true));
38-
$startTime = (int)($value * 1000000);
39-
$this->tracer->finish(
40-
$this->tracer->start('symfony.start')
41-
->addTag(new SpanKindServerTag())
42-
->addTag(new SymfonyComponentTag())
43-
->addTag(new SymfonyVersionTag())
44-
->addTag(new StringTag('time.source', $source))
45-
->addTag(new DoubleTag('time.value', $value))
46-
->addTag(new LongTag('time.micro', $startTime))
47-
->start($startTime)
48-
);
35+
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
36+
return $this;
4937
}
38+
$source = $request->server->has('REQUEST_TIME_FLOAT') ? 'header' : 'microtime';
39+
$value = $request->server->get('REQUEST_TIME_FLOAT', microtime(true));
40+
$startTime = (int)($value * 1000000);
41+
$this->tracer->finish(
42+
$this->tracer->start('symfony.start')
43+
->addTag(new SpanKindServerTag())
44+
->addTag(new SymfonyComponentTag())
45+
->addTag(new SymfonyVersionTag())
46+
->addTag(new TimeSourceTag($source))
47+
->addTag(new TimeValueTag($value))
48+
->addTag(new TimeMicroTag($startTime))
49+
->start($startTime)
50+
);
5051

5152
return $this;
5253
}

src/Bridge/ContextInjector.php renamed to src/Bridge/ContextListener.php

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
99
use Symfony\Component\HttpKernel\KernelEvents;
1010

11-
class ContextInjector implements EventSubscriberInterface
11+
class ContextListener implements EventSubscriberInterface
1212
{
1313
private $injectable;
1414

@@ -25,16 +25,22 @@ public function __construct(
2525
public static function getSubscribedEvents()
2626
{
2727
return [
28-
ConsoleEvents::COMMAND => ['onCommand', 4096],
29-
KernelEvents::REQUEST => ['onRequest', 4096],
28+
ConsoleEvents::COMMAND => ['onCommand', 8192],
29+
KernelEvents::REQUEST => ['onRequest', 8192],
3030
];
3131
}
3232

33+
/**
34+
* @return ContextListener
35+
*/
3336
public function onCommand()
3437
{
3538
return $this->inject();
3639
}
3740

41+
/**
42+
* @return ContextListener
43+
*/
3844
public function inject()
3945
{
4046
if (null === ($context = $this->extractor->extract())) {
@@ -45,6 +51,11 @@ public function inject()
4551
return $this;
4652
}
4753

54+
/**
55+
* @param GetResponseEvent $event
56+
*
57+
* @return ContextListener
58+
*/
4859
public function onRequest(GetResponseEvent $event)
4960
{
5061
if (false === $event->isMasterRequest()) {

src/Bridge/DebugListener.php

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Jaeger\Symfony\Bridge;
5+
6+
use Jaeger\Symfony\Debug\Extractor\DebugExtractorInterface;
7+
use Jaeger\Tracer\DebuggableInterface;
8+
use Symfony\Component\Console\ConsoleEvents;
9+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
10+
use Symfony\Component\HttpKernel\KernelEvents;
11+
12+
class DebugListener implements EventSubscriberInterface
13+
{
14+
private $debuggable;
15+
16+
private $extractor;
17+
18+
/**
19+
* DebugListener constructor.
20+
*
21+
* @param DebuggableInterface $debuggable
22+
* @param DebugExtractorInterface $extractor
23+
*/
24+
public function __construct(DebuggableInterface $debuggable, DebugExtractorInterface $extractor)
25+
{
26+
$this->debuggable = $debuggable;
27+
$this->extractor = $extractor;
28+
}
29+
30+
public static function getSubscribedEvents()
31+
{
32+
return [
33+
ConsoleEvents::COMMAND => ['onStart', 16384],
34+
KernelEvents::REQUEST => ['onStart', 16384],
35+
ConsoleEvents::TERMINATE => ['onTerminate'],
36+
KernelEvents::TERMINATE => ['onTerminate'],
37+
];
38+
}
39+
40+
public function onTerminate()
41+
{
42+
$this->debuggable->disable();
43+
44+
return $this;
45+
}
46+
47+
public function onStart()
48+
{
49+
if ('' === ($debugId = $this->extractor->getDebug())) {
50+
return $this;
51+
}
52+
$this->debuggable->enable($debugId);
53+
54+
return $this;
55+
}
56+
}

src/Bridge/RequestSpanListener.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function __construct(\SplStack $stack, TracerInterface $tracer)
3333
public static function getSubscribedEvents()
3434
{
3535
return [
36-
KernelEvents::REQUEST => ['onRequest', 16],
36+
KernelEvents::REQUEST => ['onRequest', 4096],
3737
KernelEvents::RESPONSE => ['onResponse'],
3838
];
3939
}
@@ -64,7 +64,6 @@ public function onRequest(GetResponseEvent $event)
6464
new SymfonyVersionTag()
6565
]
6666
);
67-
6867
if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
6968
$source = $request->server->has('REQUEST_TIME_FLOAT') ? 'header' : 'microtime';
7069
$value = $request->server->get('REQUEST_TIME_FLOAT', microtime(true));

src/Context/Extractor/EnvContextExtractor.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,28 @@ public function extract()
4343
return $this->context;
4444
}
4545

46+
4647
public static function getSubscribedEvents()
4748
{
4849
return [
4950
ConsoleEvents::COMMAND => ['onCommand', 8192],
51+
ConsoleEvents::TERMINATE => ['onTerminate'],
5052
];
5153
}
5254

55+
/**
56+
* @return EnvContextExtractor
57+
*/
58+
public function onTerminate()
59+
{
60+
$this->context = null;
61+
62+
return $this;
63+
}
64+
65+
/**
66+
* @return EnvContextExtractor
67+
*/
5368
public function onCommand()
5469
{
5570
if (false === array_key_exists($this->envName, $_ENV)) {

src/Context/Extractor/HeaderContextExtractor.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,25 @@ public static function getSubscribedEvents()
4848
{
4949
return [
5050
KernelEvents::REQUEST => ['onRequest', 8192],
51+
KernelEvents::TERMINATE => ['onTerminate'],
5152
];
5253
}
5354

55+
/**
56+
* @return HeaderContextExtractor
57+
*/
58+
public function onTerminate()
59+
{
60+
$this->context = null;
61+
62+
return $this;
63+
}
64+
65+
/**
66+
* @param GetResponseEvent $event
67+
*
68+
* @return HeaderContextExtractor
69+
*/
5470
public function onRequest(GetResponseEvent $event)
5571
{
5672
$request = $event->getRequest();
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Jaeger\Symfony\Debug\Extractor;
5+
6+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
7+
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
8+
use Symfony\Component\HttpKernel\HttpKernelInterface;
9+
use Symfony\Component\HttpKernel\KernelEvents;
10+
11+
class CookieDebugExtractor implements DebugExtractorInterface, EventSubscriberInterface
12+
{
13+
private $debugId = '';
14+
15+
private $cookieName;
16+
17+
public function __construct(string $cookieName)
18+
{
19+
$this->cookieName = $cookieName;
20+
}
21+
22+
public function onRequest(GetResponseEvent $event)
23+
{
24+
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
25+
return $this;
26+
}
27+
28+
$request = $event->getRequest();
29+
if (false === $request->cookies->has($this->cookieName)) {
30+
return $this;
31+
}
32+
33+
$this->debugId = (string)$request->cookies->get($this->cookieName, '');
34+
35+
return $this;
36+
}
37+
38+
public function onTerminate()
39+
{
40+
$this->debugId = '';
41+
42+
return $this;
43+
}
44+
45+
public function getDebug(): string
46+
{
47+
return $this->debugId;
48+
}
49+
50+
public static function getSubscribedEvents()
51+
{
52+
return [
53+
KernelEvents::REQUEST => ['onRequest', 8192],
54+
KernelEvents::TERMINATE => ['onTerminate'],
55+
];
56+
}
57+
58+
59+
}
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\Debug\Extractor;
5+
6+
class DebugExtractorChain implements DebugExtractorInterface
7+
{
8+
private $queue;
9+
10+
public function __construct(\SplPriorityQueue $queue)
11+
{
12+
$this->queue = $queue;
13+
}
14+
15+
public function add(DebugExtractorInterface $extractor, int $priority = 0): DebugExtractorChain
16+
{
17+
$this->queue->insert($extractor, $priority);
18+
19+
return $this;
20+
}
21+
22+
public function getDebug(): string
23+
{
24+
$queue = clone $this->queue;
25+
while (false === $queue->isEmpty()) {
26+
if ('' !== ($debugId = $queue->extract()->getDebug())) {
27+
return $debugId;
28+
}
29+
}
30+
31+
return '';
32+
}
33+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Jaeger\Symfony\Debug\Extractor;
5+
6+
interface DebugExtractorInterface
7+
{
8+
/**
9+
* @return string
10+
*/
11+
public function getDebug() : string;
12+
}

0 commit comments

Comments
 (0)