@opentelemetry/context-async-hooks
Advanced tools
Comparing version 1.0.1 to 1.1.0
@@ -1,2 +0,2 @@ | ||
export declare const VERSION = "1.0.1"; | ||
export declare const VERSION = "1.1.0"; | ||
//# sourceMappingURL=version.d.ts.map |
@@ -20,3 +20,3 @@ "use strict"; | ||
// this is autogenerated file, see scripts/version-update.js | ||
exports.VERSION = '1.0.1'; | ||
exports.VERSION = '1.1.0'; | ||
//# sourceMappingURL=version.js.map |
{ | ||
"name": "@opentelemetry/context-async-hooks", | ||
"version": "1.0.1", | ||
"version": "1.1.0", | ||
"description": "OpenTelemetry AsyncHooks-based Context Manager", | ||
@@ -17,3 +17,3 @@ "main": "build/src/index.js", | ||
"version": "node ../../scripts/version-update.js", | ||
"precompile": "lerna run version --scope $(npm pkg get name) --include-filtered-dependencies", | ||
"precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", | ||
"prewatch": "npm run precompile" | ||
@@ -46,5 +46,5 @@ }, | ||
"devDependencies": { | ||
"@opentelemetry/api": "~1.0.3", | ||
"@opentelemetry/api": "~1.1.0", | ||
"@types/mocha": "8.2.3", | ||
"@types/node": "14.17.11", | ||
"@types/node": "14.17.33", | ||
"codecov": "3.8.3", | ||
@@ -55,8 +55,8 @@ "mocha": "7.2.0", | ||
"ts-mocha": "8.0.0", | ||
"typescript": "4.3.5" | ||
"typescript": "4.4.4" | ||
}, | ||
"peerDependencies": { | ||
"@opentelemetry/api": ">=1.0.0 <1.1.0" | ||
"@opentelemetry/api": ">=1.0.0 <1.2.0" | ||
}, | ||
"gitHead": "9cf402ee4231ee1446884b5f59958ceafc1b5188" | ||
"gitHead": "f384303ac469914d0dbafde0758ccdae473f336e" | ||
} |
@@ -1,39 +0,43 @@ | ||
# OpenTelemetry AsyncHooks-based Context Manager | ||
# OpenTelemetry async_hooks-based Context Managers | ||
[![NPM Published Version][npm-img]][npm-url] | ||
[![dependencies][dependencies-image]][dependencies-url] | ||
[![devDependencies][devDependencies-image]][devDependencies-url] | ||
[![Apache License][license-image]][license-image] | ||
This package provides [async-hooks][async-hooks-doc] based context manager which is used internally by OpenTelemetry plugins to propagate specific context between function calls and async operations. It only targets NodeJS since async-hooks is only available there. | ||
This package provides two [`ContextManager`](https://open-telemetry.github.io/opentelemetry-js-api/interfaces/contextmanager.html) implementations built on APIs from Node.js's [`async_hooks`][async-hooks-doc] module. If you're looking for a `ContextManager` to use in browser environments, consider [opentelemetry-context-zone](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-context-zone) or [opentelemetry-context-zone-peer-dep](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-context-zone-peer-dep). | ||
## What is a ContextManager | ||
The definition of the `ContextManager` interface and the problem it solves can be found [here](def-context-manager). | ||
The definition and why they exist is available on [the readme of the context-base package][def-context-manager]. | ||
## API | ||
### Implementation in NodeJS | ||
Two `ContextManager` implementations are exported: | ||
NodeJS has a specific API to track async context: [async-hooks][async-hooks-doc], it allows to track creation of new async operation and their respective parent. | ||
This package only handle storing a specific object for a given async hooks context. | ||
* `AsyncLocalStorageContextManager`, based on [`AsyncLocalStorage`](https://nodejs.org/api/async_context.html#class-asynclocalstorage) | ||
* `AsyncHooksContextManager`, based on [`AsyncHook`](https://nodejs.org/api/async_hooks.html#async_hooks_class_asynchook) | ||
### Limitations | ||
The former should be preferred over the latter as its implementation is substantially simpler than the latter's, and according to [Node.js docs](https://github.com/nodejs/node/blame/v17.1.0/doc/api/async_context.md#L42-L45), | ||
Even if the API is native to NodeJS, it doesn't cover all possible cases of context propagation but there is a big effort from the NodeJS team to fix those. That's why we generally advise to be on the latest LTS to benefit from performance and bug fixes. | ||
> While you can create your own implementation [of `AsyncLocalStorage`] on top of [`AsyncHook`], `AsyncLocalStorage` should be preferred as it is a performant and memory safe implementation that involves significant optimizations that are non-obvious to implement. | ||
There are known modules that break context propagation ([some of them are listed there][pkgs-that-break-ah]), so it's possible that the context manager doesn't work with them. | ||
`AsyncLocalStorage` is available in node `^12.17.0 || >= 13.10.0`, however `AsyncLocalStorageContextManager` is not enabled by default for node `<14.8.0` because of some important bugfixes which were introduced in `v14.8.0` (e.g., [nodejs/node#34573](https://github.com/nodejs/node/pull/34573)). | ||
### Prior arts | ||
## Limitations | ||
Context propagation is a big subject when talking about tracing in NodeJS, if you want more information about that here are some resources: | ||
It's possible that this package won't track context perfectly when used with certain packages. In particular, it inherits any bugs present in async_hooks. See [here][pkgs-that-break-ah] for known issues. | ||
- <https://www.npmjs.com/package/continuation-local-storage> (which was the old way of doing context propagation) | ||
- Datadog's own implementation for their Javascript tracer: [here][dd-js-tracer-scope] | ||
- OpenTracing implementation: [here][opentracing-scope] | ||
- Discussion about context propagation by the NodeJS diagnostics working group: [here][diag-team-scope-discussion] | ||
async_hooks is still seeing significant correctness and performance fixes, it's recommended to run the latest Node.js LTS release to benefit from said fixes. | ||
## Prior art | ||
Context propagation is a big subject when talking about tracing in Node.js. If you want more information about it here are some resources: | ||
* <https://www.npmjs.com/package/continuation-local-storage> (which was the old way of doing context propagation) | ||
* Datadog's own implementation for their JavaScript tracer: [here][dd-js-tracer-scope] | ||
* OpenTracing implementation: [here][opentracing-scope] | ||
* Discussion about context propagation by the Node.js Diagnostics Working Group: [here][diag-team-scope-discussion] | ||
## Useful links | ||
- For more information on OpenTelemetry, visit: <https://opentelemetry.io/> | ||
- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js> | ||
- For help or feedback on this project, join us in [GitHub Discussions][discussions-url] | ||
* For more information on OpenTelemetry, visit: <https://opentelemetry.io/> | ||
* For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js> | ||
* For help or feedback on this project, join us in [GitHub Discussions][discussions-url] | ||
@@ -47,13 +51,9 @@ ## License | ||
[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat | ||
[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-context-async-hooks | ||
[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-context-async-hooks | ||
[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-context-async-hooks&type=dev | ||
[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-context-async-hooks&type=dev | ||
[async-hooks-doc]: http://nodejs.org/dist/latest/docs/api/async_hooks.html | ||
[def-context-manager]: https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-context-base/README.md | ||
[dd-js-tracer-scope]: https://github.com/DataDog/dd-trace-js/tree/main/packages/dd-trace/src/scope | ||
[def-context-manager]: https://opentelemetry.io/docs/instrumentation/js/api/context/#context-manager | ||
[dd-js-tracer-scope]: https://github.com/DataDog/dd-trace-js/blob/master/packages/dd-trace/src/scope.js | ||
[opentracing-scope]: https://github.com/opentracing/opentracing-javascript/pull/113 | ||
[diag-team-scope-discussion]: https://github.com/nodejs/diagnostics/issues/300 | ||
[pkgs-that-break-ah]: https://github.com/nodejs/diagnostics/blob/master/tracing/AsyncHooks/problematic-modules.md | ||
[pkgs-that-break-ah]: https://github.com/nodejs/diagnostics/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aasync-continuity | ||
[npm-url]: https://www.npmjs.com/package/@opentelemetry/context-async-hooks | ||
[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fcontext-async-hooks.svg |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
57006