UNPKG

tracer-component

Version:

Trace execution spans all across your application.

148 lines 5.45 kB
"use strict"; 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