traceability
Version:
Traceability tools - middleware and winston logger
78 lines • 3.28 kB
JavaScript
;
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