-
Notifications
You must be signed in to change notification settings - Fork 174
Expand file tree
/
Copy pathCakePHPIntegration.php
More file actions
84 lines (71 loc) · 2.66 KB
/
CakePHPIntegration.php
File metadata and controls
84 lines (71 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
namespace DDTrace\Integrations\CakePHP;
use DDTrace\Integrations\CakePHP\V2\CakePHPIntegrationLoader as CakePHPIntegrationLoaderV2;
use DDTrace\Integrations\CakePHP\V3\CakePHPIntegrationLoader as CakePHPIntegrationLoaderV3;
use DDTrace\Integrations\Integration;
use DDTrace\Tag;
class CakePHPIntegration extends Integration
{
const NAME = 'cakephp';
public $appName;
public $rootSpan;
public $setRootSpanInfoFn;
public $handleExceptionFn;
public $setStatusCodeFn;
public $parseRouteFn;
/**
* @return string The integration name.
*/
public function getName()
{
return self::NAME;
}
public function init(): int
{
$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();
return $loader->load($integration);
}
}