Skip to content

Commit 1c181cf

Browse files
committed
symfony http.route: use existing hook instead
1 parent b32dca7 commit 1c181cf

File tree

1 file changed

+27
-40
lines changed

1 file changed

+27
-40
lines changed

src/DDTrace/Integrations/Symfony/SymfonyIntegration.php

Lines changed: 27 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ class SymfonyIntegration extends Integration
2424
/** @var string */
2525
public $frameworkPrefix = SymfonyIntegration::NAME;
2626

27+
public $http_kernel_to_kernel;
28+
2729
/**
2830
* {@inheritdoc}
2931
*/
@@ -309,42 +311,6 @@ function ($This, $scope, $args) use ($integration) {
309311
}
310312
);
311313

312-
\DDTrace\trace_method(
313-
'Symfony\Component\EventDispatcher\EventDispatcher',
314-
'dispatch',
315-
function (SpanData $span, $args) {
316-
$event = $args[0];
317-
318-
if (!($event instanceof ControllerEvent)) {
319-
return;
320-
}
321-
322-
$request = $event->getRequest();
323-
$controller = $event->getController()[0];
324-
325-
if (!property_exists($controller, 'container')) {
326-
return;
327-
}
328-
329-
$rc = new \ReflectionClass(get_class($controller));
330-
$container = $rc->getProperty('container');
331-
$container->setAccessible(true);
332-
$container = $container->getValue($controller);
333-
334-
$router = $container->get('router');
335-
$routeName = $request->attributes->get('_route');
336-
337-
$routeCollection = $router->getRouteCollection();
338-
/** @var Route $route */
339-
$route = $routeCollection->get($routeName);
340-
if (!isset($route)) {
341-
return;
342-
}
343-
$root_span = \DDTrace\root_span();
344-
$root_span->meta[Tag::HTTP_ROUTE] = $route->getPath();
345-
}
346-
);
347-
348314
$this->loadSymfony($this);
349315

350316
return Integration::LOADED;
@@ -393,6 +359,16 @@ function (SpanData $span) use ($class, $methodname) {
393359
);
394360
*/
395361

362+
$kernel = null;
363+
\DDTrace\hook_method(
364+
'Symfony\Component\HttpKernel\Kernel',
365+
'getHttpKernel',
366+
null,
367+
function ($object, $scope, $args, $retVal) use ($integration) {
368+
$integration->http_kernel_to_kernel[spl_object_hash($retVal)] = $object;
369+
}
370+
);
371+
396372
\DDTrace\hook_method(
397373
'Symfony\Component\HttpKernel\HttpKernel',
398374
'__construct',
@@ -436,12 +412,23 @@ function_exists('datadog\appsec\push_address')) {
436412
\datadog\appsec\push_address("server.request.path_params", $parameters);
437413
}
438414

439-
$route = $request->get('_route');
440-
if (null !== $route && null !== $request) {
415+
$route_name = $request->get('_route');
416+
if (null !== $route_name && null !== $request) {
441417
if (dd_trace_env_config("DD_HTTP_SERVER_ROUTE_BASED_NAMING")) {
442-
$rootSpan->resource = $route;
418+
$rootSpan->resource = $route_name;
419+
}
420+
$rootSpan->meta['symfony.route.name'] = $route_name;
421+
422+
$kernel = $integration->http_kernel_to_kernel[spl_object_hash($this)];
423+
if (isset($kernel)) {
424+
$container = $kernel->getContainer();
425+
$router = $container->get('router');
426+
$routeCollection = $router->getRouteCollection();
427+
$route = $routeCollection->get($route_name);
428+
if (isset($route)) {
429+
$rootSpan->meta[Tag::HTTP_ROUTE] = $route->getPath();
430+
}
443431
}
444-
$rootSpan->meta['symfony.route.name'] = $route;
445432
}
446433
}
447434
);

0 commit comments

Comments
 (0)