Skip to content

Commit

Permalink
Support localized routes
Browse files Browse the repository at this point in the history
  • Loading branch information
cataphract committed Dec 18, 2024
1 parent f8e8a92 commit 0ee8ad9
Showing 1 changed file with 55 additions and 42 deletions.
97 changes: 55 additions & 42 deletions src/DDTrace/Integrations/Symfony/SymfonyIntegration.php
Original file line number Diff line number Diff line change
Expand Up @@ -388,10 +388,62 @@ function () use ($integration) {
}
);

$handle_route = function($request, $rootSpan) use ($integration) {
$route_name = $request->get('_route');
if ($route_name === null) {
return;
}
if (dd_trace_env_config("DD_HTTP_SERVER_ROUTE_BASED_NAMING")) {
$rootSpan->resource = $route_name;
}
$rootSpan->meta['symfony.route.name'] = $route_name;

// the rest is for determining http.route
if ($integration->kernel === null) {
return;
}
/** @var ContainerInterface $container */
$container = $integration->kernel->getContainer();
$cache = null;
try {
$cache = $container->get('cache.app');
} catch (\Exception $e) {
return;
}

/** @var \Symfony\Bundle\FrameworkBundle\Routing\Router $router */
$router = $container->get('router');
if (!\method_exists($cache, 'getItem')) {
return;
}
$itemName = "_datadog.route.path.$route_name";
$locale = $request->get('_locale');
if ($locale !== null) {
$itemName .= ".$locale";
}
$item = $cache->getItem($itemName);
if ($item->isHit()) {
$route = $item->get();
} else {
$routeCollection = $router->getRouteCollection();
$route = $routeCollection->get($route_name);
if ($route == null && ($locale = $request->get('_locale')) !== null) {
$route = $routeCollection->get($route_name . '.' . $locale);
}
$item->set($route);
$item->expiresAfter(3600);
$cache->save($item);
}
if (isset($route)) {
$rootSpan->meta[Tag::HTTP_ROUTE] = $route->getPath();
}

};

\DDTrace\trace_method(
'Symfony\Component\HttpKernel\HttpKernel',
'handle',
function (SpanData $span, $args, $response) use ($integration) {
function (SpanData $span, $args, $response) use ($integration, $handle_route) {
/** @var Request $request */
list($request) = $args;

Expand All @@ -413,53 +465,14 @@ function (SpanData $span, $args, $response) use ($integration) {
$rootSpan->meta[Tag::HTTP_STATUS_CODE] = $response->getStatusCode();
}

$handle_route($request, $rootSpan);

$parameters = $request->get('_route_params');
if (!empty($parameters) &&
is_array($parameters) &&
function_exists('datadog\appsec\push_address')) {
\datadog\appsec\push_address("server.request.path_params", $parameters);
}

$route_name = $request->get('_route');
if ($route_name === null) {
return;
}
if (dd_trace_env_config("DD_HTTP_SERVER_ROUTE_BASED_NAMING")) {
$rootSpan->resource = $route_name;
}
$rootSpan->meta['symfony.route.name'] = $route_name;

// the rest is for determining http.route
if ($integration->kernel === null) {
return;
}
/** @var ContainerInterface $container */
$container = $integration->kernel->getContainer();
$cache = null;
try {
$cache = $container->get('cache.app');
} catch (\Exception $e) {
return;
}

/** @var \Symfony\Bundle\FrameworkBundle\Routing\Router $router */
$router = $container->get('router');
if (!\method_exists($cache, 'getItem')) {
return;
}
$item = $cache->getItem("_datadog.route.path.$route_name");
if ($item->isHit()) {
$route = $item->get();
} else {
$routeCollection = $router->getRouteCollection();
$route = $routeCollection->get($route_name);
$item->set($route);
$item->expiresAfter(3600);
$cache->save($item);
}
if (isset($route)) {
$rootSpan->meta[Tag::HTTP_ROUTE] = $route->getPath();
}
}
);

Expand Down

0 comments on commit 0ee8ad9

Please sign in to comment.