What is @opentelemetry/context-base?
@opentelemetry/context-base is a package that provides a base implementation for context management in OpenTelemetry. It allows for the creation, management, and propagation of context across different parts of an application, which is essential for distributed tracing and telemetry data collection.
What are @opentelemetry/context-base's main functionalities?
Creating a Context
This feature allows you to create a new context instance. Contexts are used to store and propagate data across different parts of an application.
const { BaseContext } = require('@opentelemetry/context-base');
const context = new BaseContext();
console.log(context);
Setting and Getting Values in Context
This feature allows you to set and get values in a context. This is useful for storing data that needs to be accessed across different parts of an application.
const { BaseContext } = require('@opentelemetry/context-base');
const context = new BaseContext();
const key = 'exampleKey';
const value = 'exampleValue';
const updatedContext = context.setValue(key, value);
console.log(updatedContext.getValue(key)); // Outputs: 'exampleValue'
Context Propagation
This feature demonstrates how context can be propagated across different functions or parts of an application. This is essential for maintaining state and data consistency in distributed systems.
const { BaseContext } = require('@opentelemetry/context-base');
const context = new BaseContext();
const key = 'exampleKey';
const value = 'exampleValue';
const updatedContext = context.setValue(key, value);
function someFunction(ctx) {
console.log(ctx.getValue(key)); // Outputs: 'exampleValue'
}
someFunction(updatedContext);
Other packages similar to @opentelemetry/context-base
async_hooks
The 'async_hooks' module in Node.js provides an API to track asynchronous resources. It allows you to create and manage execution contexts, similar to @opentelemetry/context-base. However, 'async_hooks' is more low-level and is part of the Node.js core, whereas @opentelemetry/context-base is specifically designed for telemetry and tracing.
cls-hooked
The 'cls-hooked' package provides a way to manage context across asynchronous calls using continuation-local storage. It is similar to @opentelemetry/context-base in that it allows for context propagation, but it uses a different mechanism and is not specifically designed for telemetry.
zone.js
The 'zone.js' library provides a way to manage execution contexts in JavaScript applications. It is similar to @opentelemetry/context-base in that it allows for context management and propagation, but it is more commonly used in Angular applications for managing asynchronous operations.
OpenTelemetry Base Context Manager
This package provides the ContextManager interface (which is used by concrete implementations) and a no-op implementation (which is used internally when no context propagation is defined). It's intended for use both on the server and in the browser.
What is a Context Manager
To understand why they exists, we'll need to understand how Javascript works: when you make native function call (networks, setInterval etc) you generally call C++ code that will later callback your own code.
A common issue when tracing a request in javascript is to link the function that have made the native call to the callback that the native code called when the response is there. Imagine you want to track for which user you made the request, you need some sort of "context/context aware storage".
ContextManager's aim to offer exactly that, it's API offer to store an object in the current context (with()
) and if needed, bind()
to a specific function call to find it back when the callback fire, which can later get retrieved using active()
.
This package only include the interface and a Noop implementation, for more information please see the async-hooks based ContextManager for NodeJS.
Useful links
License
Apache 2.0 - See LICENSE for more information.