Skip to content

Commit 1ba04c2

Browse files
Laravel: convert more hooks.
1 parent 98af07f commit 1ba04c2

File tree

8 files changed

+170
-129
lines changed

8 files changed

+170
-129
lines changed

src/Instrumentation/Laravel/src/Hooks/Illuminate/Console/Command.php

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,40 @@
55
namespace OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\Illuminate\Console;
66

77
use Illuminate\Console\Command as IlluminateCommand;
8+
use OpenTelemetry\API\Instrumentation\AutoInstrumentation\HookManager;
9+
use OpenTelemetry\API\Logs\LoggerInterface;
10+
use OpenTelemetry\API\Metrics\MeterInterface;
811
use OpenTelemetry\API\Trace\Span;
12+
use OpenTelemetry\API\Trace\TracerInterface;
913
use OpenTelemetry\Context\Context;
10-
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\LaravelHook;
11-
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\LaravelHookTrait;
14+
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\Hook;
1215
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\PostHookTrait;
13-
use function OpenTelemetry\Instrumentation\hook;
16+
use OpenTelemetry\Contrib\Instrumentation\Laravel\LaravelConfiguration;
1417
use OpenTelemetry\SemConv\TraceAttributes;
1518
use Throwable;
1619

17-
class Command implements LaravelHook
20+
class Command implements Hook
1821
{
19-
use LaravelHookTrait;
2022
use PostHookTrait;
2123

22-
public function instrument(): void
23-
{
24-
$this->hookExecute();
24+
public function instrument(
25+
HookManager $hookManager,
26+
LaravelConfiguration $configuration,
27+
LoggerInterface $logger,
28+
MeterInterface $meter,
29+
TracerInterface $tracer,
30+
): void {
31+
$this->hookExecute($hookManager, $tracer);
2532
}
2633

27-
protected function hookExecute(): bool
34+
protected function hookExecute(HookManager $hookManager, TracerInterface $tracer): void
2835
{
29-
return hook(
36+
$hookManager->hook(
3037
IlluminateCommand::class,
3138
'execute',
32-
pre: function (IlluminateCommand $command, array $params, string $class, string $function, ?string $filename, ?int $lineno) {
39+
preHook: function (IlluminateCommand $command, array $params, string $class, string $function, ?string $filename, ?int $lineno) use ($tracer) {
3340
/** @psalm-suppress ArgumentTypeCoercion */
34-
$builder = $this->instrumentation
35-
->tracer()
41+
$builder = $tracer
3642
->spanBuilder(sprintf('Command %s', $command->getName() ?: 'unknown'))
3743
->setAttribute(TraceAttributes::CODE_FUNCTION, $function)
3844
->setAttribute(TraceAttributes::CODE_NAMESPACE, $class)
@@ -45,7 +51,7 @@ protected function hookExecute(): bool
4551

4652
return $params;
4753
},
48-
post: function (IlluminateCommand $command, array $params, ?int $exitCode, ?Throwable $exception) {
54+
postHook: function (IlluminateCommand $command, array $params, ?int $exitCode, ?Throwable $exception) {
4955
$scope = Context::storage()->scope();
5056
if (!$scope) {
5157
return;

src/Instrumentation/Laravel/src/Hooks/Illuminate/Contracts/Console/Kernel.php

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,47 @@
66

77
use Illuminate\Console\Command;
88
use Illuminate\Contracts\Console\Kernel as KernelContract;
9+
use OpenTelemetry\API\Instrumentation\AutoInstrumentation\HookManager;
10+
use OpenTelemetry\API\Logs\LoggerInterface;
11+
use OpenTelemetry\API\Metrics\MeterInterface;
912
use OpenTelemetry\API\Trace\Span;
1013
use OpenTelemetry\API\Trace\SpanKind;
1114
use OpenTelemetry\API\Trace\StatusCode;
15+
use OpenTelemetry\API\Trace\TracerInterface;
1216
use OpenTelemetry\Context\Context;
17+
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\Hook;
1318
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\Illuminate\Queue\AttributesBuilder;
14-
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\LaravelHook;
15-
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\LaravelHookTrait;
1619
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\PostHookTrait;
20+
use OpenTelemetry\Contrib\Instrumentation\Laravel\LaravelConfiguration;
1721
use OpenTelemetry\Contrib\Instrumentation\Laravel\LaravelInstrumentation;
18-
use function OpenTelemetry\Instrumentation\hook;
1922
use OpenTelemetry\SemConv\TraceAttributes;
2023
use Throwable;
2124

22-
class Kernel implements LaravelHook
25+
class Kernel implements Hook
2326
{
2427
use AttributesBuilder;
25-
use LaravelHookTrait;
2628
use PostHookTrait;
2729

28-
public function instrument(): void
29-
{
30+
public function instrument(
31+
HookManager $hookManager,
32+
LaravelConfiguration $configuration,
33+
LoggerInterface $logger,
34+
MeterInterface $meter,
35+
TracerInterface $tracer,
36+
): void {
3037
if (LaravelInstrumentation::shouldTraceCli()) {
31-
$this->hookHandle();
38+
$this->hookHandle($hookManager, $tracer);
3239
}
3340
}
3441

35-
private function hookHandle(): bool
42+
private function hookHandle(HookManager $hookManager, TracerInterface $tracer): void
3643
{
37-
return hook(
44+
$hookManager->hook(
3845
KernelContract::class,
3946
'handle',
40-
pre: function (KernelContract $kernel, array $params, string $class, string $function, ?string $filename, ?int $lineno) {
47+
preHook: function (KernelContract $kernel, array $params, string $class, string $function, ?string $filename, ?int $lineno) use ($tracer) {
4148
/** @psalm-suppress ArgumentTypeCoercion */
42-
$builder = $this->instrumentation
43-
->tracer()
49+
$builder = $tracer
4450
->spanBuilder('Artisan handler')
4551
->setSpanKind(SpanKind::KIND_PRODUCER)
4652
->setAttribute(TraceAttributes::CODE_FUNCTION, $function)
@@ -54,7 +60,7 @@ private function hookHandle(): bool
5460

5561
return $params;
5662
},
57-
post: function (KernelContract $kernel, array $params, ?int $exitCode, ?Throwable $exception) {
63+
postHook: function (KernelContract $kernel, array $params, ?int $exitCode, ?Throwable $exception) {
5864
$scope = Context::storage()->scope();
5965
if (!$scope) {
6066
return;

src/Instrumentation/Laravel/src/Hooks/Illuminate/Contracts/Http/Kernel.php

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,41 +8,47 @@
88
use Illuminate\Http\Request;
99
use Illuminate\Routing\Route;
1010
use OpenTelemetry\API\Globals;
11+
use OpenTelemetry\API\Instrumentation\AutoInstrumentation\HookManager;
12+
use OpenTelemetry\API\Logs\LoggerInterface;
13+
use OpenTelemetry\API\Metrics\MeterInterface;
1114
use OpenTelemetry\API\Trace\Span;
1215
use OpenTelemetry\API\Trace\SpanInterface;
1316
use OpenTelemetry\API\Trace\SpanKind;
1417
use OpenTelemetry\API\Trace\StatusCode;
18+
use OpenTelemetry\API\Trace\TracerInterface;
1519
use OpenTelemetry\Context\Context;
16-
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\LaravelHook;
17-
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\LaravelHookTrait;
20+
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\Hook;
1821
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\PostHookTrait;
22+
use OpenTelemetry\Contrib\Instrumentation\Laravel\LaravelConfiguration;
1923
use OpenTelemetry\Contrib\Instrumentation\Laravel\Propagators\HeadersPropagator;
2024
use OpenTelemetry\Contrib\Instrumentation\Laravel\Propagators\ResponsePropagationSetter;
21-
use function OpenTelemetry\Instrumentation\hook;
2225
use OpenTelemetry\SemConv\TraceAttributes;
2326
use Symfony\Component\HttpFoundation\Response;
2427
use Throwable;
2528

26-
class Kernel implements LaravelHook
29+
class Kernel implements Hook
2730
{
28-
use LaravelHookTrait;
2931
use PostHookTrait;
3032

31-
public function instrument(): void
32-
{
33-
$this->hookHandle();
33+
public function instrument(
34+
HookManager $hookManager,
35+
LaravelConfiguration $configuration,
36+
LoggerInterface $logger,
37+
MeterInterface $meter,
38+
TracerInterface $tracer,
39+
): void {
40+
$this->hookHandle($hookManager, $tracer);
3441
}
3542

36-
protected function hookHandle(): bool
43+
protected function hookHandle(HookManager $hookManager, TracerInterface $tracer): void
3744
{
38-
return hook(
45+
$hookManager->hook(
3946
KernelContract::class,
4047
'handle',
41-
pre: function (KernelContract $kernel, array $params, string $class, string $function, ?string $filename, ?int $lineno) {
48+
preHook: function (KernelContract $kernel, array $params, string $class, string $function, ?string $filename, ?int $lineno) use ($tracer) {
4249
$request = ($params[0] instanceof Request) ? $params[0] : null;
4350
/** @psalm-suppress ArgumentTypeCoercion */
44-
$builder = $this->instrumentation
45-
->tracer()
51+
$builder = $tracer
4652
->spanBuilder(sprintf('%s', $request?->method() ?? 'unknown'))
4753
->setSpanKind(SpanKind::KIND_SERVER)
4854
->setAttribute(TraceAttributes::CODE_FUNCTION, $function)
@@ -75,7 +81,7 @@ protected function hookHandle(): bool
7581

7682
return [$request];
7783
},
78-
post: function (KernelContract $kernel, array $params, ?Response $response, ?Throwable $exception) {
84+
postHook: function (KernelContract $kernel, array $params, ?Response $response, ?Throwable $exception) {
7985
$scope = Context::storage()->scope();
8086
if (!$scope) {
8187
return;

src/Instrumentation/Laravel/src/Hooks/Illuminate/Contracts/Queue/Queue.php

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,43 @@
77
use DateInterval;
88
use DateTimeInterface;
99
use Illuminate\Contracts\Queue\Queue as QueueContract;
10+
use OpenTelemetry\API\Instrumentation\AutoInstrumentation\HookManager;
11+
use OpenTelemetry\API\Logs\LoggerInterface;
12+
use OpenTelemetry\API\Metrics\MeterInterface;
1013
use OpenTelemetry\API\Trace\SpanKind;
14+
use OpenTelemetry\API\Trace\TracerInterface;
1115
use OpenTelemetry\Context\Context;
1216
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\Illuminate\Queue\AttributesBuilder;
13-
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\LaravelHook;
14-
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\LaravelHookTrait;
17+
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\Hook;
1518
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\PostHookTrait;
16-
use function OpenTelemetry\Instrumentation\hook;
19+
use OpenTelemetry\Contrib\Instrumentation\Laravel\LaravelConfiguration;
1720
use OpenTelemetry\SemConv\TraceAttributes;
1821
use OpenTelemetry\SemConv\TraceAttributeValues;
1922
use Throwable;
2023

21-
class Queue implements LaravelHook
24+
class Queue implements Hook
2225
{
2326
use AttributesBuilder;
24-
use LaravelHookTrait;
2527
use PostHookTrait;
2628

27-
public function instrument(): void
28-
{
29-
$this->hookBulk();
30-
$this->hookLater();
31-
$this->hookPushRaw();
29+
public function instrument(
30+
HookManager $hookManager,
31+
LaravelConfiguration $configuration,
32+
LoggerInterface $logger,
33+
MeterInterface $meter,
34+
TracerInterface $tracer,
35+
): void {
36+
$this->hookBulk($hookManager, $tracer);
37+
$this->hookLater($hookManager, $tracer);
38+
$this->hookPushRaw($hookManager, $tracer);
3239
}
3340

34-
protected function hookBulk(): bool
41+
protected function hookBulk(HookManager $hookManager, TracerInterface $tracer): void
3542
{
36-
return hook(
43+
$hookManager->hook(
3744
QueueContract::class,
3845
'bulk',
39-
pre: function (QueueContract $queue, array $params, string $class, string $function, ?string $filename, ?int $lineno) {
46+
preHook: function (QueueContract $queue, array $params, string $class, string $function, ?string $filename, ?int $lineno) use ($tracer) {
4047
$attributes = array_merge([
4148
TraceAttributes::CODE_FUNCTION => $function,
4249
TraceAttributes::CODE_NAMESPACE => $class,
@@ -46,8 +53,7 @@ protected function hookBulk(): bool
4653
], $this->contextualMessageSystemAttributes($queue, []));
4754

4855
/** @psalm-suppress ArgumentTypeCoercion */
49-
$span = $this->instrumentation
50-
->tracer()
56+
$span = $tracer
5157
->spanBuilder(vsprintf('%s %s', [
5258
/** @phan-suppress-next-line PhanUndeclaredMethod */
5359
method_exists($queue, 'getQueue') ? $queue->getQueue($params[2] ?? null) : $queue->getConnectionName(),
@@ -61,18 +67,18 @@ protected function hookBulk(): bool
6167

6268
return $params;
6369
},
64-
post: function (QueueContract $queue, array $params, $returnValue, ?Throwable $exception) {
70+
postHook: function (QueueContract $queue, array $params, $returnValue, ?Throwable $exception) {
6571
$this->endSpan($exception);
6672
},
6773
);
6874
}
6975

70-
protected function hookLater(): bool
76+
protected function hookLater(HookManager $hookManager, TracerInterface $tracer): void
7177
{
72-
return hook(
78+
$hookManager->hook(
7379
QueueContract::class,
7480
'later',
75-
pre: function (QueueContract $queue, array $params, string $class, string $function, ?string $filename, ?int $lineno) {
81+
preHook: function (QueueContract $queue, array $params, string $class, string $function, ?string $filename, ?int $lineno) use ($tracer) {
7682
$estimateDeliveryTimestamp = match (true) {
7783
is_int($params[0]) => (new \DateTimeImmutable())->add(new DateInterval("PT{$params[0]}S"))->getTimestamp(),
7884
$params[0] instanceof DateInterval => (new \DateTimeImmutable())->add($params[0])->getTimestamp(),
@@ -89,8 +95,7 @@ protected function hookLater(): bool
8995
];
9096

9197
/** @psalm-suppress ArgumentTypeCoercion */
92-
$span = $this->instrumentation
93-
->tracer()
98+
$span = $tracer
9499
->spanBuilder(vsprintf('%s %s', [
95100
/** @phan-suppress-next-line PhanUndeclaredMethod */
96101
method_exists($queue, 'getQueue') ? $queue->getQueue($params[2] ?? null) : $queue->getConnectionName(),
@@ -104,25 +109,24 @@ protected function hookLater(): bool
104109

105110
return $params;
106111
},
107-
post: function (QueueContract $queue, array $params, $returnValue, ?Throwable $exception) {
112+
postHook: function (QueueContract $queue, array $params, $returnValue, ?Throwable $exception) {
108113
$this->endSpan($exception);
109114
},
110115
);
111116
}
112117

113-
protected function hookPushRaw(): bool
118+
protected function hookPushRaw(HookManager $hookManager, TracerInterface $tracer): void
114119
{
115-
return hook(
120+
$hookManager->hook(
116121
QueueContract::class,
117122
'pushRaw',
118-
pre: function (QueueContract $queue, array $params, string $class, string $function, ?string $filename, ?int $lineno) {
123+
preHook: function (QueueContract $queue, array $params, string $class, string $function, ?string $filename, ?int $lineno) use ($tracer) {
119124
/** @phan-suppress-next-line PhanParamTooFewUnpack */
120125
$attributes = $this->buildMessageAttributes($queue, ...$params);
121126

122127
$parent = Context::getCurrent();
123128
/** @psalm-suppress ArgumentTypeCoercion */
124-
$span = $this->instrumentation
125-
->tracer()
129+
$span = $tracer
126130
->spanBuilder(vsprintf('%s %s', [
127131
$attributes[TraceAttributes::MESSAGING_DESTINATION_NAME],
128132
TraceAttributeValues::MESSAGING_OPERATION_CREATE,
@@ -135,7 +139,7 @@ protected function hookPushRaw(): bool
135139

136140
return $params;
137141
},
138-
post: function (QueueContract $queue, array $params, $returnValue, ?Throwable $exception) {
142+
postHook: function (QueueContract $queue, array $params, $returnValue, ?Throwable $exception) {
139143
$this->endSpan($exception);
140144
},
141145
);

src/Instrumentation/Laravel/src/Hooks/Illuminate/Foundation/Console/ServeCommand.php

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,29 @@
55
namespace OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\Illuminate\Foundation\Console;
66

77
use Illuminate\Foundation\Console\ServeCommand as FoundationServeCommand;
8-
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\LaravelHook;
9-
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\LaravelHookTrait;
10-
use function OpenTelemetry\Instrumentation\hook;
8+
use OpenTelemetry\API\Instrumentation\AutoInstrumentation\HookManager;
9+
use OpenTelemetry\API\Logs\LoggerInterface;
10+
use OpenTelemetry\API\Metrics\MeterInterface;
11+
use OpenTelemetry\API\Trace\TracerInterface;
12+
use OpenTelemetry\Contrib\Instrumentation\Laravel\Hooks\Hook;
13+
use OpenTelemetry\Contrib\Instrumentation\Laravel\LaravelConfiguration;
1114

1215
/**
1316
* Instrument Laravel's local PHP development server.
1417
*/
15-
class ServeCommand implements LaravelHook
18+
class ServeCommand implements Hook
1619
{
17-
use LaravelHookTrait;
18-
19-
public function instrument(): void
20-
{
21-
hook(
20+
public function instrument(
21+
HookManager $hookManager,
22+
LaravelConfiguration $configuration,
23+
LoggerInterface $logger,
24+
MeterInterface $meter,
25+
TracerInterface $tracer,
26+
): void {
27+
$hookManager->hook(
2228
FoundationServeCommand::class,
2329
'handle',
24-
pre: static function (FoundationServeCommand $serveCommand, array $params, string $class, string $function, ?string $filename, ?int $lineno) {
30+
preHook: static function (FoundationServeCommand $serveCommand, array $params, string $class, string $function, ?string $filename, ?int $lineno) use ($tracer) {
2531
if (!property_exists(FoundationServeCommand::class, 'passthroughVariables')) {
2632
return;
2733
}

0 commit comments

Comments
 (0)