summaryrefslogtreecommitdiff
path: root/vendor/open-telemetry/api/Trace/Span.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/open-telemetry/api/Trace/Span.php')
-rw-r--r--vendor/open-telemetry/api/Trace/Span.php59
1 files changed, 59 insertions, 0 deletions
diff --git a/vendor/open-telemetry/api/Trace/Span.php b/vendor/open-telemetry/api/Trace/Span.php
new file mode 100644
index 000000000..88360e6cd
--- /dev/null
+++ b/vendor/open-telemetry/api/Trace/Span.php
@@ -0,0 +1,59 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\API\Trace;
+
+use OpenTelemetry\Context\Context;
+use OpenTelemetry\Context\ContextInterface;
+use OpenTelemetry\Context\ContextKeys;
+use OpenTelemetry\Context\ScopeInterface;
+
+abstract class Span implements SpanInterface
+{
+ private static ?self $invalidSpan = null;
+
+ /** @inheritDoc */
+ final public static function fromContext(ContextInterface $context): SpanInterface
+ {
+ return $context->get(ContextKeys::span()) ?? self::getInvalid();
+ }
+
+ /** @inheritDoc */
+ final public static function getCurrent(): SpanInterface
+ {
+ return self::fromContext(Context::getCurrent());
+ }
+
+ /** @inheritDoc */
+ final public static function getInvalid(): SpanInterface
+ {
+ if (null === self::$invalidSpan) {
+ self::$invalidSpan = new NonRecordingSpan(SpanContext::getInvalid());
+ }
+
+ return self::$invalidSpan;
+ }
+
+ /** @inheritDoc */
+ final public static function wrap(SpanContextInterface $spanContext): SpanInterface
+ {
+ if (!$spanContext->isValid()) {
+ return self::getInvalid();
+ }
+
+ return new NonRecordingSpan($spanContext);
+ }
+
+ /** @inheritDoc */
+ final public function activate(): ScopeInterface
+ {
+ return Context::getCurrent()->withContextValue($this)->activate();
+ }
+
+ /** @inheritDoc */
+ final public function storeInContext(ContextInterface $context): ContextInterface
+ {
+ return $context->with(ContextKeys::span(), $this);
+ }
+}