Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x

Host.php

Namespace

OpenTelemetry\SDK\Resource\Detectors

File

vendor/open-telemetry/sdk/Resource/Detectors/Host.php

View source
<?php

declare (strict_types=1);
namespace OpenTelemetry\SDK\Resource\Detectors;

use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;
use function php_uname;

/**
 * @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/host.md#host
 */
final class Host implements ResourceDetectorInterface {
    private const PATH_ETC_MACHINEID = 'etc/machine-id';
    private const PATH_VAR_LIB_DBUS_MACHINEID = 'var/lib/dbus/machine-id';
    private const PATH_ETC_HOSTID = 'etc/hostid';
    public function __construct(string $dir = '/', string $os = PHP_OS_FAMILY) {
    }
    public function getResource() : ResourceInfo {
        $attributes = [
            ResourceAttributes::HOST_NAME => php_uname('n'),
            ResourceAttributes::HOST_ARCH => php_uname('m'),
            ResourceAttributes::HOST_ID => $this->getMachineId(),
        ];
        return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
    }
    private function getMachineId() : ?string {
        return match ($this->os) {    'Linux' => $this->getLinuxId(),
            'BSD' => $this->getBsdId(),
            'Darwin' => $this->getMacOsId(),
            'Windows' => $this->getWindowsId(),
            default => null,
        
        };
    }
    private function getLinuxId() : ?string {
        $paths = [
            self::PATH_ETC_MACHINEID,
            self::PATH_VAR_LIB_DBUS_MACHINEID,
        ];
        foreach ($paths as $path) {
            $file = $this->dir . $path;
            if (is_file($file) && is_readable($file)) {
                return trim(file_get_contents($file));
            }
        }
        return null;
    }
    private function getBsdId() : ?string {
        $file = $this->dir . self::PATH_ETC_HOSTID;
        if (is_file($file) && is_readable($file)) {
            return trim(file_get_contents($file));
        }
        $out = exec('which kenv && kenv -q smbios.system.uuid');
        if ($out) {
            return $out;
        }
        return null;
    }
    private function getMacOsId() : ?string {
        $out = exec('ioreg -rd1 -c IOPlatformExpertDevice | awk \'/IOPlatformUUID/ { split($0, line, "\\""); printf("%s\\n", line[4]); }\'');
        if ($out !== false) {
            return $out;
        }
        return null;
    }
    private function getWindowsId() : ?string {
        $out = exec('powershell.exe -Command "Get-ItemPropertyValue -Path HKLM:\\SOFTWARE\\Microsoft\\Cryptography -Name MachineGuid"');
        if ($out !== false) {
            return $out;
        }
        return null;
    }

}

Classes

Title Deprecated Summary
Host

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal