@bugsnag/core-performance
Version:
Core performance client
32 lines (29 loc) • 1.13 kB
JavaScript
import { scaleProbabilityToMatchSamplingRate } from './sampler.js';
import { isSpanContext } from './validation.js';
const TRACE_PERENT_REGEX = /^00-([0-9a-f]{32})-([0-9a-f]{16})-[0-9]{2}$/;
class RemoteParentContext {
constructor(parentContext) {
this.id = parentContext.id;
this.traceId = parentContext.traceId;
}
encodeAsTraceParent() {
return RemoteParentContext.toTraceParentString(this);
}
static parseTraceParent(encodedString) {
const result = TRACE_PERENT_REGEX.exec(encodedString);
if (!result) {
return undefined;
}
const [, traceId, id] = result;
return new RemoteParentContext({ id, traceId });
}
static toTraceParentString(context) {
let sampled = true;
if (isSpanContext(context)) {
const scaledProbability = scaleProbabilityToMatchSamplingRate(context.samplingProbability);
sampled = context.samplingRate <= scaledProbability;
}
return `00-${context.traceId}-${context.id}-${sampled ? '01' : '00'}`;
}
}
export { RemoteParentContext as default };