dd-trace
Version:
Datadog APM tracing client for JavaScript
48 lines (33 loc) • 1.21 kB
JavaScript
const pick = require('../../../../datadog-core/src/utils/src/pick')
const log = require('../../log')
const { DsmPathwayCodec } = require('../../datastreams')
const base64Key = 'dd-pathway-ctx-base64'
const logKeys = [base64Key]
class DSMTextMapPropagator {
constructor (config) {
this.config = config
}
inject (ctx, carrier) {
if (!this.config.dsmEnabled) return
this._injectDatadogDSMContext(ctx, carrier)
// eslint-disable-next-line eslint-rules/eslint-log-printf-style
log.debug(() => `Inject into carrier (DSM): ${JSON.stringify(pick(carrier, logKeys))}.`)
}
extract (carrier) {
if (!this.config.dsmEnabled) return
const dsmContext = this._extractDatadogDSMContext(carrier)
if (!dsmContext) return dsmContext
// eslint-disable-next-line eslint-rules/eslint-log-printf-style
log.debug(() => `Extract from carrier (DSM): ${JSON.stringify(pick(carrier, logKeys))}.`)
return dsmContext
}
_injectDatadogDSMContext (ctx, carrier) {
DsmPathwayCodec.encode(ctx, carrier)
}
_extractDatadogDSMContext (carrier) {
const ctx = DsmPathwayCodec.decode(carrier)
return ctx
}
}
module.exports = DSMTextMapPropagator