From 226b5233e4dcc18c42cbade1c0b8ab459a81d606 Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Wed, 16 Oct 2024 09:42:15 +1100 Subject: [PATCH 1/2] check for readable host id files before read (#1400) * check for readable host id files before read * reset vfs between tests --- Resource/Detectors/Host.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Resource/Detectors/Host.php b/Resource/Detectors/Host.php index 6024c44..7d74f69 100644 --- a/Resource/Detectors/Host.php +++ b/Resource/Detectors/Host.php @@ -52,8 +52,9 @@ private function getLinuxId(): ?string $paths = [self::PATH_ETC_MACHINEID, self::PATH_VAR_LIB_DBUS_MACHINEID]; foreach ($paths as $path) { - if (file_exists($this->dir . $path)) { - return trim(file_get_contents($this->dir . $path)); + $file = $this->dir . $path; + if (is_file($file) && is_readable($file)) { + return trim(file_get_contents($file)); } } @@ -62,13 +63,14 @@ private function getLinuxId(): ?string private function getBsdId(): ?string { - if (file_exists($this->dir . self::PATH_ETC_HOSTID)) { - return trim(file_get_contents($this->dir . self::PATH_ETC_HOSTID)); + $file = $this->dir . self::PATH_ETC_HOSTID; + if (is_file($file) && is_readable($file)) { + return trim(file_get_contents($file)); } - $out = exec('kenv -q smbios.system.uuid'); + $out = exec('which kenv && kenv -q smbios.system.uuid'); - if ($out !== false) { + if ($out) { return $out; } From 126319e6b3996c609fded69f1e3e9dc1582c64af Mon Sep 17 00:00:00 2001 From: Tobias Bachert Date: Wed, 16 Oct 2024 00:42:37 +0200 Subject: [PATCH 2/2] Add `TextMapPropagator` to instrumentation context (#1401) --- Propagation/LateBindingTextMapPropagator.php | 53 ++++++++++++++++++++ SdkAutoloader.php | 18 ++++++- 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 Propagation/LateBindingTextMapPropagator.php diff --git a/Propagation/LateBindingTextMapPropagator.php b/Propagation/LateBindingTextMapPropagator.php new file mode 100644 index 0000000..6e30a00 --- /dev/null +++ b/Propagation/LateBindingTextMapPropagator.php @@ -0,0 +1,53 @@ +propagator instanceof TextMapPropagatorInterface) { + $this->propagator = ($this->propagator)(); + } + + return $this->propagator->fields(); + } + + public function inject(mixed &$carrier, ?PropagationSetterInterface $setter = null, ?ContextInterface $context = null): void + { + if (!$this->propagator instanceof TextMapPropagatorInterface) { + $this->propagator = ($this->propagator)(); + } + + $this->propagator->inject($carrier, $setter, $context); + } + + public function extract($carrier, ?PropagationGetterInterface $getter = null, ?ContextInterface $context = null): ContextInterface + { + if (!$this->propagator instanceof TextMapPropagatorInterface) { + $this->propagator = ($this->propagator)(); + } + + return $this->propagator->extract($carrier, $getter, $context); + } +} diff --git a/SdkAutoloader.php b/SdkAutoloader.php index 35a2a70..bc3208e 100644 --- a/SdkAutoloader.php +++ b/SdkAutoloader.php @@ -23,12 +23,14 @@ use OpenTelemetry\Config\SDK\Configuration as SdkConfiguration; use OpenTelemetry\Config\SDK\Instrumentation as SdkInstrumentation; use OpenTelemetry\Context\Context; +use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface; use OpenTelemetry\SDK\Common\Configuration\Configuration; use OpenTelemetry\SDK\Common\Configuration\Variables; use OpenTelemetry\SDK\Common\Util\ShutdownHandler; use OpenTelemetry\SDK\Logs\EventLoggerProviderFactory; use OpenTelemetry\SDK\Logs\LoggerProviderFactory; use OpenTelemetry\SDK\Metrics\MeterProviderFactory; +use OpenTelemetry\SDK\Propagation\LateBindingTextMapPropagator; use OpenTelemetry\SDK\Propagation\PropagatorFactory; use OpenTelemetry\SDK\Resource\ResourceInfoFactory; use OpenTelemetry\SDK\Trace\AutoRootSpan; @@ -154,7 +156,8 @@ private static function registerInstrumentations(): void $tracerProvider = self::createLateBindingTracerProvider(); $meterProvider = self::createLateBindingMeterProvider(); $loggerProvider = self::createLateBindingLoggerProvider(); - $context = new InstrumentationContext($tracerProvider, $meterProvider, $loggerProvider); + $propagator = self::createLateBindingTextMapPropagator(); + $context = new InstrumentationContext($tracerProvider, $meterProvider, $loggerProvider, $propagator); foreach (ServiceLoader::load(Instrumentation::class) as $instrumentation) { /** @var Instrumentation $instrumentation */ @@ -204,6 +207,19 @@ private static function createLateBindingLoggerProvider(): LoggerProviderInterfa }); } + private static function createLateBindingTextMapPropagator(): TextMapPropagatorInterface + { + return new LateBindingTextMapPropagator(static function (): TextMapPropagatorInterface { + $scope = Context::getRoot()->activate(); + + try { + return Globals::propagator(); + } finally { + $scope->detach(); + } + }); + } + private static function getHookManager(): HookManagerInterface { /** @var HookManagerInterface $hookManager */