@vtex/api
Version:
VTEX I/O API client
59 lines (58 loc) • 2.26 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.UserLandTracer = exports.createTracingContextFromCarrier = void 0;
const opentracing_1 = require("opentracing");
const TracerSingleton_1 = require("../service/tracing/TracerSingleton");
const utils_1 = require("./utils");
const createTracingContextFromCarrier = (newSpanName, carrier) => {
const tracer = TracerSingleton_1.TracerSingleton.getTracer();
const rootSpan = tracer.extract(opentracing_1.FORMAT_HTTP_HEADERS, carrier);
if (rootSpan == null) {
throw new Error('Missing span context data on carrier');
}
const span = tracer.startSpan(newSpanName, { childOf: rootSpan });
const userlandTracer = new UserLandTracer(tracer, span);
userlandTracer.lockFallbackSpan();
return { span, tracer: userlandTracer };
};
exports.createTracingContextFromCarrier = createTracingContextFromCarrier;
class UserLandTracer {
constructor(tracer, fallbackSpan) {
this.tracer = tracer;
this.fallbackSpan = fallbackSpan;
this.fallbackSpanLock = false;
const { traceId, isSampled } = (0, utils_1.getTraceInfo)(fallbackSpan);
this._traceId = traceId;
this._isSampled = isSampled;
}
get traceId() {
return this._traceId;
}
get isTraceSampled() {
return this._isSampled;
}
lockFallbackSpan() {
this.fallbackSpanLock = true;
}
setFallbackSpan(newSpan) {
if (this.fallbackSpanLock) {
throw new Error(`FallbackSpan is locked, can't change it`);
}
this.fallbackSpan = newSpan;
}
startSpan(name, options) {
var _a;
if (options && (options.childOf || ((_a = options.references) === null || _a === void 0 ? void 0 : _a.length))) {
return this.tracer.startSpan(name, options);
}
return this.tracer.startSpan(name, { ...options, childOf: this.fallbackSpan });
}
inject(spanContext, format, carrier) {
return this.tracer.inject(spanContext, format, carrier);
}
fallbackSpanContext() {
var _a;
return (_a = this.fallbackSpan) === null || _a === void 0 ? void 0 : _a.context();
}
}
exports.UserLandTracer = UserLandTracer;
;