41 lines
1.5 KiB
PHP
41 lines
1.5 KiB
PHP
|
<?php
|
||
|
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
namespace OpenTelemetry\SDK\Resource\Detectors;
|
||
|
|
||
|
use OpenTelemetry\SDK\Common\Attribute\Attributes;
|
||
|
use OpenTelemetry\SDK\Common\Configuration\Configuration;
|
||
|
use OpenTelemetry\SDK\Common\Configuration\Variables;
|
||
|
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
|
||
|
use OpenTelemetry\SDK\Resource\ResourceInfo;
|
||
|
use OpenTelemetry\SemConv\ResourceAttributes;
|
||
|
|
||
|
/**
|
||
|
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/sdk.md#specifying-resource-information-via-an-environment-variable
|
||
|
*/
|
||
|
final class Environment implements ResourceDetectorInterface
|
||
|
{
|
||
|
public function getResource(): ResourceInfo
|
||
|
{
|
||
|
$attributes = Configuration::has(Variables::OTEL_RESOURCE_ATTRIBUTES)
|
||
|
? self::decode(Configuration::getMap(Variables::OTEL_RESOURCE_ATTRIBUTES, []))
|
||
|
: [];
|
||
|
|
||
|
//@see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration
|
||
|
$serviceName = Configuration::has(Variables::OTEL_SERVICE_NAME)
|
||
|
? Configuration::getString(Variables::OTEL_SERVICE_NAME)
|
||
|
: null;
|
||
|
if ($serviceName) {
|
||
|
$attributes[ResourceAttributes::SERVICE_NAME] = $serviceName;
|
||
|
}
|
||
|
|
||
|
return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
|
||
|
}
|
||
|
|
||
|
private static function decode(array $attributes): array
|
||
|
{
|
||
|
return array_map('urldecode', $attributes);
|
||
|
}
|
||
|
}
|