Skip to content

Commit dcd2715

Browse files
PROFeNoMbwoebi
authored andcommitted
style: refactor common logic
1 parent 5b8fd0e commit dcd2715

File tree

3 files changed

+62
-92
lines changed

3 files changed

+62
-92
lines changed

src/DDTrace/Integrations/CakePHP/CakePHPIntegration.php

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,18 @@
55
use DDTrace\Integrations\CakePHP\V2\CakePHPIntegrationLoader as CakePHPIntegrationLoaderV2;
66
use DDTrace\Integrations\CakePHP\V3\CakePHPIntegrationLoader as CakePHPIntegrationLoaderV3;
77
use DDTrace\Integrations\Integration;
8+
use DDTrace\Tag;
89

910
class CakePHPIntegration extends Integration
1011
{
1112
const NAME = 'cakephp';
1213

1314
public $appName;
1415
public $rootSpan;
16+
public $setRootSpanInfoFn;
17+
public $handleExceptionFn;
18+
public $setStatusCodeFn;
19+
public $parseRouteFn;
1520

1621
/**
1722
* @return string The integration name.
@@ -25,6 +30,52 @@ public function init(): int
2530
{
2631
$integration = $this;
2732

33+
$integration->setRootSpanInfoFn = function () use ($integration) {
34+
$rootSpan = \DDTrace\root_span();
35+
if ($rootSpan === null) {
36+
return;
37+
}
38+
39+
$integration->appName = \ddtrace_config_app_name(CakePHPIntegration::NAME);
40+
$integration->addTraceAnalyticsIfEnabled($rootSpan);
41+
$rootSpan->service = $integration->appName;
42+
if ('cli' === PHP_SAPI) {
43+
$rootSpan->name = 'cakephp.console';
44+
$rootSpan->resource = !empty($_SERVER['argv'][1])
45+
? 'cake_console ' . $_SERVER['argv'][1]
46+
: 'cake_console';
47+
} else {
48+
$rootSpan->name = 'cakephp.request';
49+
$rootSpan->meta[Tag::SPAN_KIND] = 'server';
50+
}
51+
$rootSpan->meta[Tag::COMPONENT] = CakePHPIntegration::NAME;
52+
};
53+
54+
$integration->handleExceptionFn = function ($This, $scope, $args) use ($integration) {
55+
$rootSpan = \DDTrace\root_span();
56+
if ($rootSpan !== null) {
57+
$integration->setError($rootSpan, $args[0]);
58+
}
59+
};
60+
61+
$integration->setStatusCodeFn = function ($This, $scope, $args, $retval) use ($integration) {
62+
$rootSpan = \DDTrace\root_span();
63+
if ($rootSpan) {
64+
$rootSpan->meta[Tag::HTTP_STATUS_CODE] = $retval;
65+
}
66+
};
67+
68+
$integration->parseRouteFn = function ($app, $appClass, $args, $retval) use ($integration) {
69+
if (!$retval) {
70+
return;
71+
}
72+
73+
$rootSpan = \DDTrace\root_span();
74+
if ($rootSpan !== null) {
75+
$rootSpan->meta[Tag::HTTP_ROUTE] = $app->template;
76+
}
77+
};
78+
2879
$loader = class_exists('Cake\Http\Server') // Only exists in V3+
2980
? new CakePHPIntegrationLoaderV3()
3081
: new CakePHPIntegrationLoaderV2();

src/DDTrace/Integrations/CakePHP/V2/CakePHPIntegrationLoader.php

Lines changed: 5 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use DDTrace\Type;
1111
use DDTrace\Util\Normalizer;
1212
use Router;
13-
use function DDTrace\hook_method;
1413

1514
class CakePHPIntegrationLoader
1615
{
@@ -21,29 +20,8 @@ public function load($integration)
2120
return Integration::NOT_AVAILABLE;
2221
}
2322

24-
$setRootSpanInfoFn = function () use ($integration) {
25-
$rootSpan = \DDTrace\root_span();
26-
if ($rootSpan === null) {
27-
return;
28-
}
29-
30-
$integration->appName = \ddtrace_config_app_name(CakePHPIntegration::NAME);
31-
$integration->addTraceAnalyticsIfEnabled($rootSpan);
32-
$rootSpan->service = $integration->appName;
33-
if ('cli' === PHP_SAPI) {
34-
$rootSpan->name = 'cakephp.console';
35-
$rootSpan->resource = !empty($_SERVER['argv'][1])
36-
? 'cake_console ' . $_SERVER['argv'][1]
37-
: 'cake_console';
38-
} else {
39-
$rootSpan->name = 'cakephp.request';
40-
$rootSpan->meta[Tag::SPAN_KIND] = 'server';
41-
}
42-
$rootSpan->meta[Tag::COMPONENT] = CakePHPIntegration::NAME;
43-
};
44-
45-
\DDTrace\hook_method('App', 'init', $setRootSpanInfoFn);
46-
\DDTrace\hook_method('Dispatcher', '__construct', $setRootSpanInfoFn);
23+
\DDTrace\hook_method('App', 'init', $integration->setRootSpanInfoFn);
24+
\DDTrace\hook_method('Dispatcher', '__construct', $integration->setRootSpanInfoFn);
4725

4826
\DDTrace\trace_method(
4927
'Controller',
@@ -88,24 +66,14 @@ function (SpanData $span, array $args) use ($integration) {
8866
\DDTrace\hook_method(
8967
'ExceptionRenderer',
9068
'__construct',
91-
function ($This, $scope, $args) use ($integration) {
92-
$rootSpan = \DDTrace\root_span();
93-
if ($rootSpan !== null) {
94-
$integration->setError($rootSpan, $args[0]);
95-
}
96-
}
69+
$integration->handleExceptionFn
9770
);
9871

9972
\DDTrace\hook_method(
10073
'CakeResponse',
10174
'statusCode',
10275
null,
103-
function ($This, $scope, $args, $retval) use ($integration) {
104-
$rootSpan = \DDTrace\root_span();
105-
if ($rootSpan !== null) {
106-
$rootSpan->meta[Tag::HTTP_STATUS_CODE] = $retval;
107-
}
108-
}
76+
$integration->setStatusCodeFn
10977
);
11078

11179
// Create a trace span for every template rendered
@@ -123,16 +91,7 @@ function ($This, $scope, $args, $retval) use ($integration) {
12391
'CakeRoute',
12492
'parse',
12593
null,
126-
function ($app, $appClass, $args, $retval) use ($integration) {
127-
if (!$retval) {
128-
return;
129-
}
130-
131-
$rootSpan = \DDTrace\root_span();
132-
if ($rootSpan !== null) {
133-
$rootSpan->meta[Tag::HTTP_ROUTE] = $app->template;
134-
}
135-
}
94+
$integration->parseRouteFn
13695
);
13796

13897
return Integration::LOADED;

src/DDTrace/Integrations/CakePHP/V3/CakePHPIntegrationLoader.php

Lines changed: 6 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -11,35 +11,13 @@
1111
use DDTrace\Tag;
1212
use DDTrace\Type;
1313
use DDTrace\Util\Normalizer;
14-
use function DDTrace\hook_method;
1514

1615
class CakePHPIntegrationLoader
1716
{
1817
public function load($integration)
1918
{
20-
$setRootSpanInfoFn = function () use ($integration) {
21-
$rootSpan = \DDTrace\root_span();
22-
if ($rootSpan === null) {
23-
return;
24-
}
25-
26-
$integration->appName = \ddtrace_config_app_name(CakePHPIntegration::NAME);
27-
$integration->addTraceAnalyticsIfEnabled($rootSpan);
28-
$rootSpan->service = $integration->appName;
29-
if ('cli' === PHP_SAPI) {
30-
$rootSpan->name = 'cakephp.console';
31-
$rootSpan->resource = !empty($_SERVER['argv'][1])
32-
? 'cake_console ' . $_SERVER['argv'][1]
33-
: 'cake_console';
34-
} else {
35-
$rootSpan->name = 'cakephp.request';
36-
$rootSpan->meta[Tag::SPAN_KIND] = 'server';
37-
}
38-
$rootSpan->meta[Tag::COMPONENT] = CakePHPIntegration::NAME;
39-
};
40-
41-
\DDTrace\hook_method('App\Application', '__construct', $setRootSpanInfoFn);
42-
\DDTrace\hook_method('Cake\Http\Server', '__construct', $setRootSpanInfoFn);
19+
\DDTrace\hook_method('App\Application', '__construct', $integration->setRootSpanInfoFn);
20+
\DDTrace\hook_method('Cake\Http\Server', '__construct', $integration->setRootSpanInfoFn);
4321

4422
\DDTrace\trace_method(
4523
'Cake\Controller\Controller',
@@ -79,23 +57,14 @@ function (SpanData $span) use ($integration) {
7957
\DDTrace\hook_method(
8058
'Cake\Error\Middleware\ErrorHandlerMiddleware',
8159
'handleException',
82-
function ($This, $scope, $args) use ($integration) {
83-
$rootSpan = \DDTrace\root_span();
84-
if ($rootSpan !== null) {
85-
$integration->setError($rootSpan, $args[0]);
86-
}
87-
});
60+
$integration->handleExceptionFn
61+
);
8862

8963
\DDTrace\hook_method(
9064
'Cake\Http\Response',
9165
'getStatusCode',
9266
null,
93-
function ($This, $scope, $args, $retval) use ($integration) {
94-
$rootSpan = \DDTrace\root_span();
95-
if ($rootSpan) {
96-
$rootSpan->meta[Tag::HTTP_STATUS_CODE] = $retval;
97-
}
98-
}
67+
$integration->setStatusCodeFn
9968
);
10069

10170
// Create a trace span for every template rendered
@@ -147,16 +116,7 @@ function (HookData $hook) use ($renderHook) {
147116
'Cake\Routing\Route\Route',
148117
'parseRequest',
149118
null,
150-
function ($app, $appClass, $args, $retval) use ($integration) {
151-
if (!$retval) {
152-
return;
153-
}
154-
155-
$rootSpan = \DDTrace\root_span();
156-
if ($rootSpan) {
157-
$rootSpan->meta[Tag::HTTP_ROUTE] = $app->template;
158-
}
159-
}
119+
$integration->parseRouteFn
160120
);
161121

162122
return Integration::LOADED;

0 commit comments

Comments
 (0)