From e22c8fc984a2f675aab27f1da8871b0f199c8110 Mon Sep 17 00:00:00 2001 From: Alexandre Choura Date: Fri, 23 Feb 2024 13:22:06 +0100 Subject: [PATCH 1/6] fix: Allow OTEL_PHP_DEBUG_SCOPES_DISABLED env var + use of null-coalescing operator --- src/Context/Context.php | 10 ++++++++-- tests/Unit/Context/ContextTest.php | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/Context/Context.php b/src/Context/Context.php index a12c2de60..aaa560008 100644 --- a/src/Context/Context.php +++ b/src/Context/Context.php @@ -91,9 +91,15 @@ public function activate(): ScopeInterface private static function debugScopesDisabled(): bool { - $disabled = $_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED'] ?? ini_get('OTEL_PHP_DEBUG_SCOPES_DISABLED'); + if (isset($_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED']) && filter_var($_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED'], FILTER_VALIDATE_BOOLEAN)) { + return true; + } elseif (($ini = \ini_get('OTEL_PHP_DEBUG_SCOPES_DISABLED')) && filter_var($ini, FILTER_VALIDATE_BOOLEAN)) { + return true; + } elseif (($env = \getenv('OTEL_PHP_DEBUG_SCOPES_DISABLED')) && filter_var($env, FILTER_VALIDATE_BOOLEAN)) { + return true; + } - return filter_var($disabled, FILTER_VALIDATE_BOOLEAN); + return false; } public function withContextValue(ImplicitContextKeyedInterface $value): ContextInterface diff --git a/tests/Unit/Context/ContextTest.php b/tests/Unit/Context/ContextTest.php index 213ff66c9..d45f9b58d 100644 --- a/tests/Unit/Context/ContextTest.php +++ b/tests/Unit/Context/ContextTest.php @@ -6,6 +6,7 @@ use OpenTelemetry\Context\Context; use OpenTelemetry\Context\ContextKeys; +use OpenTelemetry\Context\DebugScope; use OpenTelemetry\Context\ImplicitContextKeyedInterface; use PHPUnit\Framework\TestCase; use stdClass; @@ -177,4 +178,19 @@ public function test_attach_and_detach_set_current_ctx(): void $scope->detach(); } } + + public function test_debug_scopes_disabled_env_var(): void + { + \putenv('OTEL_PHP_DEBUG_SCOPES_DISABLED=1'); + + $context = Context::getRoot(); + + $scope = $context->activate(); + + try { + $this->assertNotInstanceOf(DebugScope::class, $scope); + } finally { + $scope->detach(); + } + } } From 5d1a7f5c7cb4ecd35f5f9cb622cb0a3ab351dff1 Mon Sep 17 00:00:00 2001 From: Alexandre Choura Date: Wed, 28 Feb 2024 09:15:12 +0100 Subject: [PATCH 2/6] refactor: Check order & env reset --- src/Context/Context.php | 4 ++-- tests/Unit/Context/ContextTest.php | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Context/Context.php b/src/Context/Context.php index aaa560008..d0bef6a85 100644 --- a/src/Context/Context.php +++ b/src/Context/Context.php @@ -93,10 +93,10 @@ private static function debugScopesDisabled(): bool { if (isset($_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED']) && filter_var($_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED'], FILTER_VALIDATE_BOOLEAN)) { return true; - } elseif (($ini = \ini_get('OTEL_PHP_DEBUG_SCOPES_DISABLED')) && filter_var($ini, FILTER_VALIDATE_BOOLEAN)) { - return true; } elseif (($env = \getenv('OTEL_PHP_DEBUG_SCOPES_DISABLED')) && filter_var($env, FILTER_VALIDATE_BOOLEAN)) { return true; + } elseif (($ini = \ini_get('OTEL_PHP_DEBUG_SCOPES_DISABLED')) && filter_var($ini, FILTER_VALIDATE_BOOLEAN)) { + return true; } return false; diff --git a/tests/Unit/Context/ContextTest.php b/tests/Unit/Context/ContextTest.php index d45f9b58d..f0be0fe8d 100644 --- a/tests/Unit/Context/ContextTest.php +++ b/tests/Unit/Context/ContextTest.php @@ -191,6 +191,7 @@ public function test_debug_scopes_disabled_env_var(): void $this->assertNotInstanceOf(DebugScope::class, $scope); } finally { $scope->detach(); + \putenv('OTEL_PHP_DEBUG_SCOPES_DISABLED'); } } } From 618f517762126e7bb2c5abbd0780fc258938b09e Mon Sep 17 00:00:00 2001 From: Alexandre Choura Date: Wed, 28 Feb 2024 09:37:31 +0100 Subject: [PATCH 3/6] refactor: Use class constant --- src/Context/Context.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Context/Context.php b/src/Context/Context.php index d0bef6a85..4836103cd 100644 --- a/src/Context/Context.php +++ b/src/Context/Context.php @@ -7,7 +7,6 @@ use function assert; use const FILTER_VALIDATE_BOOLEAN; use function filter_var; -use function ini_get; use function spl_object_id; /** @@ -15,6 +14,8 @@ */ final class Context implements ContextInterface { + private const OTEL_PHP_DEBUG_SCOPES_DISABLED = 'OTEL_PHP_DEBUG_SCOPES_DISABLED'; + /** @var ContextStorageInterface&ExecutionContextAwareInterface */ private static ContextStorageInterface $storage; @@ -91,11 +92,11 @@ public function activate(): ScopeInterface private static function debugScopesDisabled(): bool { - if (isset($_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED']) && filter_var($_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED'], FILTER_VALIDATE_BOOLEAN)) { + if (isset($_SERVER[self::OTEL_PHP_DEBUG_SCOPES_DISABLED]) && filter_var($_SERVER[self::OTEL_PHP_DEBUG_SCOPES_DISABLED], FILTER_VALIDATE_BOOLEAN)) { return true; - } elseif (($env = \getenv('OTEL_PHP_DEBUG_SCOPES_DISABLED')) && filter_var($env, FILTER_VALIDATE_BOOLEAN)) { + } elseif (($env = \getenv(self::OTEL_PHP_DEBUG_SCOPES_DISABLED)) && filter_var($env, FILTER_VALIDATE_BOOLEAN)) { return true; - } elseif (($ini = \ini_get('OTEL_PHP_DEBUG_SCOPES_DISABLED')) && filter_var($ini, FILTER_VALIDATE_BOOLEAN)) { + } elseif (($ini = \ini_get(self::OTEL_PHP_DEBUG_SCOPES_DISABLED)) && filter_var($ini, FILTER_VALIDATE_BOOLEAN)) { return true; } From 5c72145abb3f789445acf71bd3f1b8fa516acf2b Mon Sep 17 00:00:00 2001 From: Alexandre Choura Date: Thu, 29 Feb 2024 09:55:36 +0100 Subject: [PATCH 4/6] fix: Respect order and value if it is set --- src/Context/Context.php | 12 ++++------- tests/Unit/Context/ContextTest.php | 34 ++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/Context/Context.php b/src/Context/Context.php index 4836103cd..bd1a3bbf8 100644 --- a/src/Context/Context.php +++ b/src/Context/Context.php @@ -92,15 +92,11 @@ public function activate(): ScopeInterface private static function debugScopesDisabled(): bool { - if (isset($_SERVER[self::OTEL_PHP_DEBUG_SCOPES_DISABLED]) && filter_var($_SERVER[self::OTEL_PHP_DEBUG_SCOPES_DISABLED], FILTER_VALIDATE_BOOLEAN)) { - return true; - } elseif (($env = \getenv(self::OTEL_PHP_DEBUG_SCOPES_DISABLED)) && filter_var($env, FILTER_VALIDATE_BOOLEAN)) { - return true; - } elseif (($ini = \ini_get(self::OTEL_PHP_DEBUG_SCOPES_DISABLED)) && filter_var($ini, FILTER_VALIDATE_BOOLEAN)) { - return true; - } + return filter_var( + $_SERVER[self::OTEL_PHP_DEBUG_SCOPES_DISABLED] ?? \getenv(self::OTEL_PHP_DEBUG_SCOPES_DISABLED) ?: \ini_get(self::OTEL_PHP_DEBUG_SCOPES_DISABLED), + FILTER_VALIDATE_BOOLEAN + ); - return false; } public function withContextValue(ImplicitContextKeyedInterface $value): ContextInterface diff --git a/tests/Unit/Context/ContextTest.php b/tests/Unit/Context/ContextTest.php index f0be0fe8d..c1e910998 100644 --- a/tests/Unit/Context/ContextTest.php +++ b/tests/Unit/Context/ContextTest.php @@ -194,4 +194,38 @@ public function test_debug_scopes_disabled_env_var(): void \putenv('OTEL_PHP_DEBUG_SCOPES_DISABLED'); } } + + public function test_debug_scopes_disabled_server_var(): void + { + $_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED'] = '1'; + + $context = Context::getRoot(); + + $scope = $context->activate(); + + try { + $this->assertNotInstanceOf(DebugScope::class, $scope); + } finally { + $scope->detach(); + unset($_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED']); + } + } + + public function test_debug_scopes_disabled_order_server(): void + { + $_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED'] = '1'; + \putenv('OTEL_PHP_DEBUG_SCOPES_DISABLED=0'); + + $context = Context::getRoot(); + + $scope = $context->activate(); + + try { + $this->assertNotInstanceOf(DebugScope::class, $scope); + } finally { + $scope->detach(); + unset($_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED']); + \putenv('OTEL_PHP_DEBUG_SCOPES_DISABLED'); + } + } } From cfb6476451b0916286e1e5d5e0f1dbf37809c6c8 Mon Sep 17 00:00:00 2001 From: Alexandre Choura Date: Thu, 29 Feb 2024 14:41:38 +0100 Subject: [PATCH 5/6] style: Lint --- src/Context/Context.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Context/Context.php b/src/Context/Context.php index bd1a3bbf8..1a0b26226 100644 --- a/src/Context/Context.php +++ b/src/Context/Context.php @@ -96,7 +96,6 @@ private static function debugScopesDisabled(): bool $_SERVER[self::OTEL_PHP_DEBUG_SCOPES_DISABLED] ?? \getenv(self::OTEL_PHP_DEBUG_SCOPES_DISABLED) ?: \ini_get(self::OTEL_PHP_DEBUG_SCOPES_DISABLED), FILTER_VALIDATE_BOOLEAN ); - } public function withContextValue(ImplicitContextKeyedInterface $value): ContextInterface From b076c405fee755cfefd81fc0a4c77157796f8409 Mon Sep 17 00:00:00 2001 From: Alexandre Choura Date: Thu, 29 Feb 2024 14:44:13 +0100 Subject: [PATCH 6/6] tests: Falsey behavior --- tests/Unit/Context/ContextTest.php | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/Unit/Context/ContextTest.php b/tests/Unit/Context/ContextTest.php index c1e910998..b023300a4 100644 --- a/tests/Unit/Context/ContextTest.php +++ b/tests/Unit/Context/ContextTest.php @@ -228,4 +228,38 @@ public function test_debug_scopes_disabled_order_server(): void \putenv('OTEL_PHP_DEBUG_SCOPES_DISABLED'); } } + + public function test_debug_scopes_disabled_falsey_server(): void + { + $_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED'] = '0'; + \putenv('OTEL_PHP_DEBUG_SCOPES_DISABLED=1'); + + $context = Context::getRoot(); + + $scope = $context->activate(); + + try { + $this->assertInstanceOf(DebugScope::class, $scope); + } finally { + $scope->detach(); + unset($_SERVER['OTEL_PHP_DEBUG_SCOPES_DISABLED']); + \putenv('OTEL_PHP_DEBUG_SCOPES_DISABLED'); + } + } + + public function test_debug_scopes_disabled_falsey_env(): void + { + \putenv('OTEL_PHP_DEBUG_SCOPES_DISABLED=0'); + + $context = Context::getRoot(); + + $scope = $context->activate(); + + try { + $this->assertInstanceOf(DebugScope::class, $scope); + } finally { + $scope->detach(); + \putenv('OTEL_PHP_DEBUG_SCOPES_DISABLED'); + } + } }