Skip to content

Commit 53ee348

Browse files
committed
Merge branch '2.0.x' into 1.0.x
2 parents 358c198 + 36c3385 commit 53ee348

File tree

6 files changed

+197
-55
lines changed

6 files changed

+197
-55
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Jaeger\Symfony\Bridge;
5+
6+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
7+
use Symfony\Component\HttpKernel\KernelEvents;
8+
9+
class BackgroundFinishListener implements EventSubscriberInterface
10+
{
11+
private $handler;
12+
13+
public function __construct(BackgroundSpanHandler $handler)
14+
{
15+
$this->handler = $handler;
16+
}
17+
18+
public static function getSubscribedEvents()
19+
{
20+
return [KernelEvents::TERMINATE => ['onTerminate', -4096],];
21+
}
22+
23+
public function onTerminate()
24+
{
25+
$this->handler->finish();
26+
27+
return $this;
28+
}
29+
}

src/Bridge/BackgroundSpanHandler.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Jaeger\Symfony\Bridge;
5+
6+
use Jaeger\Http\HttpMethodTag;
7+
use Jaeger\Http\HttpUriTag;
8+
use Jaeger\Symfony\Tag\SymfonyBackgroundTag;
9+
use Jaeger\Symfony\Tag\SymfonyComponentTag;
10+
use Jaeger\Symfony\Tag\SymfonyVersionTag;
11+
use Jaeger\Tag\SpanKindServerTag;
12+
use Jaeger\Tracer\TracerInterface;
13+
use Symfony\Component\HttpFoundation\Request;
14+
15+
class BackgroundSpanHandler
16+
{
17+
private $span;
18+
19+
private $tracer;
20+
21+
public function __construct(TracerInterface $tracer)
22+
{
23+
$this->tracer = $tracer;
24+
}
25+
26+
public function start(Request $request)
27+
{
28+
$this->span = $this->tracer->start(
29+
'background',
30+
[
31+
new HttpMethodTag($request->getMethod()),
32+
new HttpUriTag($request->getRequestUri()),
33+
new SpanKindServerTag(),
34+
new SymfonyComponentTag(),
35+
new SymfonyVersionTag(),
36+
new SymfonyBackgroundTag(),
37+
]
38+
);
39+
}
40+
41+
public function finish()
42+
{
43+
44+
}
45+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Jaeger\Symfony\Bridge;
5+
6+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
7+
use Symfony\Component\HttpKernel\Event\PostResponseEvent;
8+
use Symfony\Component\HttpKernel\KernelEvents;
9+
10+
class BackgroundStartListener implements EventSubscriberInterface
11+
{
12+
private $handler;
13+
14+
public function __construct(BackgroundSpanHandler $handler)
15+
{
16+
$this->handler = $handler;
17+
}
18+
19+
public static function getSubscribedEvents()
20+
{
21+
return [KernelEvents::TERMINATE => ['onTerminate', 4096],];
22+
}
23+
24+
public function onTerminate(PostResponseEvent $event)
25+
{
26+
$this->handler->start($event->getRequest());
27+
28+
return $this;
29+
}
30+
}

src/Bridge/GlobalSpanListener.php

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Jaeger\Symfony\Bridge;
5+
6+
use Jaeger\Http\HttpMethodTag;
7+
use Jaeger\Http\HttpUriTag;
8+
use Jaeger\Symfony\Name\Generator\NameGeneratorInterface;
9+
use Jaeger\Symfony\Tag\SymfonyComponentTag;
10+
use Jaeger\Symfony\Tag\SymfonyVersionTag;
11+
use Jaeger\Tag\SpanKindServerTag;
12+
use Jaeger\Tracer\TracerInterface;
13+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
14+
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
15+
use Symfony\Component\HttpKernel\HttpKernelInterface;
16+
use Symfony\Component\HttpKernel\KernelEvents;
17+
18+
class GlobalSpanListener implements EventSubscriberInterface
19+
{
20+
private $span;
21+
22+
private $nameGenerator;
23+
24+
private $tracer;
25+
26+
public function __construct(NameGeneratorInterface $nameGenerator, TracerInterface $tracer)
27+
{
28+
$this->nameGenerator = $nameGenerator;
29+
$this->tracer = $tracer;
30+
}
31+
32+
public static function getSubscribedEvents()
33+
{
34+
return [
35+
KernelEvents::REQUEST => ['onRequest', 30],
36+
KernelEvents::TERMINATE => ['onTerminate', -16384],
37+
];
38+
}
39+
40+
public function onTerminate()
41+
{
42+
if (null === $this->span) {
43+
return $this;
44+
}
45+
$this->tracer->finish($this->span);
46+
47+
return $this;
48+
}
49+
50+
public function onRequest(GetResponseEvent $event)
51+
{
52+
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
53+
return $this;
54+
}
55+
56+
$request = $event->getRequest();
57+
$requestSpan = $this->tracer->start(
58+
$this->nameGenerator->generate(),
59+
[
60+
new HttpMethodTag($request->getMethod()),
61+
new HttpUriTag($request->getRequestUri()),
62+
new SpanKindServerTag(),
63+
new SymfonyComponentTag(),
64+
new SymfonyVersionTag()
65+
]
66+
);
67+
$this->span = $requestSpan->start((int)1000000 * $request->server->get('REQUEST_TIME_FLOAT', microtime(true)));
68+
69+
return $this;
70+
}
71+
}

src/Bridge/RequestSpanListener.php

Lines changed: 2 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,13 @@
55
use Jaeger\Http\HttpMethodTag;
66
use Jaeger\Http\HttpUriTag;
77
use Jaeger\Symfony\Name\Generator\NameGeneratorInterface;
8-
use Jaeger\Symfony\Tag\SymfonyBackgroundTag;
98
use Jaeger\Symfony\Tag\SymfonyComponentTag;
109
use Jaeger\Symfony\Tag\SymfonyVersionTag;
11-
use Jaeger\Symfony\Tag\TimeMicroTag;
12-
use Jaeger\Symfony\Tag\TimeSourceTag;
13-
use Jaeger\Symfony\Tag\TimeValueTag;
1410
use Jaeger\Tag\SpanKindServerTag;
1511
use Jaeger\Tracer\TracerInterface;
1612
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
1713
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
1814
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
19-
use Symfony\Component\HttpKernel\Event\PostResponseEvent;
2015
use Symfony\Component\HttpKernel\HttpKernelInterface;
2116
use Symfony\Component\HttpKernel\KernelEvents;
2217

@@ -40,56 +35,15 @@ public static function getSubscribedEvents()
4035
return [
4136
KernelEvents::REQUEST => ['onRequest', 29],
4237
KernelEvents::RESPONSE => ['onResponse', -1024],
43-
KernelEvents::TERMINATE => ['onTerminate', -1024],
4438
];
4539
}
4640

47-
public function onTerminate(PostResponseEvent $event)
48-
{
49-
if ($this->spans->isEmpty()) {
50-
return $this;
51-
}
52-
53-
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
54-
return $this;
55-
}
56-
57-
$this->tracer->finish($this->spans->pop());
58-
$this->tracer->finish(
59-
$this->spans->pop()->addTag(new HttpCodeTag($event->getResponse()->getStatusCode()))
60-
);
61-
62-
return $this;
63-
}
64-
6541
public function onResponse(FilterResponseEvent $event)
6642
{
6743
if ($this->spans->isEmpty()) {
6844
return $this;
6945
}
70-
71-
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
72-
$this->tracer->finish(
73-
$this->spans->pop()->addTag(new HttpCodeTag($event->getResponse()->getStatusCode()))
74-
);
75-
76-
return $this;
77-
}
78-
79-
$request = $event->getRequest();
80-
$this->spans->push(
81-
$this->tracer->start(
82-
'background',
83-
[
84-
new HttpMethodTag($request->getMethod()),
85-
new HttpUriTag($request->getRequestUri()),
86-
new SpanKindServerTag(),
87-
new SymfonyComponentTag(),
88-
new SymfonyVersionTag(),
89-
new SymfonyBackgroundTag(),
90-
]
91-
)
92-
);
46+
$this->tracer->finish($this->spans->pop()->addTag(new HttpCodeTag($event->getResponse()->getStatusCode())));
9347

9448
return $this;
9549
}
@@ -108,14 +62,7 @@ public function onRequest(GetResponseEvent $event)
10862
]
10963
);
11064
if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
111-
$source = $request->server->has('REQUEST_TIME_FLOAT') ? 'header' : 'microtime';
112-
$value = $request->server->get('REQUEST_TIME_FLOAT', microtime(true));
113-
$startTime = (int)($value * 1000000);
114-
$requestSpan
115-
->addTag(new TimeSourceTag($source))
116-
->addTag(new TimeValueTag($value))
117-
->addTag(new TimeMicroTag($startTime))
118-
->start($startTime);
65+
$requestSpan->start((int)1000000 * $request->server->get('REQUEST_TIME_FLOAT', microtime(true)));
11966
}
12067

12168
$this->spans->push($requestSpan);

src/Resources/config/services.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,13 @@ services:
153153
- '@jaeger.tracer'
154154
tags:
155155
- {name: 'kernel.event_subscriber' }
156+
jaeger.global.span.listener:
157+
class: Jaeger\Symfony\Bridge\GlobalSpanListener
158+
arguments:
159+
- '@jaeger.name.generator'
160+
- '@jaeger.tracer'
161+
tags:
162+
- {name: 'kernel.event_subscriber' }
156163
jaeger.app.start.listener:
157164
class: Jaeger\Symfony\Bridge\AppStartSpanListener
158165
arguments: ['@jaeger.tracer']
@@ -163,3 +170,16 @@ services:
163170
arguments: ['@jaeger.tracer']
164171
tags:
165172
- {name: 'kernel.event_subscriber' }
173+
jaeger.span.handler.background:
174+
class: Jaeger\Symfony\Bridge\BackgroundSpanHandler
175+
arguments: ['@jaeger.tracer']
176+
jaeger.span.background.listener.finish:
177+
class: Jaeger\Symfony\Bridge\BackgroundFinishListener
178+
arguments: ['@jaeger.span.handler.background']
179+
tags:
180+
- {name: 'kernel.event_subscriber' }
181+
jaeger.span.background.listener.start:
182+
class: Jaeger\Symfony\Bridge\BackgroundStartListener
183+
arguments: ['@jaeger.span.handler.background']
184+
tags:
185+
- {name: 'kernel.event_subscriber' }

0 commit comments

Comments
 (0)