Associating Spans with their TracerProvider (#215)
* Added functionality to associate a resource with a span. Added a `defaultResource` method to `ResourceInfo`. Added test cases to ‘ResourceTest.php`, `TracerProviderTest.php`, `TracingTest.php`. * Some `psalm` fixes. * Psalm.
This commit is contained in:
parent
094333d422
commit
973816b44c
|
|
@ -24,7 +24,15 @@ class ResourceInfo
|
||||||
|
|
||||||
public static function create(Attributes $attributes): self
|
public static function create(Attributes $attributes): self
|
||||||
{
|
{
|
||||||
return new ResourceInfo(clone $attributes);
|
$resource = self::merge(self::defaultResource(), new ResourceInfo(clone $attributes));
|
||||||
|
/*
|
||||||
|
* The SDK MUST extract information from the OTEL_RESOURCE_ATTRIBUTES environment
|
||||||
|
* variable and merge this.
|
||||||
|
* todo: after resource detection is implemented, merge it here.
|
||||||
|
* return $resource.merge(....);
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
return $resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -53,6 +61,17 @@ class ResourceInfo
|
||||||
return new ResourceInfo($mergedAttributes);
|
return new ResourceInfo($mergedAttributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function defaultResource(): self
|
||||||
|
{
|
||||||
|
return new ResourceInfo(new Attributes(
|
||||||
|
[
|
||||||
|
ResourceConstants::TELEMETRY_SDK_NAME => 'opentelemetry',
|
||||||
|
ResourceConstants::TELEMETRY_SDK_LANGUAGE => 'php',
|
||||||
|
ResourceConstants::TELEMETRY_SDK_VERSION => 'dev',
|
||||||
|
]
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
public static function emptyResource(): self
|
public static function emptyResource(): self
|
||||||
{
|
{
|
||||||
return new ResourceInfo(new Attributes());
|
return new ResourceInfo(new Attributes());
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace OpenTelemetry\Sdk\Trace;
|
namespace OpenTelemetry\Sdk\Trace;
|
||||||
|
|
||||||
|
use OpenTelemetry\Sdk\Resource\ResourceInfo;
|
||||||
use OpenTelemetry\Trace as API;
|
use OpenTelemetry\Trace as API;
|
||||||
|
|
||||||
class Span implements API\Span
|
class Span implements API\Span
|
||||||
|
|
@ -20,6 +21,11 @@ class Span implements API\Span
|
||||||
private $statusCode;
|
private $statusCode;
|
||||||
private $statusDescription;
|
private $statusDescription;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var ResourceInfo
|
||||||
|
*/
|
||||||
|
private $resource; // An immutable representation of the entity producing telemetry.
|
||||||
|
|
||||||
private $attributes;
|
private $attributes;
|
||||||
private $events;
|
private $events;
|
||||||
private $links = null;
|
private $links = null;
|
||||||
|
|
@ -44,6 +50,7 @@ class Span implements API\Span
|
||||||
API\SpanContext $spanContext,
|
API\SpanContext $spanContext,
|
||||||
?API\SpanContext $parentSpanContext = null,
|
?API\SpanContext $parentSpanContext = null,
|
||||||
?Sampler $sampler = null,
|
?Sampler $sampler = null,
|
||||||
|
?ResourceInfo $resource = null,
|
||||||
int $spanKind = API\SpanKind::KIND_INTERNAL
|
int $spanKind = API\SpanKind::KIND_INTERNAL
|
||||||
) {
|
) {
|
||||||
$this->name = $name;
|
$this->name = $name;
|
||||||
|
|
@ -51,6 +58,7 @@ class Span implements API\Span
|
||||||
$this->parentSpanContext = $parentSpanContext;
|
$this->parentSpanContext = $parentSpanContext;
|
||||||
$this->spanKind = $spanKind;
|
$this->spanKind = $spanKind;
|
||||||
$this->sampler = $sampler;
|
$this->sampler = $sampler;
|
||||||
|
$this->resource = $resource ?? ResourceInfo::emptyResource();
|
||||||
$moment = Clock::get()->moment();
|
$moment = Clock::get()->moment();
|
||||||
$this->startEpochTimestamp = $moment[0];
|
$this->startEpochTimestamp = $moment[0];
|
||||||
$this->start = $moment[1];
|
$this->start = $moment[1];
|
||||||
|
|
@ -62,6 +70,11 @@ class Span implements API\Span
|
||||||
$this->events = new Events();
|
$this->events = new Events();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getResource(): ResourceInfo
|
||||||
|
{
|
||||||
|
return clone $this->resource;
|
||||||
|
}
|
||||||
|
|
||||||
public function getContext(): API\SpanContext
|
public function getContext(): API\SpanContext
|
||||||
{
|
{
|
||||||
return clone $this->spanContext;
|
return clone $this->spanContext;
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ final class SpanOptions implements API\SpanOptions
|
||||||
? SpanContext::fork($span->getContext()->getTraceId())
|
? SpanContext::fork($span->getContext()->getTraceId())
|
||||||
: SpanContext::generate();
|
: SpanContext::generate();
|
||||||
|
|
||||||
$span = new Span($this->name, $context, $this->parent, null, $this->kind);
|
$span = new Span($this->name, $context, $this->parent, null, $this->tracer->getResource(), $this->kind);
|
||||||
|
|
||||||
if ($this->startEpochTimestamp !== null) {
|
if ($this->startEpochTimestamp !== null) {
|
||||||
$span->setStartEpochTimestamp($this->startEpochTimestamp);
|
$span->setStartEpochTimestamp($this->startEpochTimestamp);
|
||||||
|
|
|
||||||
|
|
@ -22,11 +22,11 @@ class Tracer implements API\Tracer
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
TracerProvider $provider,
|
TracerProvider $provider,
|
||||||
ResourceInfo $resource,
|
ResourceInfo $resource = null,
|
||||||
API\SpanContext $context = null
|
API\SpanContext $context = null
|
||||||
) {
|
) {
|
||||||
$this->provider = $provider;
|
$this->provider = $provider;
|
||||||
$this->resource = $resource;
|
$this->resource = $resource ?? ResourceInfo::emptyResource();
|
||||||
$this->importedContext = $context;
|
$this->importedContext = $context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -50,6 +50,7 @@ class Tracer implements API\Tracer
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* @param API\SpanContext $parentContext
|
* @param API\SpanContext $parentContext
|
||||||
* @param bool $isRemote
|
* @param bool $isRemote
|
||||||
|
* @param int $spanKind
|
||||||
* @return Span
|
* @return Span
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -81,7 +82,7 @@ class Tracer implements API\Tracer
|
||||||
if (SamplingResult::NOT_RECORD == $samplingResult->getDecision()) {
|
if (SamplingResult::NOT_RECORD == $samplingResult->getDecision()) {
|
||||||
$span = $this->generateSpanInstance('', $context);
|
$span = $this->generateSpanInstance('', $context);
|
||||||
} else {
|
} else {
|
||||||
$span = $this->generateSpanInstance($name, $context, $sampler);
|
$span = $this->generateSpanInstance($name, $context, $sampler, $this->resource);
|
||||||
|
|
||||||
if ($span->isRecording()) {
|
if ($span->isRecording()) {
|
||||||
$this->provider->getSpanProcessor()->onStart($span);
|
$this->provider->getSpanProcessor()->onStart($span);
|
||||||
|
|
@ -167,7 +168,10 @@ class Tracer implements API\Tracer
|
||||||
{
|
{
|
||||||
return $this->spans;
|
return $this->spans;
|
||||||
}
|
}
|
||||||
|
public function getResource(): ResourceInfo
|
||||||
|
{
|
||||||
|
return clone $this->resource;
|
||||||
|
}
|
||||||
public function endActiveSpan(?int $timestamp = null)
|
public function endActiveSpan(?int $timestamp = null)
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
|
@ -182,7 +186,7 @@ class Tracer implements API\Tracer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function generateSpanInstance(string $name, API\SpanContext $context, Sampler $sampler = null): API\Span
|
private function generateSpanInstance(string $name, API\SpanContext $context, Sampler $sampler = null, ResourceInfo $resource = null): API\Span
|
||||||
{
|
{
|
||||||
$parent = null;
|
$parent = null;
|
||||||
|
|
||||||
|
|
@ -193,7 +197,7 @@ class Tracer implements API\Tracer
|
||||||
$parent = $this->getActiveSpan()->getContext();
|
$parent = $this->getActiveSpan()->getContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
$span = new Span($name, $context, $parent, $sampler);
|
$span = new Span($name, $context, $parent, $sampler, $resource);
|
||||||
}
|
}
|
||||||
$this->spans[] = $span;
|
$this->spans[] = $span;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,13 +54,15 @@ final class TracerProvider implements API\TracerProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
$spanContext = SpanContext::generateSampled();
|
$spanContext = SpanContext::generateSampled();
|
||||||
|
/*
|
||||||
|
* A resource can be associated with the TracerProvider when the TracerProvider is created.
|
||||||
|
* That association cannot be changed later. When associated with a TracerProvider, all
|
||||||
|
* Spans produced by any Tracer from the provider MUST be associated with this Resource.
|
||||||
|
*/
|
||||||
|
$primary = $this->getResource();
|
||||||
$resource = ResourceInfo::create(
|
$resource = ResourceInfo::create(
|
||||||
new Attributes(
|
new Attributes(
|
||||||
[
|
[
|
||||||
ResourceConstants::TELEMETRY_SDK_NAME => 'opentelemetry',
|
|
||||||
ResourceConstants::TELEMETRY_SDK_LANGUAGE => 'php',
|
|
||||||
ResourceConstants::TELEMETRY_SDK_VERSION => 'dev',
|
|
||||||
ResourceConstants::SERVICE_NAME => $name,
|
ResourceConstants::SERVICE_NAME => $name,
|
||||||
ResourceConstants::SERVICE_VERSION => $version,
|
ResourceConstants::SERVICE_VERSION => $version,
|
||||||
ResourceConstants::SERVICE_INSTANCE_ID => uniqid($name . $version),
|
ResourceConstants::SERVICE_INSTANCE_ID => uniqid($name . $version),
|
||||||
|
|
@ -70,7 +72,7 @@ final class TracerProvider implements API\TracerProvider
|
||||||
|
|
||||||
return $this->tracers[$name] = new Tracer(
|
return $this->tracers[$name] = new Tracer(
|
||||||
$this,
|
$this,
|
||||||
ResourceInfo::merge($this->getResource(), $resource),
|
ResourceInfo::merge($primary, $resource),
|
||||||
$spanContext
|
$spanContext
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -94,6 +96,6 @@ final class TracerProvider implements API\TracerProvider
|
||||||
|
|
||||||
public function getResource(): ResourceInfo
|
public function getResource(): ResourceInfo
|
||||||
{
|
{
|
||||||
return $this->resource;
|
return clone $this->resource;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace OpenTelemetry\Tests\Sdk\Unit\Resource;
|
namespace OpenTelemetry\Tests\Sdk\Unit\Resource;
|
||||||
|
|
||||||
|
use OpenTelemetry\Sdk\Resource\ResourceConstants;
|
||||||
use OpenTelemetry\Sdk\Resource\ResourceInfo;
|
use OpenTelemetry\Sdk\Resource\ResourceInfo;
|
||||||
use OpenTelemetry\Sdk\Trace\Attribute;
|
use OpenTelemetry\Sdk\Trace\Attribute;
|
||||||
use OpenTelemetry\Sdk\Trace\Attributes;
|
use OpenTelemetry\Sdk\Trace\Attributes;
|
||||||
|
|
@ -19,7 +20,9 @@ class ResourceTest extends TestCase
|
||||||
$resource = ResourceInfo::emptyResource();
|
$resource = ResourceInfo::emptyResource();
|
||||||
$this->assertEmpty($resource->getAttributes());
|
$this->assertEmpty($resource->getAttributes());
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
public function testGetAttributes()
|
public function testGetAttributes()
|
||||||
{
|
{
|
||||||
$attributes = new Attributes();
|
$attributes = new Attributes();
|
||||||
|
|
@ -28,11 +31,54 @@ class ResourceTest extends TestCase
|
||||||
|
|
||||||
/** @var Attribute $name */
|
/** @var Attribute $name */
|
||||||
$name = $resource->getAttributes()->getAttribute('name');
|
$name = $resource->getAttributes()->getAttribute('name');
|
||||||
|
/** @var Attribute $sdkname */
|
||||||
|
$sdkname = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_NAME);
|
||||||
|
/** @var Attribute $sdklanguage */
|
||||||
|
$sdklanguage = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE);
|
||||||
|
/** @var Attribute $sdkversion */
|
||||||
|
$sdkversion = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_VERSION);
|
||||||
|
|
||||||
|
$attributes->setAttribute(ResourceConstants::TELEMETRY_SDK_NAME, 'opentelemetry');
|
||||||
|
$attributes->setAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE, 'php');
|
||||||
|
$attributes->setAttribute(ResourceConstants::TELEMETRY_SDK_VERSION, 'dev');
|
||||||
|
|
||||||
|
$this->assertEquals($attributes, $resource->getAttributes());
|
||||||
|
$this->assertEquals('opentelemetry', $sdkname->getValue());
|
||||||
|
$this->assertEquals('php', $sdklanguage->getValue());
|
||||||
|
$this->assertEquals('dev', $sdkversion->getValue());
|
||||||
$this->assertEquals($attributes, $resource->getAttributes());
|
$this->assertEquals($attributes, $resource->getAttributes());
|
||||||
$this->assertEquals('test', $name->getValue());
|
$this->assertEquals('test', $name->getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function testDefaultResource()
|
||||||
|
{
|
||||||
|
$attributes = new Attributes(
|
||||||
|
[
|
||||||
|
ResourceConstants::TELEMETRY_SDK_NAME => 'opentelemetry',
|
||||||
|
ResourceConstants::TELEMETRY_SDK_LANGUAGE => 'php',
|
||||||
|
ResourceConstants::TELEMETRY_SDK_VERSION => 'dev',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$resource = ResourceInfo::create(new Attributes());
|
||||||
|
/** @var Attribute $sdkname */
|
||||||
|
$sdkname = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_NAME);
|
||||||
|
/** @var Attribute $sdklanguage */
|
||||||
|
$sdklanguage = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE);
|
||||||
|
/** @var Attribute $sdkversion */
|
||||||
|
$sdkversion = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_VERSION);
|
||||||
|
|
||||||
|
$this->assertEquals($attributes, $resource->getAttributes());
|
||||||
|
$this->assertEquals('opentelemetry', $sdkname->getValue());
|
||||||
|
$this->assertEquals('php', $sdklanguage->getValue());
|
||||||
|
$this->assertEquals('dev', $sdkversion->getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
public function testMerge()
|
public function testMerge()
|
||||||
{
|
{
|
||||||
$primary = ResourceInfo::create(new Attributes(['name' => 'primary', 'empty' => '']));
|
$primary = ResourceInfo::create(new Attributes(['name' => 'primary', 'empty' => '']));
|
||||||
|
|
@ -46,12 +92,15 @@ class ResourceTest extends TestCase
|
||||||
/** @var Attribute $empty */
|
/** @var Attribute $empty */
|
||||||
$empty = $result->getAttributes()->getAttribute('empty');
|
$empty = $result->getAttributes()->getAttribute('empty');
|
||||||
|
|
||||||
$this->assertCount(3, $result->getAttributes());
|
$this->assertCount(6, $result->getAttributes());
|
||||||
$this->assertEquals('primary', $name->getValue());
|
$this->assertEquals('primary', $name->getValue());
|
||||||
$this->assertEquals('1.0.0', $version->getValue());
|
$this->assertEquals('1.0.0', $version->getValue());
|
||||||
$this->assertEquals('value', $empty->getValue());
|
$this->assertEquals('value', $empty->getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
public function testImmutableCreate()
|
public function testImmutableCreate()
|
||||||
{
|
{
|
||||||
$attributes = new Attributes();
|
$attributes = new Attributes();
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,15 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace OpenTelemetry\Tests\Sdk\Unit\Trace;
|
namespace OpenTelemetry\Tests\Sdk\Unit\Trace;
|
||||||
|
|
||||||
|
use OpenTelemetry\Sdk\Resource\ResourceConstants;
|
||||||
|
use OpenTelemetry\Sdk\Resource\ResourceInfo;
|
||||||
|
use OpenTelemetry\Sdk\Trace\Attribute;
|
||||||
|
use OpenTelemetry\Sdk\Trace\Attributes;
|
||||||
use OpenTelemetry\Sdk\Trace\Sampler\AlwaysOffSampler;
|
use OpenTelemetry\Sdk\Trace\Sampler\AlwaysOffSampler;
|
||||||
use OpenTelemetry\Sdk\Trace\Sampler\AlwaysOnSampler;
|
use OpenTelemetry\Sdk\Trace\Sampler\AlwaysOnSampler;
|
||||||
use OpenTelemetry\Sdk\Trace\Sampler\ParentBased;
|
use OpenTelemetry\Sdk\Trace\Sampler\ParentBased;
|
||||||
use OpenTelemetry\Sdk\Trace\Sampler\TraceIdRatioBasedSampler;
|
use OpenTelemetry\Sdk\Trace\Sampler\TraceIdRatioBasedSampler;
|
||||||
|
use OpenTelemetry\Sdk\Trace\Tracer;
|
||||||
use OpenTelemetry\Sdk\Trace\TracerProvider;
|
use OpenTelemetry\Sdk\Trace\TracerProvider;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
|
@ -62,4 +67,104 @@ class TracerProviderTest extends TestCase
|
||||||
|
|
||||||
self::assertSame($description, 'TraceIdRatioBasedSampler{0.500000}');
|
self::assertSame($description, 'TraceIdRatioBasedSampler{0.500000}');
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function newTraceProvidersProvidesEmptyResource()
|
||||||
|
{
|
||||||
|
$traceProvider = new TracerProvider();
|
||||||
|
$resource = $traceProvider->getResource();
|
||||||
|
$attributes = $resource->getAttributes();
|
||||||
|
|
||||||
|
$this->assertCount(0, $attributes);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function newTraceProviderWithTracerProvidesNonEmptyResource()
|
||||||
|
{
|
||||||
|
$traceProvider = new TracerProvider();
|
||||||
|
/** @var Tracer $tracer */
|
||||||
|
$tracer = $traceProvider->getTracer('name', 'version');
|
||||||
|
$resource = $tracer->getResource();
|
||||||
|
$attributes = $resource->getAttributes();
|
||||||
|
|
||||||
|
/** @var Attribute $sdkname */
|
||||||
|
$sdkname = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_NAME);
|
||||||
|
/** @var Attribute $sdklanguage */
|
||||||
|
$sdklanguage = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE);
|
||||||
|
/** @var Attribute $sdkversion */
|
||||||
|
$sdkversion = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_VERSION);
|
||||||
|
/** @var Attribute $servicename */
|
||||||
|
$servicename = $attributes->getAttribute(ResourceConstants::SERVICE_NAME);
|
||||||
|
/** @var Attribute $serviceversion */
|
||||||
|
$serviceversion = $attributes->getAttribute(ResourceConstants::SERVICE_VERSION);
|
||||||
|
$this->assertEquals($attributes, $resource->getAttributes());
|
||||||
|
|
||||||
|
$this->assertEquals('opentelemetry', $sdkname->getValue());
|
||||||
|
$this->assertEquals('php', $sdklanguage->getValue());
|
||||||
|
$this->assertEquals('dev', $sdkversion->getValue());
|
||||||
|
$this->assertEquals('name', $servicename->getValue());
|
||||||
|
$this->assertEquals('version', $serviceversion->getValue());
|
||||||
|
|
||||||
|
$this->assertCount(6, $attributes);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function tracerFromTraceProviderAssociatesWithTraceProviderResource()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* A resource can be associated with the TracerProvider when the TracerProvider is created.
|
||||||
|
* That association cannot be changed later. When associated with a TracerProvider, all
|
||||||
|
* Spans produced by any Tracer from the provider MUST be associated with this Resource.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Create a new provider with a resource containing 2 attributes.
|
||||||
|
$providerResource = ResourceInfo::create(new Attributes(['provider' => 'primary', 'empty' => '']));
|
||||||
|
$traceProvider = new TracerProvider($providerResource);
|
||||||
|
$tpAttributes = $traceProvider->getResource()->getAttributes();
|
||||||
|
|
||||||
|
// Verify the resource associated with the trace provider.
|
||||||
|
$this->assertCount(5, $tpAttributes);
|
||||||
|
/** @var Attribute $primary */
|
||||||
|
$primary = $tpAttributes->getAttribute('provider');
|
||||||
|
/** @var Attribute $empty */
|
||||||
|
$empty = $tpAttributes->getAttribute('empty');
|
||||||
|
$this->assertEquals('primary', $primary->getValue());
|
||||||
|
$this->assertEquals('', $empty->getValue());
|
||||||
|
|
||||||
|
// Add a Tracer. The trace provider should add its resource to the new Tracer.
|
||||||
|
/** @var Tracer $tracer */
|
||||||
|
$tracer = $traceProvider->getTracer('name', 'version');
|
||||||
|
$resource = $tracer->getResource();
|
||||||
|
$attributes = $resource->getAttributes();
|
||||||
|
|
||||||
|
// Verify the resource associated with the tracer.
|
||||||
|
/** @var Attribute $sdkname */
|
||||||
|
$sdkname = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_NAME);
|
||||||
|
/** @var Attribute $sdklanguage */
|
||||||
|
$sdklanguage = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE);
|
||||||
|
/** @var Attribute $sdkversion */
|
||||||
|
$sdkversion = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_VERSION);
|
||||||
|
/** @var Attribute $servicename */
|
||||||
|
$servicename = $attributes->getAttribute(ResourceConstants::SERVICE_NAME);
|
||||||
|
/** @var Attribute $serviceversion */
|
||||||
|
$serviceversion = $attributes->getAttribute(ResourceConstants::SERVICE_VERSION);
|
||||||
|
|
||||||
|
/** @var Attribute $primary */
|
||||||
|
$primary = $attributes->getAttribute('provider');
|
||||||
|
/** @var Attribute $empty */
|
||||||
|
$empty = $attributes->getAttribute('empty');
|
||||||
|
$this->assertEquals('primary', $primary->getValue());
|
||||||
|
$this->assertEquals('', $empty->getValue());
|
||||||
|
|
||||||
|
$this->assertEquals('opentelemetry', $sdkname->getValue());
|
||||||
|
$this->assertEquals('php', $sdklanguage->getValue());
|
||||||
|
$this->assertEquals('dev', $sdkversion->getValue());
|
||||||
|
$this->assertEquals('name', $servicename->getValue());
|
||||||
|
$this->assertEquals('version', $serviceversion->getValue());
|
||||||
|
|
||||||
|
$this->assertCount(8, $attributes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,17 @@ declare(strict_types=1);
|
||||||
namespace OpenTelemetry\Tests\Sdk\Unit\Trace;
|
namespace OpenTelemetry\Tests\Sdk\Unit\Trace;
|
||||||
|
|
||||||
use function iterator_to_array;
|
use function iterator_to_array;
|
||||||
|
use OpenTelemetry\Sdk\Resource\ResourceConstants;
|
||||||
use OpenTelemetry\Sdk\Resource\ResourceInfo;
|
use OpenTelemetry\Sdk\Resource\ResourceInfo;
|
||||||
use OpenTelemetry\Sdk\Trace as SDK;
|
use OpenTelemetry\Sdk\Trace as SDK;
|
||||||
use OpenTelemetry\Sdk\Trace\Attribute;
|
use OpenTelemetry\Sdk\Trace\Attribute;
|
||||||
use OpenTelemetry\Sdk\Trace\Attributes;
|
use OpenTelemetry\Sdk\Trace\Attributes;
|
||||||
use OpenTelemetry\Sdk\Trace\Clock;
|
use OpenTelemetry\Sdk\Trace\Clock;
|
||||||
|
use OpenTelemetry\Sdk\Trace\Span;
|
||||||
use OpenTelemetry\Sdk\Trace\SpanContext;
|
use OpenTelemetry\Sdk\Trace\SpanContext;
|
||||||
use OpenTelemetry\Sdk\Trace\SpanStatus;
|
use OpenTelemetry\Sdk\Trace\SpanStatus;
|
||||||
use OpenTelemetry\Sdk\Trace\Tracer;
|
use OpenTelemetry\Sdk\Trace\Tracer;
|
||||||
|
use OpenTelemetry\Sdk\Trace\TracerProvider;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
class TracingTest extends TestCase
|
class TracingTest extends TestCase
|
||||||
|
|
@ -336,4 +339,340 @@ class TracingTest extends TestCase
|
||||||
$tracer->getActiveSpan()
|
$tracer->getActiveSpan()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testCreateSpanResourceNonDefaultTraceProviderNonDefaultTrace()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* A resource can be associated with the TracerProvider when the TracerProvider is created.
|
||||||
|
* That association cannot be changed later. When associated with a TracerProvider, all
|
||||||
|
* Spans produced by any Tracer from the provider MUST be associated with this Resource.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Create a new provider with a resource containing 2 attributes.
|
||||||
|
$providerResource = ResourceInfo::create(new Attributes(['provider' => 'primary', 'empty' => '']));
|
||||||
|
$traceProvider = new TracerProvider($providerResource);
|
||||||
|
$tpAttributes = $traceProvider->getResource()->getAttributes();
|
||||||
|
|
||||||
|
// Verify the resource associated with the trace provider.
|
||||||
|
$this->assertCount(5, $tpAttributes);
|
||||||
|
/** @var Attribute $primary */
|
||||||
|
$primary = $tpAttributes->getAttribute('provider');
|
||||||
|
/** @var Attribute $empty */
|
||||||
|
$empty = $tpAttributes->getAttribute('empty');
|
||||||
|
$this->assertEquals('primary', $primary->getValue());
|
||||||
|
$this->assertEquals('', $empty->getValue());
|
||||||
|
|
||||||
|
// Add a Tracer. The trace provider should add its resource to the new Tracer.
|
||||||
|
/** @var Tracer $tracer */
|
||||||
|
$tracer = $traceProvider->getTracer('name', 'version');
|
||||||
|
$resource = $tracer->getResource();
|
||||||
|
$attributes = $resource->getAttributes();
|
||||||
|
|
||||||
|
// Verify the resource associated with the tracer.
|
||||||
|
/** @var Attribute $name */
|
||||||
|
$name = $resource->getAttributes()->getAttribute('name');
|
||||||
|
/** @var Attribute $sdkname */
|
||||||
|
$sdkname = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_NAME);
|
||||||
|
/** @var Attribute $sdklanguage */
|
||||||
|
$sdklanguage = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE);
|
||||||
|
/** @var Attribute $sdkversion */
|
||||||
|
$sdkversion = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_VERSION);
|
||||||
|
/** @var Attribute $servicename */
|
||||||
|
$servicename = $attributes->getAttribute(ResourceConstants::SERVICE_NAME);
|
||||||
|
/** @var Attribute $serviceversion */
|
||||||
|
$serviceversion = $attributes->getAttribute(ResourceConstants::SERVICE_VERSION);
|
||||||
|
|
||||||
|
/** @var Attribute $primary */
|
||||||
|
$primary = $attributes->getAttribute('provider');
|
||||||
|
/** @var Attribute $empty */
|
||||||
|
$empty = $attributes->getAttribute('empty');
|
||||||
|
$this->assertEquals('primary', $primary->getValue());
|
||||||
|
$this->assertEquals('', $empty->getValue());
|
||||||
|
|
||||||
|
$this->assertEquals('opentelemetry', $sdkname->getValue());
|
||||||
|
$this->assertEquals('php', $sdklanguage->getValue());
|
||||||
|
$this->assertEquals('dev', $sdkversion->getValue());
|
||||||
|
$this->assertEquals('name', $servicename->getValue());
|
||||||
|
$this->assertEquals('version', $serviceversion->getValue());
|
||||||
|
|
||||||
|
$this->assertCount(8, $attributes);
|
||||||
|
|
||||||
|
// Start a span with the tracer.
|
||||||
|
$tracer->startAndActivateSpan('firstSpan');
|
||||||
|
|
||||||
|
/** @var Span $global */
|
||||||
|
$global = $tracer->getActiveSpan();
|
||||||
|
$this->assertSame($tracer->getActiveSpan(), $global);
|
||||||
|
|
||||||
|
// Verify the resource associated with the span.
|
||||||
|
/** @var Attributes $attributes */
|
||||||
|
$attributes = $global->getResource()->getAttributes();
|
||||||
|
|
||||||
|
/** @var Attribute $name */
|
||||||
|
$name = $resource->getAttributes()->getAttribute('name');
|
||||||
|
/** @var Attribute $sdkname */
|
||||||
|
$sdkname = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_NAME);
|
||||||
|
/** @var Attribute $sdklanguage */
|
||||||
|
$sdklanguage = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE);
|
||||||
|
/** @var Attribute $sdkversion */
|
||||||
|
$sdkversion = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_VERSION);
|
||||||
|
/** @var Attribute $servicename */
|
||||||
|
$servicename = $attributes->getAttribute(ResourceConstants::SERVICE_NAME);
|
||||||
|
/** @var Attribute $serviceversion */
|
||||||
|
$serviceversion = $attributes->getAttribute(ResourceConstants::SERVICE_VERSION);
|
||||||
|
|
||||||
|
/** @var Attribute $primary */
|
||||||
|
$primary = $attributes->getAttribute('provider');
|
||||||
|
/** @var Attribute $empty */
|
||||||
|
$empty = $attributes->getAttribute('empty');
|
||||||
|
$this->assertEquals('primary', $primary->getValue());
|
||||||
|
$this->assertEquals('', $empty->getValue());
|
||||||
|
|
||||||
|
$this->assertEquals('opentelemetry', $sdkname->getValue());
|
||||||
|
$this->assertEquals('php', $sdklanguage->getValue());
|
||||||
|
$this->assertEquals('dev', $sdkversion->getValue());
|
||||||
|
$this->assertEquals('name', $servicename->getValue());
|
||||||
|
$this->assertEquals('version', $serviceversion->getValue());
|
||||||
|
|
||||||
|
$this->assertCount(8, $attributes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreateSpanGetsResourceFromDefaultTraceProviderDefaultTrace()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* A resource can be associated with the TracerProvider when the TracerProvider is created.
|
||||||
|
* That association cannot be changed later. When associated with a TracerProvider, all
|
||||||
|
* Spans produced by any Tracer from the provider MUST be associated with this Resource.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Create a new provider.
|
||||||
|
$traceProvider = new TracerProvider();
|
||||||
|
$tpAttributes = $traceProvider->getResource()->getAttributes();
|
||||||
|
|
||||||
|
// Verify the resource associated with the trace provider.
|
||||||
|
$this->assertCount(0, $tpAttributes);
|
||||||
|
|
||||||
|
// Add a Tracer. The trace provider should merge its resource one inherited from the traceprovider.
|
||||||
|
/** @var Tracer $tracer */
|
||||||
|
$tracer = $traceProvider->getTracer('name');
|
||||||
|
$resource = $tracer->getResource();
|
||||||
|
$attributes = $resource->getAttributes();
|
||||||
|
|
||||||
|
// Verify the resource associated with the tracer.
|
||||||
|
/** @var Attribute $sdkname */
|
||||||
|
$sdkname = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_NAME);
|
||||||
|
/** @var Attribute $sdklanguage */
|
||||||
|
$sdklanguage = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE);
|
||||||
|
/** @var Attribute $sdkversion */
|
||||||
|
$sdkversion = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_VERSION);
|
||||||
|
/** @var Attribute $servicename */
|
||||||
|
$servicename = $attributes->getAttribute(ResourceConstants::SERVICE_NAME);
|
||||||
|
/** @var Attribute $serviceversion */
|
||||||
|
$serviceversion = $attributes->getAttribute(ResourceConstants::SERVICE_VERSION);
|
||||||
|
|
||||||
|
$this->assertEquals('opentelemetry', $sdkname->getValue());
|
||||||
|
$this->assertEquals('php', $sdklanguage->getValue());
|
||||||
|
$this->assertEquals('dev', $sdkversion->getValue());
|
||||||
|
$this->assertEquals('name', $servicename->getValue());
|
||||||
|
$this->assertEquals('', $serviceversion->getValue());
|
||||||
|
|
||||||
|
$this->assertCount(6, $attributes);
|
||||||
|
|
||||||
|
// Start a span with the tracer.
|
||||||
|
$tracer->startAndActivateSpan('firstSpan');
|
||||||
|
/** @var Span $global */
|
||||||
|
$global = $tracer->getActiveSpan();
|
||||||
|
$this->assertSame($tracer->getActiveSpan(), $global);
|
||||||
|
|
||||||
|
// Verify the resource associated with the span.
|
||||||
|
|
||||||
|
$attributes = $global->getResource()->getAttributes();
|
||||||
|
|
||||||
|
/** @var Attribute $sdkname */
|
||||||
|
$sdkname = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_NAME);
|
||||||
|
/** @var Attribute $sdklanguage */
|
||||||
|
$sdklanguage = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE);
|
||||||
|
/** @var Attribute $sdkversion */
|
||||||
|
$sdkversion = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_VERSION);
|
||||||
|
/** @var Attribute $servicename */
|
||||||
|
$servicename = $attributes->getAttribute(ResourceConstants::SERVICE_NAME);
|
||||||
|
/** @var Attribute $serviceversion */
|
||||||
|
$serviceversion = $attributes->getAttribute(ResourceConstants::SERVICE_VERSION);
|
||||||
|
|
||||||
|
$this->assertEquals('opentelemetry', $sdkname->getValue());
|
||||||
|
$this->assertEquals('php', $sdklanguage->getValue());
|
||||||
|
$this->assertEquals('dev', $sdkversion->getValue());
|
||||||
|
$this->assertEquals('name', $servicename->getValue());
|
||||||
|
$this->assertEquals('', $serviceversion->getValue());
|
||||||
|
|
||||||
|
$this->assertCount(6, $attributes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreateSpanGetsResourceFromNonDefaultTraceProviderDefaultTrace()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* A resource can be associated with the TracerProvider when the TracerProvider is created.
|
||||||
|
* That association cannot be changed later. When associated with a TracerProvider, all
|
||||||
|
* Spans produced by any Tracer from the provider MUST be associated with this Resource.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Create a new provider with a resource containing 2 attributes.
|
||||||
|
$providerResource = ResourceInfo::create(new Attributes(['provider' => 'primary', 'empty' => '']));
|
||||||
|
$traceProvider = new TracerProvider($providerResource);
|
||||||
|
$tpAttributes = $traceProvider->getResource()->getAttributes();
|
||||||
|
|
||||||
|
// Verify the resource associated with the trace provider.
|
||||||
|
$this->assertCount(5, $tpAttributes);
|
||||||
|
|
||||||
|
/** @var Attribute $primary */
|
||||||
|
$primary = $tpAttributes->getAttribute('provider');
|
||||||
|
/** @var Attribute $empty */
|
||||||
|
$empty = $tpAttributes->getAttribute('empty');
|
||||||
|
$this->assertEquals('primary', $primary->getValue());
|
||||||
|
$this->assertEquals('', $empty->getValue());
|
||||||
|
|
||||||
|
// Add a Tracer. The trace provider should add its resource to the new Tracer.
|
||||||
|
/** @var Tracer $tracer */
|
||||||
|
$tracer = $traceProvider->getTracer('name');
|
||||||
|
$resource = $tracer->getResource();
|
||||||
|
$attributes = $resource->getAttributes();
|
||||||
|
|
||||||
|
// Verify the resource associated with the tracer.
|
||||||
|
/** @var Attribute $name */
|
||||||
|
$name = $resource->getAttributes()->getAttribute('name');
|
||||||
|
/** @var Attribute $sdkname */
|
||||||
|
$sdkname = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_NAME);
|
||||||
|
/** @var Attribute $sdklanguage */
|
||||||
|
$sdklanguage = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE);
|
||||||
|
/** @var Attribute $sdkversion */
|
||||||
|
$sdkversion = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_VERSION);
|
||||||
|
/** @var Attribute $servicename */
|
||||||
|
$servicename = $attributes->getAttribute(ResourceConstants::SERVICE_NAME);
|
||||||
|
/** @var Attribute $serviceversion */
|
||||||
|
$serviceversion = $attributes->getAttribute(ResourceConstants::SERVICE_VERSION);
|
||||||
|
|
||||||
|
/** @var Attribute $primary */
|
||||||
|
$primary = $attributes->getAttribute('provider');
|
||||||
|
/** @var Attribute $empty */
|
||||||
|
$empty = $attributes->getAttribute('empty');
|
||||||
|
$this->assertEquals('primary', $primary->getValue());
|
||||||
|
$this->assertEquals('', $empty->getValue());
|
||||||
|
|
||||||
|
$this->assertEquals('opentelemetry', $sdkname->getValue());
|
||||||
|
$this->assertEquals('php', $sdklanguage->getValue());
|
||||||
|
$this->assertEquals('dev', $sdkversion->getValue());
|
||||||
|
$this->assertEquals('name', $servicename->getValue());
|
||||||
|
$this->assertEquals('', $serviceversion->getValue());
|
||||||
|
|
||||||
|
$this->assertCount(8, $attributes);
|
||||||
|
|
||||||
|
// Start a span with the tracer.
|
||||||
|
$tracer->startAndActivateSpan('firstSpan');
|
||||||
|
|
||||||
|
/** @var Span $global */
|
||||||
|
$global = $tracer->getActiveSpan();
|
||||||
|
$this->assertSame($tracer->getActiveSpan(), $global);
|
||||||
|
|
||||||
|
// Verify the resource associated with the span.
|
||||||
|
|
||||||
|
$attributes = $global->getResource()->getAttributes();
|
||||||
|
|
||||||
|
/** @var Attribute $sdkname */
|
||||||
|
$sdkname = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_NAME);
|
||||||
|
/** @var Attribute $sdklanguage */
|
||||||
|
$sdklanguage = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE);
|
||||||
|
/** @var Attribute $sdkversion */
|
||||||
|
$sdkversion = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_VERSION);
|
||||||
|
/** @var Attribute $servicename */
|
||||||
|
$servicename = $attributes->getAttribute(ResourceConstants::SERVICE_NAME);
|
||||||
|
/** @var Attribute $serviceversion */
|
||||||
|
$serviceversion = $attributes->getAttribute(ResourceConstants::SERVICE_VERSION);
|
||||||
|
|
||||||
|
/** @var Attribute $primary */
|
||||||
|
$primary = $attributes->getAttribute('provider');
|
||||||
|
/** @var Attribute $empty */
|
||||||
|
$empty = $attributes->getAttribute('empty');
|
||||||
|
$this->assertEquals('primary', $primary->getValue());
|
||||||
|
$this->assertEquals('', $empty->getValue());
|
||||||
|
|
||||||
|
$this->assertEquals('opentelemetry', $sdkname->getValue());
|
||||||
|
$this->assertEquals('php', $sdklanguage->getValue());
|
||||||
|
$this->assertEquals('dev', $sdkversion->getValue());
|
||||||
|
$this->assertEquals('name', $servicename->getValue());
|
||||||
|
$this->assertEquals('', $serviceversion->getValue());
|
||||||
|
|
||||||
|
$this->assertCount(8, $attributes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreateSpanGetsResourceFromDefaultTraceProviderNonDefaultTrace()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* A resource can be associated with the TracerProvider when the TracerProvider is created.
|
||||||
|
* That association cannot be changed later. When associated with a TracerProvider, all
|
||||||
|
* Spans produced by any Tracer from the provider MUST be associated with this Resource.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Create a new provider.
|
||||||
|
$traceProvider = new TracerProvider();
|
||||||
|
$tpAttributes = $traceProvider->getResource()->getAttributes();
|
||||||
|
|
||||||
|
// Verify the resource associated with the trace provider.
|
||||||
|
$this->assertCount(0, $tpAttributes);
|
||||||
|
|
||||||
|
// Add a Tracer. The trace provider should merge its resource one inherited from the traceprovider.
|
||||||
|
/** @var Tracer $tracer */
|
||||||
|
$tracer = $traceProvider->getTracer('name', 'version');
|
||||||
|
$resource = $tracer->getResource();
|
||||||
|
$attributes = $resource->getAttributes();
|
||||||
|
|
||||||
|
// Verify the resource associated with the tracer.
|
||||||
|
/** @var Attribute $sdkname */
|
||||||
|
$sdkname = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_NAME);
|
||||||
|
/** @var Attribute $sdklanguage */
|
||||||
|
$sdklanguage = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE);
|
||||||
|
/** @var Attribute $sdkversion */
|
||||||
|
$sdkversion = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_VERSION);
|
||||||
|
/** @var Attribute $servicename */
|
||||||
|
$servicename = $attributes->getAttribute(ResourceConstants::SERVICE_NAME);
|
||||||
|
/** @var Attribute $serviceversion */
|
||||||
|
$serviceversion = $attributes->getAttribute(ResourceConstants::SERVICE_VERSION);
|
||||||
|
|
||||||
|
$this->assertEquals('opentelemetry', $sdkname->getValue());
|
||||||
|
$this->assertEquals('php', $sdklanguage->getValue());
|
||||||
|
$this->assertEquals('dev', $sdkversion->getValue());
|
||||||
|
$this->assertEquals('name', $servicename->getValue());
|
||||||
|
$this->assertEquals('version', $serviceversion->getValue());
|
||||||
|
|
||||||
|
$this->assertCount(6, $attributes);
|
||||||
|
|
||||||
|
// Start a span with the tracer.
|
||||||
|
$tracer->startAndActivateSpan('firstSpan');
|
||||||
|
|
||||||
|
/** @var Span $global */
|
||||||
|
$global = $tracer->getActiveSpan();
|
||||||
|
$this->assertSame($tracer->getActiveSpan(), $global);
|
||||||
|
|
||||||
|
// Verify the resource associated with the span.
|
||||||
|
|
||||||
|
$attributes = $global->getResource()->getAttributes();
|
||||||
|
|
||||||
|
/** @var Attribute $sdkname */
|
||||||
|
$sdkname = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_NAME);
|
||||||
|
/** @var Attribute $sdklanguage */
|
||||||
|
$sdklanguage = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_LANGUAGE);
|
||||||
|
/** @var Attribute $sdkversion */
|
||||||
|
$sdkversion = $resource->getAttributes()->getAttribute(ResourceConstants::TELEMETRY_SDK_VERSION);
|
||||||
|
/** @var Attribute $servicename */
|
||||||
|
$servicename = $attributes->getAttribute(ResourceConstants::SERVICE_NAME);
|
||||||
|
/** @var Attribute $serviceversion */
|
||||||
|
$serviceversion = $attributes->getAttribute(ResourceConstants::SERVICE_VERSION);
|
||||||
|
|
||||||
|
$this->assertEquals('opentelemetry', $sdkname->getValue());
|
||||||
|
$this->assertEquals('php', $sdklanguage->getValue());
|
||||||
|
$this->assertEquals('dev', $sdkversion->getValue());
|
||||||
|
$this->assertEquals('name', $servicename->getValue());
|
||||||
|
$this->assertEquals('version', $serviceversion->getValue());
|
||||||
|
|
||||||
|
$this->assertCount(6, $attributes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue