101 lines
2.5 KiB
PHP
101 lines
2.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace OpenTelemetry\SDK\Trace;
|
|
|
|
use OpenTelemetry\API\Trace as API; /** @phan-suppress-current-line PhanUnreferencedUseNormal */
|
|
use OpenTelemetry\SDK\Common\Future\CancellationInterface;
|
|
use OpenTelemetry\SDK\Resource\ResourceInfo;
|
|
use OpenTelemetry\SDK\Trace\SpanProcessor\MultiSpanProcessor;
|
|
use OpenTelemetry\SDK\Trace\SpanProcessor\NoopSpanProcessor;
|
|
|
|
/**
|
|
* Stores shared state/config between all {@see API\TracerInterface} created via the same {@see API\TracerProviderInterface}.
|
|
*/
|
|
final class TracerSharedState
|
|
{
|
|
/** @readonly */
|
|
private IdGeneratorInterface $idGenerator;
|
|
|
|
/** @readonly */
|
|
private ResourceInfo $resource;
|
|
|
|
/** @readonly */
|
|
private SpanLimits $spanLimits;
|
|
|
|
/** @readonly */
|
|
private SamplerInterface $sampler;
|
|
|
|
/** @readonly */
|
|
private SpanProcessorInterface $spanProcessor;
|
|
|
|
private ?bool $shutdownResult = null;
|
|
|
|
public function __construct(
|
|
IdGeneratorInterface $idGenerator,
|
|
ResourceInfo $resource,
|
|
SpanLimits $spanLimits,
|
|
SamplerInterface $sampler,
|
|
array $spanProcessors
|
|
) {
|
|
$this->idGenerator = $idGenerator;
|
|
$this->resource = $resource;
|
|
$this->spanLimits = $spanLimits;
|
|
$this->sampler = $sampler;
|
|
|
|
switch (count($spanProcessors)) {
|
|
case 0:
|
|
$this->spanProcessor = NoopSpanProcessor::getInstance();
|
|
|
|
break;
|
|
case 1:
|
|
$this->spanProcessor = $spanProcessors[0];
|
|
|
|
break;
|
|
default:
|
|
$this->spanProcessor = new MultiSpanProcessor(...$spanProcessors);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
public function hasShutdown(): bool
|
|
{
|
|
return null !== $this->shutdownResult;
|
|
}
|
|
|
|
public function getIdGenerator(): IdGeneratorInterface
|
|
{
|
|
return $this->idGenerator;
|
|
}
|
|
|
|
public function getResource(): ResourceInfo
|
|
{
|
|
return $this->resource;
|
|
}
|
|
|
|
public function getSpanLimits(): SpanLimits
|
|
{
|
|
return $this->spanLimits;
|
|
}
|
|
|
|
public function getSampler(): SamplerInterface
|
|
{
|
|
return $this->sampler;
|
|
}
|
|
|
|
public function getSpanProcessor(): SpanProcessorInterface
|
|
{
|
|
return $this->spanProcessor;
|
|
}
|
|
|
|
/**
|
|
* Returns `false` is the provider is already shutdown, otherwise `true`.
|
|
*/
|
|
public function shutdown(?CancellationInterface $cancellation = null): bool
|
|
{
|
|
return $this->shutdownResult ?? ($this->shutdownResult = $this->spanProcessor->shutdown($cancellation));
|
|
}
|
|
}
|