UNPKG

traceability

Version:

Traceability tools - middleware and winston logger

78 lines 3.28 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContextAsyncHooks = void 0; var async_hooks_1 = require("async_hooks"); var idGenerator_1 = require("./idGenerator"); var ContextAsyncHooksClass = /** @class */ (function () { function ContextAsyncHooksClass() { this.asyncLocalStorage = new async_hooks_1.AsyncLocalStorage(); } ContextAsyncHooksClass.prototype.getExpressMiddlewareTracking = function (config) { var _this = this; return function (request, response, next) { var cid = _this.getTrackId(request.headers).cid; _this.setContext({ cid: cid }); if (!config || config.responseHeaderPropagator === 'cid') { response.setHeader('cid', cid); next(); } if ((config === null || config === void 0 ? void 0 : config.responseHeaderPropagator) === 'traceparent') { var traceparent = _this.buildTraceParent(cid); response.setHeader('traceparent', traceparent); next(); } }; }; ContextAsyncHooksClass.prototype.setContext = function (data) { var oldData = this.getContext(); oldData = __assign(__assign({}, oldData), data); this.asyncLocalStorage.enterWith(oldData); }; ContextAsyncHooksClass.prototype.getTrackId = function (contextParam) { var context = contextParam || this.getContext(); if (context && context.cid) { return { cid: context.cid }; } if (context && context.traceparent && typeof context.traceparent === 'string') { return { cid: this.getTraceIdFromTraceParent(context.traceparent) }; } return { cid: idGenerator_1.RandomIdGenerator.generateTraceId() }; }; ContextAsyncHooksClass.prototype.getTraceParent = function () { var cid = this.getTrackId().cid; return this.buildTraceParent(cid); }; ContextAsyncHooksClass.prototype.getTraceIdFromTraceParent = function (traceParent) { var traceId = traceParent.split('-')[1]; return traceId; }; ContextAsyncHooksClass.prototype.buildTraceParent = function (traceId) { var spanId = idGenerator_1.RandomIdGenerator.generateSpanId(); return "00-" + traceId + "-" + spanId + "-01"; }; ContextAsyncHooksClass.prototype.getContext = function () { return this.asyncLocalStorage.getStore(); }; ContextAsyncHooksClass.getInstance = function () { if (!ContextAsyncHooksClass.instance) { ContextAsyncHooksClass.instance = new ContextAsyncHooksClass(); } return ContextAsyncHooksClass.instance; }; return ContextAsyncHooksClass; }()); exports.ContextAsyncHooks = ContextAsyncHooksClass.getInstance(); //# sourceMappingURL=ContextAsyncHooks.js.map