Skip to content

Commit

Permalink
style: refactor common logic
Browse files Browse the repository at this point in the history
  • Loading branch information
PROFeNoM committed Apr 10, 2024
1 parent c5879b6 commit 1f3d417
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 90 deletions.
47 changes: 47 additions & 0 deletions src/Integrations/Integrations/CakePHP/CakePHPIntegration.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use DDTrace\Integrations\Integration;
use DDTrace\Integrations\CakePHP\V2\CakePHPIntegrationLoader as CakePHPIntegrationLoaderV2;
use DDTrace\Integrations\CakePHP\V3\CakePHPIntegrationLoader as CakePHPIntegrationLoaderV3;
use DDTrace\Tag;

class CakePHPIntegration extends Integration
{
Expand All @@ -29,6 +30,52 @@ public function init()

$integration = $this;

$integration->setRootSpanInfoFn = function () use ($integration) {
$rootSpan = \DDTrace\root_span();
if ($rootSpan === null) {
return;
}

$integration->appName = \ddtrace_config_app_name(CakePHPIntegration::NAME);
$integration->addTraceAnalyticsIfEnabled($rootSpan);
$rootSpan->service = $integration->appName;
if ('cli' === PHP_SAPI) {
$rootSpan->name = 'cakephp.console';
$rootSpan->resource = !empty($_SERVER['argv'][1])
? 'cake_console ' . $_SERVER['argv'][1]
: 'cake_console';
} else {
$rootSpan->name = 'cakephp.request';
$rootSpan->meta[Tag::SPAN_KIND] = 'server';
}
$rootSpan->meta[Tag::COMPONENT] = CakePHPIntegration::NAME;
};

$integration->handleExceptionFn = function ($This, $scope, $args) use ($integration) {
$rootSpan = \DDTrace\root_span();
if ($rootSpan !== null) {
$integration->setError($rootSpan, $args[0]);
}
};

$integration->setStatusCodeFn = function ($This, $scope, $args, $retval) use ($integration) {
$rootSpan = \DDTrace\root_span();
if ($rootSpan) {
$rootSpan->meta[Tag::HTTP_STATUS_CODE] = $retval;
}
};

$integration->parseRouteFn = function ($app, $appClass, $args, $retval) use ($integration) {
if (!$retval) {
return;
}

$rootSpan = \DDTrace\root_span();
if ($rootSpan !== null) {
$rootSpan->meta[Tag::HTTP_ROUTE] = $app->template;
}
};

$loader = class_exists('Cake\Http\Server') // Only exists in V3+
? new CakePHPIntegrationLoaderV3()
: new CakePHPIntegrationLoaderV2();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,29 +21,8 @@ public function load($integration)
return Integration::NOT_AVAILABLE;
}

$setRootSpanInfoFn = function () use ($integration) {
$rootSpan = \DDTrace\root_span();
if ($rootSpan === null) {
return;
}

$integration->appName = \ddtrace_config_app_name(CakePHPIntegration::NAME);
$integration->addTraceAnalyticsIfEnabled($rootSpan);
$rootSpan->service = $integration->appName;
if ('cli' === PHP_SAPI) {
$rootSpan->name = 'cakephp.console';
$rootSpan->resource = !empty($_SERVER['argv'][1])
? 'cake_console ' . $_SERVER['argv'][1]
: 'cake_console';
} else {
$rootSpan->name = 'cakephp.request';
$rootSpan->meta[Tag::SPAN_KIND] = 'server';
}
$rootSpan->meta[Tag::COMPONENT] = CakePHPIntegration::NAME;
};

\DDTrace\hook_method('App', 'init', $setRootSpanInfoFn);
\DDTrace\hook_method('Dispatcher', '__construct', $setRootSpanInfoFn);
\DDTrace\hook_method('App', 'init', $integration->setRootSpanInfoFn);
\DDTrace\hook_method('Dispatcher', '__construct', $integration->setRootSpanInfoFn);

\DDTrace\trace_method(
'Controller',
Expand Down Expand Up @@ -88,24 +67,14 @@ function (SpanData $span, array $args) use ($integration) {
\DDTrace\hook_method(
'ExceptionRenderer',
'__construct',
function ($This, $scope, $args) use ($integration) {
$rootSpan = \DDTrace\root_span();
if ($rootSpan !== null) {
$integration->setError($rootSpan, $args[0]);
}
}
$integration->handleExceptionFn
);

\DDTrace\hook_method(
'CakeResponse',
'statusCode',
null,
function ($This, $scope, $args, $retval) use ($integration) {
$rootSpan = \DDTrace\root_span();
if ($rootSpan !== null) {
$rootSpan->meta[Tag::HTTP_STATUS_CODE] = $retval;
}
}
$integration->setStatusCodeFn
);

// Create a trace span for every template rendered
Expand All @@ -123,16 +92,7 @@ function ($This, $scope, $args, $retval) use ($integration) {
'CakeRoute',
'parse',
null,
function ($app, $appClass, $args, $retval) use ($integration) {
if (!$retval) {
return;
}

$rootSpan = \DDTrace\root_span();
if ($rootSpan !== null) {
$rootSpan->meta[Tag::HTTP_ROUTE] = $app->template;
}
}
$integration->parseRouteFn
);

return Integration::LOADED;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,29 +17,8 @@ class CakePHPIntegrationLoader
{
public function load($integration)
{
$setRootSpanInfoFn = function () use ($integration) {
$rootSpan = \DDTrace\root_span();
if ($rootSpan === null) {
return;
}

$integration->appName = \ddtrace_config_app_name(CakePHPIntegration::NAME);
$integration->addTraceAnalyticsIfEnabled($rootSpan);
$rootSpan->service = $integration->appName;
if ('cli' === PHP_SAPI) {
$rootSpan->name = 'cakephp.console';
$rootSpan->resource = !empty($_SERVER['argv'][1])
? 'cake_console ' . $_SERVER['argv'][1]
: 'cake_console';
} else {
$rootSpan->name = 'cakephp.request';
$rootSpan->meta[Tag::SPAN_KIND] = 'server';
}
$rootSpan->meta[Tag::COMPONENT] = CakePHPIntegration::NAME;
};

\DDTrace\hook_method('App\Application', '__construct', $setRootSpanInfoFn);
\DDTrace\hook_method('Cake\Http\Server', '__construct', $setRootSpanInfoFn);
\DDTrace\hook_method('App\Application', '__construct', $integration->setRootSpanInfoFn);
\DDTrace\hook_method('Cake\Http\Server', '__construct', $integration->setRootSpanInfoFn);

\DDTrace\trace_method(
'Cake\Controller\Controller',
Expand Down Expand Up @@ -79,23 +58,14 @@ function (SpanData $span) use ($integration) {
\DDTrace\hook_method(
'Cake\Error\Middleware\ErrorHandlerMiddleware',
'handleException',
function ($This, $scope, $args) use ($integration) {
$rootSpan = \DDTrace\root_span();
if ($rootSpan !== null) {
$integration->setError($rootSpan, $args[0]);
}
});
$integration->handleExceptionFn
);

\DDTrace\hook_method(
'Cake\Http\Response',
'getStatusCode',
null,
function ($This, $scope, $args, $retval) use ($integration) {
$rootSpan = \DDTrace\root_span();
if ($rootSpan) {
$rootSpan->meta[Tag::HTTP_STATUS_CODE] = $retval;
}
}
$integration->setStatusCodeFn
);

// Create a trace span for every template rendered
Expand Down Expand Up @@ -147,16 +117,7 @@ function (HookData $hook) use ($renderHook) {
'Cake\Routing\Route\Route',
'parseRequest',
null,
function ($app, $appClass, $args, $retval) use ($integration) {
if (!$retval) {
return;
}

$rootSpan = \DDTrace\root_span();
if ($rootSpan) {
$rootSpan->meta[Tag::HTTP_ROUTE] = $app->template;
}
}
$integration->parseRouteFn
);

return Integration::LOADED;
Expand Down

0 comments on commit 1f3d417

Please sign in to comment.