@opentelemetry/propagator-b3
Advanced tools
Comparing version 0.18.3-alpha.2 to 0.18.3-alpha.3
import { Context, TextMapGetter, TextMapPropagator, TextMapSetter } from '@opentelemetry/api'; | ||
export declare const X_B3_TRACE_ID = "x-b3-traceid"; | ||
export declare const X_B3_SPAN_ID = "x-b3-spanid"; | ||
export declare const X_B3_SAMPLED = "x-b3-sampled"; | ||
export declare const X_B3_PARENT_SPAN_ID = "x-b3-parentspanid"; | ||
export declare const X_B3_FLAGS = "x-b3-flags"; | ||
export declare function parseHeader(header: unknown): any; | ||
@@ -8,0 +3,0 @@ /** |
@@ -18,11 +18,6 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.B3MultiPropagator = exports.parseHeader = exports.X_B3_FLAGS = exports.X_B3_PARENT_SPAN_ID = exports.X_B3_SAMPLED = exports.X_B3_SPAN_ID = exports.X_B3_TRACE_ID = void 0; | ||
exports.B3MultiPropagator = exports.parseHeader = void 0; | ||
const api_1 = require("@opentelemetry/api"); | ||
const constants_1 = require("./constants"); | ||
const common_1 = require("./common"); | ||
/* b3 multi-header keys */ | ||
exports.X_B3_TRACE_ID = 'x-b3-traceid'; | ||
exports.X_B3_SPAN_ID = 'x-b3-spanid'; | ||
exports.X_B3_SAMPLED = 'x-b3-sampled'; | ||
exports.X_B3_PARENT_SPAN_ID = 'x-b3-parentspanid'; | ||
exports.X_B3_FLAGS = 'x-b3-flags'; | ||
const VALID_SAMPLED_VALUES = new Set([true, 'true', 'True', '1', 1]); | ||
@@ -42,3 +37,3 @@ const VALID_UNSAMPLED_VALUES = new Set([false, 'false', 'False', '0', 0]); | ||
function getTraceId(carrier, getter) { | ||
const traceId = getHeaderValue(carrier, getter, exports.X_B3_TRACE_ID); | ||
const traceId = getHeaderValue(carrier, getter, constants_1.X_B3_TRACE_ID); | ||
if (typeof traceId === 'string') { | ||
@@ -50,3 +45,3 @@ return traceId.padStart(32, '0'); | ||
function getSpanId(carrier, getter) { | ||
const spanId = getHeaderValue(carrier, getter, exports.X_B3_SPAN_ID); | ||
const spanId = getHeaderValue(carrier, getter, constants_1.X_B3_SPAN_ID); | ||
if (typeof spanId === 'string') { | ||
@@ -58,7 +53,7 @@ return spanId; | ||
function getDebug(carrier, getter) { | ||
const debug = getHeaderValue(carrier, getter, exports.X_B3_FLAGS); | ||
const debug = getHeaderValue(carrier, getter, constants_1.X_B3_FLAGS); | ||
return debug === '1' ? '1' : undefined; | ||
} | ||
function getTraceFlags(carrier, getter) { | ||
const traceFlags = getHeaderValue(carrier, getter, exports.X_B3_SAMPLED); | ||
const traceFlags = getHeaderValue(carrier, getter, constants_1.X_B3_SAMPLED); | ||
const debug = getDebug(carrier, getter); | ||
@@ -84,8 +79,8 @@ if (debug === '1' || VALID_SAMPLED_VALUES.has(traceFlags)) { | ||
const debug = context.getValue(common_1.B3_DEBUG_FLAG_KEY); | ||
setter.set(carrier, exports.X_B3_TRACE_ID, spanContext.traceId); | ||
setter.set(carrier, exports.X_B3_SPAN_ID, spanContext.spanId); | ||
setter.set(carrier, constants_1.X_B3_TRACE_ID, spanContext.traceId); | ||
setter.set(carrier, constants_1.X_B3_SPAN_ID, spanContext.spanId); | ||
// According to the B3 spec, if the debug flag is set, | ||
// the sampled flag shouldn't be propagated as well. | ||
if (debug === '1') { | ||
setter.set(carrier, exports.X_B3_FLAGS, debug); | ||
setter.set(carrier, constants_1.X_B3_FLAGS, debug); | ||
} | ||
@@ -95,3 +90,3 @@ else if (spanContext.traceFlags !== undefined) { | ||
// Otherwise we will omit it => Absent. | ||
setter.set(carrier, exports.X_B3_SAMPLED, (api_1.TraceFlags.SAMPLED & spanContext.traceFlags) === api_1.TraceFlags.SAMPLED | ||
setter.set(carrier, constants_1.X_B3_SAMPLED, (api_1.TraceFlags.SAMPLED & spanContext.traceFlags) === api_1.TraceFlags.SAMPLED | ||
? '1' | ||
@@ -121,7 +116,7 @@ : '0'); | ||
return [ | ||
exports.X_B3_TRACE_ID, | ||
exports.X_B3_SPAN_ID, | ||
exports.X_B3_FLAGS, | ||
exports.X_B3_SAMPLED, | ||
exports.X_B3_PARENT_SPAN_ID, | ||
constants_1.X_B3_TRACE_ID, | ||
constants_1.X_B3_SPAN_ID, | ||
constants_1.X_B3_FLAGS, | ||
constants_1.X_B3_SAMPLED, | ||
constants_1.X_B3_PARENT_SPAN_ID, | ||
]; | ||
@@ -128,0 +123,0 @@ } |
@@ -21,2 +21,3 @@ "use strict"; | ||
const B3SinglePropagator_1 = require("./B3SinglePropagator"); | ||
const constants_1 = require("./constants"); | ||
const types_1 = require("./types"); | ||
@@ -47,3 +48,3 @@ /** | ||
extract(context, carrier, getter) { | ||
if (getter.get(carrier, B3SinglePropagator_1.B3_CONTEXT_HEADER)) { | ||
if (getter.get(carrier, constants_1.B3_CONTEXT_HEADER)) { | ||
return this._b3SinglePropagator.extract(context, carrier, getter); | ||
@@ -50,0 +51,0 @@ } |
import { Context, TextMapGetter, TextMapPropagator, TextMapSetter } from '@opentelemetry/api'; | ||
/** B3 single-header name */ | ||
export declare const B3_CONTEXT_HEADER = "b3"; | ||
/** | ||
@@ -5,0 +3,0 @@ * Propagator for the B3 single-header HTTP format. |
@@ -18,7 +18,6 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.B3SinglePropagator = exports.B3_CONTEXT_HEADER = void 0; | ||
exports.B3SinglePropagator = void 0; | ||
const api_1 = require("@opentelemetry/api"); | ||
const constants_1 = require("./constants"); | ||
const common_1 = require("./common"); | ||
/** B3 single-header name */ | ||
exports.B3_CONTEXT_HEADER = 'b3'; | ||
const B3_CONTEXT_REGEX = /((?:[0-9a-f]{16}){1,2})-([0-9a-f]{16})(?:-([01d](?![0-9a-f])))?(?:-([0-9a-f]{16}))?/; | ||
@@ -48,6 +47,6 @@ const PADDING = '0'.repeat(16); | ||
const value = `${spanContext.traceId}-${spanContext.spanId}-${samplingState}`; | ||
setter.set(carrier, exports.B3_CONTEXT_HEADER, value); | ||
setter.set(carrier, constants_1.B3_CONTEXT_HEADER, value); | ||
} | ||
extract(context, carrier, getter) { | ||
const header = getter.get(carrier, exports.B3_CONTEXT_HEADER); | ||
const header = getter.get(carrier, constants_1.B3_CONTEXT_HEADER); | ||
const b3Context = Array.isArray(header) ? header[0] : header; | ||
@@ -75,3 +74,3 @@ if (typeof b3Context !== 'string') | ||
fields() { | ||
return [exports.B3_CONTEXT_HEADER]; | ||
return [constants_1.B3_CONTEXT_HEADER]; | ||
} | ||
@@ -78,0 +77,0 @@ } |
export * from './B3Propagator'; | ||
export * from './B3SinglePropagator'; | ||
export * from './B3MultiPropagator'; | ||
export * from './constants'; | ||
export * from './types'; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -29,5 +29,4 @@ "use strict"; | ||
__exportStar(require("./B3Propagator"), exports); | ||
__exportStar(require("./B3SinglePropagator"), exports); | ||
__exportStar(require("./B3MultiPropagator"), exports); | ||
__exportStar(require("./constants"), exports); | ||
__exportStar(require("./types"), exports); | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "@opentelemetry/propagator-b3", | ||
"version": "0.18.3-alpha.2+2409f1cd", | ||
"version": "0.18.3-alpha.3+853fcb94", | ||
"description": "OpenTelemetry B3 propagator provides context propagation for systems that are using the B3 header format", | ||
@@ -46,3 +46,3 @@ "main": "build/src/index.js", | ||
"@types/mocha": "8.2.2", | ||
"@types/node": "14.14.35", | ||
"@types/node": "14.14.37", | ||
"codecov": "3.8.1", | ||
@@ -54,7 +54,7 @@ "gts": "3.1.0", | ||
"rimraf": "3.0.2", | ||
"ts-loader": "8.0.18", | ||
"ts-loader": "8.1.0", | ||
"ts-mocha": "8.0.0", | ||
"typescript": "4.2.3" | ||
}, | ||
"gitHead": "2409f1cdddd92c23548c18c055a6a36efe36349f" | ||
"gitHead": "853fcb94cd96cea0bd1af18cddb355345f76adad" | ||
} |
@@ -68,13 +68,11 @@ # OpenTelemetry Propagator B3 | ||
## Propagator Implementations | ||
## B3 Propagation | ||
### B3Propagator | ||
The default `B3Propagator` implements b3 propagation according to the | ||
[OpenTelemetry specification][otel-b3-requirements]. It extracts b3 context | ||
from multi and single header encodings and injects context using the | ||
single-header b3 encoding. The inject encoding can be changed to multi-header | ||
via configuration. | ||
single-header b3 encoding by default. The inject encoding can be changed to | ||
multi-header via configuration. See the examples below. | ||
Example usage (default): | ||
### B3 Single-Header Configuration | ||
@@ -88,3 +86,3 @@ ```javascript | ||
Example usage (specify inject encoding): | ||
### B3 Multi-Header Configuration | ||
@@ -100,49 +98,17 @@ ```javascript | ||
### B3SinglePropagator | ||
### B3 Single and Multi-Header Configuration | ||
If a distributed system only needs support for the b3 single-header | ||
encoding it can use the `B3SinglePropagator` directly. | ||
The B3Propagator always extracts both the single and multi-header b3 encodings. | ||
If you need to inject both encodings this can accomplished using a composite | ||
propagator. | ||
Example usage: | ||
```javascript | ||
const api = require('@opentelemetry/api'); | ||
const { B3SinglePropagator } = require('@opentelemetry/propagator-b3'); | ||
api.propagation.setGlobalPropagator(new B3SinglePropagator()); | ||
``` | ||
### B3MultiPropagator | ||
If a distributed system only needs support for the b3 multi-header | ||
encoding it can use the `B3MultiPropagator` directly. | ||
Example usage: | ||
```javascript | ||
const api = require('@opentelemetry/api'); | ||
const { B3MultiPropagator } = require('@opentelemetry/propagator-b3'); | ||
api.propagation.setGlobalPropagator(new B3MultiPropagator()); | ||
``` | ||
### CompositePropagator | ||
If a distributed system needs to support both single and multiple header | ||
encodings for inject and extract the `B3SinglePropagator` and | ||
`B3MultiPropagator` can be used in conjunction with a `CompositePropagator`. | ||
Example usage: | ||
```javascript | ||
const api = require('@opentelemetry/api'); | ||
const { CompositePropagator } = require('@opentelemetry/core'); | ||
const { | ||
B3SinglePropagator, | ||
B3MultiPropagator, | ||
} = require('@opentelemetry/propagator-b3'); | ||
const { B3Propagator } = require('@opentelemetry/propagator-b3'); | ||
api.propagation.setGlobalPropagator( | ||
new CompositePropagator({ | ||
propagators: [new B3SinglePropagator(), new B3MultiPropagator()], | ||
propagators: [ | ||
new B3Propagator(), | ||
new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }), | ||
], | ||
}) | ||
@@ -149,0 +115,0 @@ ); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
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
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
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
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
43774
27
434
137