summaryrefslogtreecommitdiff
path: root/vendor/open-telemetry/sdk/Trace/SpanProcessor/MultiSpanProcessor.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/open-telemetry/sdk/Trace/SpanProcessor/MultiSpanProcessor.php')
-rw-r--r--vendor/open-telemetry/sdk/Trace/SpanProcessor/MultiSpanProcessor.php79
1 files changed, 79 insertions, 0 deletions
diff --git a/vendor/open-telemetry/sdk/Trace/SpanProcessor/MultiSpanProcessor.php b/vendor/open-telemetry/sdk/Trace/SpanProcessor/MultiSpanProcessor.php
new file mode 100644
index 000000000..e690791f2
--- /dev/null
+++ b/vendor/open-telemetry/sdk/Trace/SpanProcessor/MultiSpanProcessor.php
@@ -0,0 +1,79 @@
+<?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;
+ }
+}