tracer-component
Version:
Trace execution spans all across your application.
148 lines • 5.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTracerComponent = void 0;
const node_async_hooks_1 = require("node:async_hooks");
const logic_1 = require("./logic");
const constants_1 = require("./constants");
const errors_1 = require("./errors");
function createTracerComponent() {
const asyncLocalStorage = new node_async_hooks_1.AsyncLocalStorage();
function span(name, tracedFunction, traceContext) {
const parentTraceContext = asyncLocalStorage.getStore();
let newContext;
if (traceContext) {
newContext = (0, logic_1.buildTraceContext)({
name,
parentId: traceContext.parentId,
traceId: traceContext.traceId,
version: traceContext.version,
traceFlags: traceContext.traceFlags,
traceState: traceContext.traceState,
data: traceContext.data
});
}
else if (parentTraceContext) {
newContext = (0, logic_1.buildTraceContext)({
name,
parentId: parentTraceContext.traceId,
traceId: parentTraceContext.traceId,
version: parentTraceContext.version,
traceFlags: parentTraceContext.traceFlags,
traceState: parentTraceContext.traceState
});
}
else {
newContext = (0, logic_1.buildTraceContext)({
name,
parentId: constants_1.INVALID_SPAN_ID,
traceId: (0, logic_1.generateTraceId)(),
version: '00',
traceFlags: '00'
});
}
return asyncLocalStorage.run(newContext, tracedFunction);
}
function getSpanId() {
const currentContext = asyncLocalStorage.getStore();
if (!currentContext) {
throw new errors_1.NotInSpanError();
}
return currentContext === null || currentContext === void 0 ? void 0 : currentContext.id;
}
function getTrace() {
const currentContext = asyncLocalStorage.getStore();
if (!currentContext) {
throw new errors_1.NotInSpanError();
}
return {
traceId: currentContext.traceId,
version: currentContext.version,
parentId: currentContext.parentId,
traceFlags: currentContext.traceFlags
};
}
function getTraceString() {
const traceParent = getTrace();
return (0, logic_1.buildTraceString)(traceParent);
}
function getTraceChild() {
const currentContext = asyncLocalStorage.getStore();
if (!currentContext) {
throw new errors_1.NotInSpanError();
}
return {
traceId: currentContext.traceId,
version: currentContext.version,
parentId: currentContext.id,
traceFlags: currentContext.traceFlags
};
}
function getTraceChildString() {
const traceChild = getTraceChild();
return (0, logic_1.buildTraceString)(traceChild);
}
function getTraceState() {
var _a;
const currentContext = asyncLocalStorage.getStore();
if (!currentContext) {
throw new errors_1.NotInSpanError();
}
return Object.freeze((_a = currentContext === null || currentContext === void 0 ? void 0 : currentContext.traceState) !== null && _a !== void 0 ? _a : null);
}
function getTraceStateString() {
const traceState = getTraceState();
return traceState && Object.keys(traceState).length > 0
? Object.entries(traceState).reduce((acc, curr, index, arr) => `${acc}=${curr}${index !== arr.length - 1 ? ',' : ''}`, '')
: undefined;
}
function getContextData() {
var _a;
const currentContext = asyncLocalStorage.getStore();
if (!currentContext) {
throw new errors_1.NotInSpanError();
}
return Object.freeze((_a = currentContext === null || currentContext === void 0 ? void 0 : currentContext.data) !== null && _a !== void 0 ? _a : null);
}
function setContextData(data) {
const currentContext = asyncLocalStorage.getStore();
if (!currentContext) {
throw new errors_1.NotInSpanError();
}
currentContext.data = data;
}
function setTraceStateProperty(key, value) {
const currentContext = asyncLocalStorage.getStore();
if (!currentContext) {
throw new errors_1.NotInSpanError();
}
if (!currentContext.traceState) {
currentContext.traceState = {};
}
currentContext.traceState[key] = value;
}
function deleteTraceStateProperty(key) {
const currentContext = asyncLocalStorage.getStore();
if (!currentContext) {
throw new errors_1.NotInSpanError();
}
if (currentContext.traceState) {
delete currentContext.traceState[key];
}
}
return {
span,
getSpanId,
getTrace,
getTraceString,
getTraceChild,
getTraceChildString,
getContextData,
setContextData,
getTraceState,
getTraceStateString,
setTraceStateProperty,
deleteTraceStateProperty
};
}
exports.createTracerComponent = createTracerComponent;
//# sourceMappingURL=component.js.map