Skip to content

Commit ca1b0c5

Browse files
committed
Refactored event listeners handling
1 parent 4697b75 commit ca1b0c5

File tree

6 files changed

+130
-73
lines changed

6 files changed

+130
-73
lines changed

src/Bridge/BackgroundFinishListener.php

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/Bridge/BackgroundSpanHandler.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
use Jaeger\Http\HttpMethodTag;
77
use Jaeger\Http\HttpUriTag;
8+
use Jaeger\Span\Span;
89
use Jaeger\Symfony\Tag\SymfonyBackgroundTag;
910
use Jaeger\Symfony\Tag\SymfonyComponentTag;
1011
use Jaeger\Symfony\Tag\SymfonyVersionTag;
@@ -14,6 +15,9 @@
1415

1516
class BackgroundSpanHandler
1617
{
18+
/**
19+
* @var Span
20+
*/
1721
private $span;
1822

1923
private $tracer;
@@ -23,7 +27,7 @@ public function __construct(TracerInterface $tracer)
2327
$this->tracer = $tracer;
2428
}
2529

26-
public function start(Request $request)
30+
public function start(Request $request): BackgroundSpanHandler
2731
{
2832
$this->span = $this->tracer->start(
2933
'background',
@@ -36,9 +40,11 @@ public function start(Request $request)
3640
new SymfonyBackgroundTag(),
3741
]
3842
);
43+
44+
return $this;
3945
}
4046

41-
public function finish()
47+
public function flush(): BackgroundSpanHandler
4248
{
4349
if (null === $this->span) {
4450
return $this;

src/Bridge/GlobalSpanHandler.php

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
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\Span\Span;
9+
use Jaeger\Symfony\Name\Generator\NameGeneratorInterface;
10+
use Jaeger\Symfony\Tag\SymfonyComponentTag;
11+
use Jaeger\Symfony\Tag\SymfonyVersionTag;
12+
use Jaeger\Tag\SpanKindServerTag;
13+
use Jaeger\Tracer\TracerInterface;
14+
use Symfony\Component\HttpFoundation\Request;
15+
16+
class GlobalSpanHandler
17+
{
18+
/**
19+
* @var Span
20+
*/
21+
private $span;
22+
23+
private $durationUsec;
24+
25+
private $tracer;
26+
27+
private $nameGenerator;
28+
29+
public function __construct(TracerInterface $tracer, NameGeneratorInterface $nameGenerator)
30+
{
31+
$this->tracer = $tracer;
32+
$this->nameGenerator = $nameGenerator;
33+
}
34+
35+
public function start(Request $request): GlobalSpanHandler
36+
{
37+
$this->span = $this->tracer->start(
38+
$this->nameGenerator->generate(),
39+
[
40+
new HttpMethodTag($request->getMethod()),
41+
new HttpUriTag($request->getRequestUri()),
42+
new SpanKindServerTag(),
43+
new SymfonyComponentTag(),
44+
new SymfonyVersionTag()
45+
]
46+
)->start((int)(1000000 * $request->server->get('REQUEST_TIME_FLOAT', microtime(true))));
47+
48+
return $this;
49+
}
50+
51+
public function finish(): GlobalSpanHandler
52+
{
53+
if (null === $this->span) {
54+
return $this;
55+
}
56+
$this->durationUsec = (int)(microtime(true) * 1000000 - $this->span->startTime);
57+
58+
return $this;
59+
}
60+
61+
public function flush(): GlobalSpanHandler
62+
{
63+
if (null === $this->span || null === $this->durationUsec) {
64+
return $this;
65+
}
66+
67+
$this->tracer->finish($this->span, $this->durationUsec);
68+
$this->span = $this->durationUsec = null;
69+
70+
return $this;
71+
}
72+
}

src/Bridge/GlobalSpanListener.php

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,18 @@
33

44
namespace Jaeger\Symfony\Bridge;
55

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;
136
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
147
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
158
use Symfony\Component\HttpKernel\HttpKernelInterface;
169
use Symfony\Component\HttpKernel\KernelEvents;
1710

1811
class GlobalSpanListener implements EventSubscriberInterface
1912
{
20-
private $span;
13+
private $handler;
2114

22-
private $nameGenerator;
23-
24-
private $tracer;
25-
26-
public function __construct(NameGeneratorInterface $nameGenerator, TracerInterface $tracer)
15+
public function __construct(GlobalSpanHandler $handler)
2716
{
28-
$this->nameGenerator = $nameGenerator;
29-
$this->tracer = $tracer;
17+
$this->handler = $handler;
3018
}
3119

3220
public static function getSubscribedEvents()
@@ -39,10 +27,7 @@ public static function getSubscribedEvents()
3927

4028
public function onTerminate()
4129
{
42-
if (null === $this->span) {
43-
return $this;
44-
}
45-
$this->tracer->finish($this->span);
30+
$this->handler->finish();
4631

4732
return $this;
4833
}
@@ -52,18 +37,7 @@ public function onRequest(GetResponseEvent $event)
5237
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
5338
return $this;
5439
}
55-
56-
$request = $event->getRequest();
57-
$this->span = $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-
)->start((int)(1000000 * $request->server->get('REQUEST_TIME_FLOAT', microtime(true))));
40+
$this->handler->start($event->getRequest());
6741

6842
return $this;
6943
}

src/Bridge/HandlerFlushListener.php

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\Bridge;
5+
6+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
7+
use Symfony\Component\HttpKernel\KernelEvents;
8+
9+
class HandlerFlushListener implements EventSubscriberInterface
10+
{
11+
private $backgroundHandler;
12+
13+
private $globalHandler;
14+
15+
public function __construct(BackgroundSpanHandler $backgroundHandler, GlobalSpanHandler $globalHandler)
16+
{
17+
$this->backgroundHandler = $backgroundHandler;
18+
$this->globalHandler = $globalHandler;
19+
}
20+
21+
public static function getSubscribedEvents()
22+
{
23+
return [KernelEvents::TERMINATE => ['onTerminate', -16384],];
24+
}
25+
26+
public function onTerminate()
27+
{
28+
$this->backgroundHandler->flush();
29+
$this->globalHandler->flush();
30+
31+
return $this;
32+
}
33+
}

src/Resources/config/services.yml

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ services:
131131
- '@spl.priority.queue'
132132
jaeger.name.generator:
133133
alias: 'jaeger.name.generator.chain'
134+
jaeger.span.handler.background:
135+
class: Jaeger\Symfony\Bridge\BackgroundSpanHandler
136+
arguments: ['@jaeger.tracer']
137+
jaeger.span.handler.gloabal:
138+
class: Jaeger\Symfony\Bridge\GlobalSpanHandler
139+
arguments: ['@jaeger.tracer', '@jaeger.name.generator']
134140
jaeger.debug.listener:
135141
class: Jaeger\Symfony\Bridge\DebugListener
136142
arguments:
@@ -155,9 +161,7 @@ services:
155161
- {name: 'kernel.event_subscriber' }
156162
jaeger.global.span.listener:
157163
class: Jaeger\Symfony\Bridge\GlobalSpanListener
158-
arguments:
159-
- '@jaeger.name.generator'
160-
- '@jaeger.tracer'
164+
arguments: ['@jaeger.span.handler.gloabal']
161165
tags:
162166
- {name: 'kernel.event_subscriber' }
163167
jaeger.app.start.listener:
@@ -170,16 +174,13 @@ services:
170174
arguments: ['@jaeger.tracer']
171175
tags:
172176
- {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' }
181177
jaeger.span.background.listener.start:
182178
class: Jaeger\Symfony\Bridge\BackgroundStartListener
183179
arguments: ['@jaeger.span.handler.background']
184180
tags:
185181
- {name: 'kernel.event_subscriber' }
182+
jaeger.span.handler.listener.flush:
183+
class: Jaeger\Symfony\Bridge\HandlerFlushListener
184+
arguments: ['@jaeger.span.handler.background', '@jaeger.span.handler.gloabal']
185+
tags:
186+
- {name: 'kernel.event_subscriber' }

0 commit comments

Comments
 (0)