cdd7ad020e | ||
---|---|---|
.. | ||
Propagation | ||
fiber | ||
Context.php | ||
ContextInterface.php | ||
ContextKey.php | ||
ContextKeyInterface.php | ||
ContextKeys.php | ||
ContextStorage.php | ||
ContextStorageHead.php | ||
ContextStorageInterface.php | ||
ContextStorageNode.php | ||
ContextStorageScopeInterface.php | ||
DebugScope.php | ||
ExecutionContextAwareInterface.php | ||
FiberBoundContextStorage.php | ||
FiberBoundContextStorageScope.php | ||
ImplicitContextKeyedInterface.php | ||
README.md | ||
ScopeInterface.php | ||
ZendObserverFiber.php | ||
composer.json |
README.md
OpenTelemetry Context
Immutable execution scoped propagation mechanism, for further details see opentelemetry-specification.
Installation
composer require open-telemetry/context
Usage
Implicit propagation
$context = Context::getCurrent();
// modify context
$scope = $context->activate();
try {
// run within new context
} finally {
$scope->detach();
}
It is recommended to use a try-finally
statement after ::activate()
to ensure that the created scope is properly ::detach()
ed.
Async applications
Fiber support
Requires PHP >= 8.1
, an NTS build, ext-ffi
, and setting the environment variable OTEL_PHP_FIBERS_ENABLED
to a truthy value. Additionally vendor/autoload.php
has to be preloaded for non-CLI SAPIs if ffi.enable
is set to preload
.
Event loops
Event loops have to restore the original context on callback execution. A basic implementation could look like the following, though implementations should avoid keeping unnecessary references to arguments if possible:
function bindContext(Closure $closure): Closure {
$context = Context::getCurrent();
return static function (mixed ...$args) use ($closure, $context): mixed {
$scope = $context->activate();
try {
return $closure(...$args);
} finally {
$scope->detach();
}
};
}
Contributing
This repository is a read-only git subtree split. To contribute, please see the main OpenTelemetry PHP monorepo.