ttrss/vendor/open-telemetry/sdk/Trace/SpanProcessor/MultiSpanProcessor.php

80 lines
2.1 KiB
PHP

<?php
declare(strict_types=1);
namespace OpenTelemetry\SDK\Trace\SpanProcessor;
use OpenTelemetry\Context\ContextInterface;
use OpenTelemetry\SDK\Common\Future\CancellationInterface;
use OpenTelemetry\SDK\Trace\ReadableSpanInterface;
use OpenTelemetry\SDK\Trace\ReadWriteSpanInterface;
use OpenTelemetry\SDK\Trace\SpanProcessorInterface;
/**
* Class SpanMultiProcessor is a SpanProcessor that forwards all events to an
* array of SpanProcessors.
*/
final class MultiSpanProcessor implements SpanProcessorInterface
{
/** @var list<SpanProcessorInterface> */
private array $processors = [];
public function __construct(SpanProcessorInterface ...$spanProcessors)
{
foreach ($spanProcessors as $processor) {
$this->addSpanProcessor($processor);
}
}
public function addSpanProcessor(SpanProcessorInterface $processor): void
{
$this->processors[] = $processor;
}
/** @return list<SpanProcessorInterface> */
public function getSpanProcessors(): array
{
return $this->processors;
}
/** @inheritDoc */
public function onStart(ReadWriteSpanInterface $span, ContextInterface $parentContext): void
{
foreach ($this->processors as $processor) {
$processor->onStart($span, $parentContext);
}
}
/** @inheritDoc */
public function onEnd(ReadableSpanInterface $span): void
{
foreach ($this->processors as $processor) {
$processor->onEnd($span);
}
}
/** @inheritDoc */
public function shutdown(?CancellationInterface $cancellation = null): bool
{
$result = true;
foreach ($this->processors as $processor) {
$result = $result && $processor->shutdown();
}
return $result;
}
/** @inheritDoc */
public function forceFlush(?CancellationInterface $cancellation = null): bool
{
$result = true;
foreach ($this->processors as $processor) {
$result = $result && $processor->forceFlush();
}
return $result;
}
}