-
Notifications
You must be signed in to change notification settings - Fork 176
/
AbstractSpan.php
61 lines (48 loc) · 1.5 KB
/
AbstractSpan.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
declare(strict_types=1);
namespace OpenTelemetry\API\Trace;
use OpenTelemetry\Context\Context;
use OpenTelemetry\Context\ScopeInterface;
abstract class AbstractSpan implements SpanInterface
{
private static ?self $invalidSpan = null;
/** @inheritDoc */
final public static function fromContext(Context $context): SpanInterface
{
if ($span = $context->get(SpanContextKey::instance())) {
return $span;
}
return NonRecordingSpan::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(Context $context): Context
{
return $context->with(SpanContextKey::instance(), $this);
}
}