Skip to content

Commit 1bef669

Browse files
committed
Moved logic to SqlCommenter
1 parent 7e81de5 commit 1bef669

File tree

8 files changed

+154
-157
lines changed

8 files changed

+154
-157
lines changed

src/Instrumentation/MySqli/src/MySqliInstrumentation.php

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@
77
use mysqli;
88
use mysqli_stmt;
99
use OpenTelemetry\API\Behavior\LogsMessagesTrait;
10-
use OpenTelemetry\API\Globals;
1110
use OpenTelemetry\API\Instrumentation\CachedInstrumentation;
1211
use OpenTelemetry\API\Trace\Span;
1312
use OpenTelemetry\API\Trace\SpanInterface;
1413
use OpenTelemetry\API\Trace\SpanKind;
1514
use OpenTelemetry\API\Trace\StatusCode;
1615

1716
use OpenTelemetry\Context\Context;
18-
use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
1917
use function OpenTelemetry\Instrumentation\hook;
2018
use OpenTelemetry\SemConv\TraceAttributes;
2119
use OpenTelemetry\SemConv\Version;
@@ -45,10 +43,6 @@ public static function register(): void
4543
);
4644

4745
$tracker = new MySqliTracker();
48-
$contextPropagator = null;
49-
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\ContextPropagatorFactory')) {
50-
$contextPropagator = (new \OpenTelemetry\Contrib\SqlCommenter\ContextPropagatorFactory())->create();
51-
}
5246

5347
hook(
5448
null,
@@ -105,8 +99,8 @@ public static function register(): void
10599
hook(
106100
null,
107101
'mysqli_query',
108-
pre: static function (...$args) use ($contextPropagator, $instrumentation, $tracker) {
109-
return self::queryPreHook('mysqli_query', $contextPropagator, $instrumentation, $tracker, ...$args);
102+
pre: static function (...$args) use ($instrumentation, $tracker) {
103+
return self::queryPreHook('mysqli_query', $instrumentation, $tracker, ...$args);
110104
},
111105
post: static function (...$args) use ($instrumentation, $tracker) {
112106
self::queryPostHook($instrumentation, $tracker, ...$args);
@@ -115,8 +109,8 @@ public static function register(): void
115109
hook(
116110
mysqli::class,
117111
'query',
118-
pre: static function (...$args) use ($contextPropagator, $instrumentation, $tracker) {
119-
return self::queryPreHook('mysqli::query', $contextPropagator, $instrumentation, $tracker, ...$args);
112+
pre: static function (...$args) use ($instrumentation, $tracker) {
113+
return self::queryPreHook('mysqli::query', $instrumentation, $tracker, ...$args);
120114
},
121115
post: static function (...$args) use ($instrumentation, $tracker) {
122116
self::queryPostHook($instrumentation, $tracker, ...$args);
@@ -126,8 +120,8 @@ public static function register(): void
126120
hook(
127121
null,
128122
'mysqli_real_query',
129-
pre: static function (...$args) use ($contextPropagator, $instrumentation, $tracker) {
130-
return self::queryPreHook('mysqli_real_query', $contextPropagator, $instrumentation, $tracker, ...$args);
123+
pre: static function (...$args) use ($instrumentation, $tracker) {
124+
return self::queryPreHook('mysqli_real_query', $instrumentation, $tracker, ...$args);
131125
},
132126
post: static function (...$args) use ($instrumentation, $tracker) {
133127
self::queryPostHook($instrumentation, $tracker, ...$args);
@@ -136,8 +130,8 @@ public static function register(): void
136130
hook(
137131
mysqli::class,
138132
'real_query',
139-
pre: static function (...$args) use ($contextPropagator, $instrumentation, $tracker) {
140-
return self::queryPreHook('mysqli::real_query', $contextPropagator, $instrumentation, $tracker, ...$args);
133+
pre: static function (...$args) use ($instrumentation, $tracker) {
134+
return self::queryPreHook('mysqli::real_query', $instrumentation, $tracker, ...$args);
141135
},
142136
post: static function (...$args) use ($instrumentation, $tracker) {
143137
self::queryPostHook($instrumentation, $tracker, ...$args);
@@ -147,8 +141,8 @@ public static function register(): void
147141
hook(
148142
null,
149143
'mysqli_execute_query',
150-
pre: static function (...$args) use ($contextPropagator, $instrumentation, $tracker) {
151-
self::queryPreHook('mysqli_execute_query', $contextPropagator, $instrumentation, $tracker, ...$args);
144+
pre: static function (...$args) use ($instrumentation, $tracker) {
145+
self::queryPreHook('mysqli_execute_query', $instrumentation, $tracker, ...$args);
152146
},
153147
post: static function (...$args) use ($instrumentation, $tracker) {
154148
self::queryPostHook($instrumentation, $tracker, ...$args);
@@ -157,8 +151,8 @@ public static function register(): void
157151
hook(
158152
mysqli::class,
159153
'execute_query',
160-
pre: static function (...$args) use ($contextPropagator, $instrumentation, $tracker) {
161-
self::queryPreHook('mysqli::execute_query', $contextPropagator, $instrumentation, $tracker, ...$args);
154+
pre: static function (...$args) use ($instrumentation, $tracker) {
155+
self::queryPreHook('mysqli::execute_query', $instrumentation, $tracker, ...$args);
162156
},
163157
post: static function (...$args) use ($instrumentation, $tracker) {
164158
self::queryPostHook($instrumentation, $tracker, ...$args);
@@ -448,7 +442,7 @@ private static function constructPostHook(int $paramsOffset, CachedInstrumentati
448442
}
449443

450444
/** @param non-empty-string $spanName */
451-
private static function queryPreHook(string $spanName, ?TextMapPropagatorInterface $contextPropagator, CachedInstrumentation $instrumentation, MySqliTracker $tracker, $obj, array $params, ?string $class, string $function, ?string $filename, ?int $lineno): array
445+
private static function queryPreHook(string $spanName, CachedInstrumentation $instrumentation, MySqliTracker $tracker, $obj, array $params, ?string $class, string $function, ?string $filename, ?int $lineno): array
452446
{
453447
$span = self::startSpan($spanName, $instrumentation, $class, $function, $filename, $lineno, []);
454448
$mysqli = $obj ? $obj : $params[0];
@@ -465,21 +459,17 @@ private static function queryPreHook(string $spanName, ?TextMapPropagatorInterfa
465459
self::addTransactionLink($tracker, $span, $mysqli);
466460

467461
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\SqlCommenter') && $query !== self::UNDEFINED) {
468-
$comments = [];
469-
if ($contextPropagator !== null) {
470-
$contextPropagator->inject($comments);
471-
} else {
472-
Globals::propagator()->inject($comments);
473-
}
474-
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\SqlCommenter')) {
475-
$query = \OpenTelemetry\Contrib\SqlCommenter\SqlCommenter::inject($query, $comments);
476-
}
477-
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\ContextPropagation') && \OpenTelemetry\Contrib\SqlCommenter\ContextPropagation::isAttributeEnabled()) {
462+
/**
463+
* @phan-suppress-next-line PhanUndeclaredClassMethod
464+
* @psalm-suppress UndefinedClass
465+
*/
466+
$commenter = \OpenTelemetry\Contrib\SqlCommenter\SqlCommenter::getInstance();
467+
$query = $commenter->inject($query);
468+
if ($commenter->isAttributeEnabled()) {
478469
$span->setAttributes([
479470
TraceAttributes::DB_QUERY_TEXT => (string) $query,
480471
]);
481472
}
482-
483473
if ($obj) {
484474
return [
485475
0 => $query,

src/Instrumentation/PDO/src/PDOInstrumentation.php

Lines changed: 30 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
namespace OpenTelemetry\Contrib\Instrumentation\PDO;
66

7-
use OpenTelemetry\API\Globals;
87
use OpenTelemetry\API\Instrumentation\CachedInstrumentation;
98
use OpenTelemetry\API\Trace\Span;
109
use OpenTelemetry\API\Trace\SpanBuilderInterface;
@@ -34,10 +33,6 @@ public static function register(): void
3433
Version::VERSION_1_36_0->url(),
3534
);
3635
$pdoTracker = new PDOTracker();
37-
$contextPropagator = null;
38-
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\ContextPropagatorFactory')) {
39-
$contextPropagator = (new \OpenTelemetry\Contrib\SqlCommenter\ContextPropagatorFactory())->create();
40-
}
4136

4237
// Hook for the new PDO::connect static method
4338
if (method_exists(PDO::class, 'connect')) {
@@ -115,16 +110,16 @@ public static function register(): void
115110
hook(
116111
PDO::class,
117112
'query',
118-
pre: static function (PDO $pdo, array $params, string $class, string $function, ?string $filename, ?int $lineno) use ($contextPropagator, $pdoTracker, $instrumentation) {
113+
pre: static function (PDO $pdo, array $params, string $class, string $function, ?string $filename, ?int $lineno) use ($pdoTracker, $instrumentation) {
119114
/** @psalm-suppress ArgumentTypeCoercion */
120115
$builder = self::makeBuilder($instrumentation, 'PDO::query', $function, $class, $filename, $lineno)
121116
->setSpanKind(SpanKind::KIND_CLIENT);
122-
$sqlStatement = mb_convert_encoding($params[0] ?? self::UNDEFINED, 'UTF-8');
123-
if (!is_string($sqlStatement)) {
124-
$sqlStatement = self::UNDEFINED;
117+
$query = mb_convert_encoding($params[0] ?? self::UNDEFINED, 'UTF-8');
118+
if (!is_string($query)) {
119+
$query = self::UNDEFINED;
125120
}
126121
if ($class === PDO::class) {
127-
$builder->setAttribute(DbAttributes::DB_QUERY_TEXT, $sqlStatement);
122+
$builder->setAttribute(DbAttributes::DB_QUERY_TEXT, $query);
128123
}
129124
$parent = Context::getCurrent();
130125
$span = $builder->startSpan();
@@ -134,32 +129,26 @@ public static function register(): void
134129

135130
Context::storage()->attach($span->storeInContext($parent));
136131

137-
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\SqlCommenter') && $sqlStatement !== self::UNDEFINED) {
132+
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\SqlCommenter') && $query !== self::UNDEFINED) {
138133
if (array_key_exists(DbAttributes::DB_SYSTEM_NAME, $attributes)) {
139134
/** @psalm-suppress PossiblyInvalidCast */
140135
switch ((string) $attributes[DbAttributes::DB_SYSTEM_NAME]) {
141136
case 'postgresql':
142137
case 'mysql':
143-
$comments = [];
144-
if ($contextPropagator !== null) {
145-
// Propagator passed by user
146-
$contextPropagator->inject($comments);
147-
} else {
148-
// fallback to global propagator if user didn't pass one
149-
Globals::propagator()->inject($comments);
150-
}
151-
// Inject comments into SQL statement
152-
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\SqlCommenter')) {
153-
$sqlStatement = \OpenTelemetry\Contrib\SqlCommenter\SqlCommenter::inject($sqlStatement, $comments);
154-
}
155-
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\ContextPropagation') && \OpenTelemetry\Contrib\SqlCommenter\ContextPropagation::isAttributeEnabled()) {
138+
/**
139+
* @phan-suppress-next-line PhanUndeclaredClassMethod
140+
* @psalm-suppress UndefinedClass
141+
*/
142+
$commenter = \OpenTelemetry\Contrib\SqlCommenter\SqlCommenter::getInstance();
143+
$query = $commenter->inject($query);
144+
if ($commenter->isAttributeEnabled()) {
156145
$span->setAttributes([
157-
DbAttributes::DB_QUERY_TEXT => (string) $sqlStatement,
146+
DbAttributes::DB_QUERY_TEXT => (string) $query,
158147
]);
159148
}
160149

161150
return [
162-
0 => $sqlStatement,
151+
0 => $query,
163152
];
164153
default:
165154
// Do nothing, not a database we want to propagate
@@ -178,16 +167,16 @@ public static function register(): void
178167
hook(
179168
PDO::class,
180169
'exec',
181-
pre: static function (PDO $pdo, array $params, string $class, string $function, ?string $filename, ?int $lineno) use ($contextPropagator, $pdoTracker, $instrumentation) {
170+
pre: static function (PDO $pdo, array $params, string $class, string $function, ?string $filename, ?int $lineno) use ($pdoTracker, $instrumentation) {
182171
/** @psalm-suppress ArgumentTypeCoercion */
183172
$builder = self::makeBuilder($instrumentation, 'PDO::exec', $function, $class, $filename, $lineno)
184173
->setSpanKind(SpanKind::KIND_CLIENT);
185-
$sqlStatement = mb_convert_encoding($params[0] ?? self::UNDEFINED, 'UTF-8');
186-
if (!is_string($sqlStatement)) {
187-
$sqlStatement = self::UNDEFINED;
174+
$query = mb_convert_encoding($params[0] ?? self::UNDEFINED, 'UTF-8');
175+
if (!is_string($query)) {
176+
$query = self::UNDEFINED;
188177
}
189178
if ($class === PDO::class) {
190-
$builder->setAttribute(DbAttributes::DB_QUERY_TEXT, $sqlStatement);
179+
$builder->setAttribute(DbAttributes::DB_QUERY_TEXT, $query);
191180
}
192181
$parent = Context::getCurrent();
193182
$span = $builder->startSpan();
@@ -197,32 +186,26 @@ public static function register(): void
197186

198187
Context::storage()->attach($span->storeInContext($parent));
199188

200-
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\SqlCommenter') && $sqlStatement !== self::UNDEFINED) {
189+
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\SqlCommenter') && $query !== self::UNDEFINED) {
201190
if (array_key_exists(DbAttributes::DB_SYSTEM_NAME, $attributes)) {
202191
/** @psalm-suppress PossiblyInvalidCast */
203192
switch ((string) $attributes[DbAttributes::DB_SYSTEM_NAME]) {
204193
case 'postgresql':
205194
case 'mysql':
206-
$comments = [];
207-
if ($contextPropagator !== null) {
208-
// Propagator passed by user
209-
$contextPropagator->inject($comments);
210-
} else {
211-
// fallback to global propagator if user didn't pass one
212-
Globals::propagator()->inject($comments);
213-
}
214-
// Inject comments into SQL statement
215-
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\SqlCommenter')) {
216-
$sqlStatement = \OpenTelemetry\Contrib\SqlCommenter\SqlCommenter::inject($sqlStatement, $comments);
217-
}
218-
if (class_exists('OpenTelemetry\Contrib\SqlCommenter\ContextPropagation') && \OpenTelemetry\Contrib\SqlCommenter\ContextPropagation::isAttributeEnabled()) {
195+
/**
196+
* @phan-suppress-next-line PhanUndeclaredClassMethod
197+
* @psalm-suppress UndefinedClass
198+
*/
199+
$commenter = \OpenTelemetry\Contrib\SqlCommenter\SqlCommenter::getInstance();
200+
$query = $commenter->inject($query);
201+
if ($commenter->isAttributeEnabled()) {
219202
$span->setAttributes([
220-
DbAttributes::DB_QUERY_TEXT => (string) $sqlStatement,
203+
DbAttributes::DB_QUERY_TEXT => (string) $query,
221204
]);
222205
}
223206

224207
return [
225-
0 => $sqlStatement,
208+
0 => $query,
226209
];
227210
default:
228211
// Do nothing, not a database we want to propagate

0 commit comments

Comments
 (0)