@autofleet/outbreak 0.2.1 → 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,7 +22,7 @@ const logger = winston_1.default.createLogger({
22
22
  new winston_1.default.transports.Console(),
23
23
  ],
24
24
  });
25
- index_1.default({
25
+ (0, index_1.default)({
26
26
  setAndPropagateCorrelationId: true,
27
27
  headersToPropagate: [
28
28
  'x-text',
@@ -30,7 +30,7 @@ index_1.default({
30
30
  headersPrefix: 'x-af-',
31
31
  winstonLogger: logger,
32
32
  });
33
- const app = express_1.default();
33
+ const app = (0, express_1.default)();
34
34
  app.all('/', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
35
35
  const network = axios_1.default.create({ baseURL: 'http://localhost:8080/' });
36
36
  const { data } = yield network.get('/header-parrot');
@@ -1 +1 @@
1
- {"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/example.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,sDAA8B;AAC9B,kDAA0B;AAC1B,sDAA8B;AAE9B,oDAAoC;AAEpC,eAAK,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAE5D,MAAM,MAAM,GAAG,iBAAO,CAAC,YAAY,CAAC;IAClC,UAAU,EAAE;QACV,IAAI,iBAAO,CAAC,UAAU,CAAC,OAAO,EAAE;KACjC;CACF,CAAC,CAAC;AAEH,eAAa,CAAC;IACZ,4BAA4B,EAAE,IAAI;IAClC,kBAAkB,EAAE;QAClB,QAAQ;KACT;IACD,aAAa,EAAE,OAAO;IACtB,aAAa,EAAE,MAAM;CACtB,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,iBAAO,EAAE,CAAC;AAEtB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAO,GAAG,EAAE,GAAG,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,eAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;IACpE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACrD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAA,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACrC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACtC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACpB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/example.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,sDAA8B;AAC9B,kDAA0B;AAC1B,sDAA8B;AAE9B,oDAAoC;AAEpC,eAAK,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAE5D,MAAM,MAAM,GAAG,iBAAO,CAAC,YAAY,CAAC;IAClC,UAAU,EAAE;QACV,IAAI,iBAAO,CAAC,UAAU,CAAC,OAAO,EAAE;KACjC;CACF,CAAC,CAAC;AAEH,IAAA,eAAa,EAAC;IACZ,4BAA4B,EAAE,IAAI;IAClC,kBAAkB,EAAE;QAClB,QAAQ;KACT;IACD,aAAa,EAAE,OAAO;IACtB,aAAa,EAAE,MAAM;CACtB,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;AAEtB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAO,GAAG,EAAE,GAAG,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,eAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;IACpE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACrD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAA,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACrC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACtC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACpB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC"}
@@ -1,14 +1,30 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
5
18
  var __importStar = (this && this.__importStar) || function (mod) {
6
19
  if (mod && mod.__esModule) return mod;
7
20
  var result = {};
8
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
9
- result["default"] = mod;
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
10
23
  return result;
11
24
  };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
12
28
  Object.defineProperty(exports, "__esModule", { value: true });
13
29
  /* eslint-disable max-len */
14
30
  const http_1 = __importDefault(require("http"));
@@ -44,7 +60,7 @@ function injectInResponse(response, headers) {
44
60
  }
45
61
  function wrappedListener(config, listener) {
46
62
  return (req, res, next, error) => {
47
- tracer_1.newTrace('httpRequest');
63
+ (0, tracer_1.newTrace)('httpRequest');
48
64
  if (config.setAndPropagateCorrelationId === true) {
49
65
  setAndCollectCorrelationId(config, req, res);
50
66
  }
@@ -102,4 +118,4 @@ function wrapHttp(config) {
102
118
  http_1.default.get = wrapHttpRequest(originalGet);
103
119
  }
104
120
  exports.default = wrapHttp;
105
- //# sourceMappingURL=http_wrapper.js.map
121
+ //# sourceMappingURL=http-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-wrapper.js","sourceRoot":"","sources":["../../src/http-wrapper.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -1,20 +1,38 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
5
18
  var __importStar = (this && this.__importStar) || function (mod) {
6
19
  if (mod && mod.__esModule) return mod;
7
20
  var result = {};
8
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
9
- result["default"] = mod;
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
10
23
  return result;
11
24
  };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
12
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.traceTypes = exports.newTrace = exports.getCurrentContext = void 0;
13
30
  const winston_1 = require("winston");
14
- const http_wrapper_1 = __importDefault(require("./http_wrapper"));
31
+ const http_wrapper_1 = __importDefault(require("./http-wrapper"));
32
+ const rabbit_wrapper_1 = __importDefault(require("./rabbit-wrapper"));
15
33
  const config_1 = __importDefault(require("./config"));
16
34
  const tracer = __importStar(require("./tracer"));
17
- const addMetadataToLog = (loggerTraceKey) => winston_1.format((info) => {
35
+ const addMetadataToLog = (loggerTraceKey) => (0, winston_1.format)((info) => {
18
36
  const currentTrace = tracer.getCurrentTrace();
19
37
  if (currentTrace && currentTrace.context && currentTrace.context.get) {
20
38
  // eslint-disable-next-line no-param-reassign
@@ -23,16 +41,29 @@ const addMetadataToLog = (loggerTraceKey) => winston_1.format((info) => {
23
41
  return info;
24
42
  });
25
43
  function default_1(options) {
26
- http_wrapper_1.default(config_1.default.load(options));
44
+ const conf = config_1.default.load(options);
45
+ (0, http_wrapper_1.default)(conf);
46
+ (0, rabbit_wrapper_1.default)(conf);
27
47
  tracer.enable();
28
48
  if (options.winstonLogger) {
29
49
  const traceKey = options.loggerTraceKey || 'traceId';
30
50
  // eslint-disable-next-line no-param-reassign
31
51
  options.winstonLogger.format = winston_1.format.combine(addMetadataToLog(traceKey)(), options.winstonLogger.format);
32
52
  }
53
+ try {
54
+ // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires
55
+ const bluebird = require('bluebird');
56
+ bluebird.config({
57
+ asyncHooks: true,
58
+ });
59
+ }
60
+ finally {
61
+ // Do nothing
62
+ }
33
63
  }
34
64
  exports.default = default_1;
35
- exports.getCurrentContext = () => tracer.getCurrentTrace();
65
+ const getCurrentContext = () => tracer.getCurrentTrace();
66
+ exports.getCurrentContext = getCurrentContext;
36
67
  exports.newTrace = tracer.newTrace;
37
68
  exports.traceTypes = {
38
69
  HTTP_REQUEST: 'httpRequest',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA0C;AAE1C,kEAAyC;AACzC,sDAA8B;AAC9B,iDAAmC;AAUnC,MAAM,gBAAgB,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,gBAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IAC3D,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;IAC9C,IAAI,YAAY,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE;QACpE,6CAA6C;QAC7C,IAAI,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAM,CAAC,mBAAmB,CAAC,CAAC;KAC7E;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,CAAC;AAEH,mBAAyB,OAAgB;IACvC,sBAAW,CAAC,gBAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,MAAM,EAAE,CAAC;IAEhB,IAAI,OAAO,CAAC,aAAa,EAAE;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC;QACrD,6CAA6C;QAC7C,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,gBAAM,CAAC,OAAO,CAC3C,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAC5B,OAAO,CAAC,aAAa,CAAC,MAAM,CAC7B,CAAC;KACH;AACH,CAAC;AAZD,4BAYC;AAEY,QAAA,iBAAiB,GAAG,GAAQ,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;AAErE,mCAAmC;AAEtB,QAAA,UAAU,GAAG;IACxB,YAAY,EAAE,aAAa;IAC3B,UAAU,EAAE,WAAW;IACvB,MAAM,EAAE,QAAQ;CACjB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAA0C;AAE1C,kEAAyC;AACzC,sEAA6C;AAC7C,sDAA8B;AAC9B,iDAAmC;AAUnC,MAAM,gBAAgB,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,IAAA,gBAAM,EAAC,CAAC,IAAI,EAAE,EAAE;IAC3D,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;IAC9C,IAAI,YAAY,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE;QACpE,6CAA6C;QAC7C,IAAI,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAM,CAAC,mBAAmB,CAAC,CAAC;KAC7E;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,CAAC;AAEH,mBAAyB,OAAgB;IACvC,MAAM,IAAI,GAAG,gBAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,IAAA,sBAAW,EAAC,IAAI,CAAC,CAAC;IAClB,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC;IACpB,MAAM,CAAC,MAAM,EAAE,CAAC;IAEhB,IAAI,OAAO,CAAC,aAAa,EAAE;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC;QACrD,6CAA6C;QAC7C,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,gBAAM,CAAC,OAAO,CAC3C,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAC5B,OAAO,CAAC,aAAa,CAAC,MAAM,CAC7B,CAAC;KACH;IAED,IAAI;QACF,8EAA8E;QAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,QAAQ,CAAC,MAAM,CAAC;YACd,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;KACJ;YAAS;QACR,aAAa;KACd;AACH,CAAC;AAxBD,4BAwBC;AAEM,MAAM,iBAAiB,GAAG,GAAQ,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;AAAxD,QAAA,iBAAiB,qBAAuC;AAEtD,gBAAQ,GAAK,MAAM,UAAC;AAEtB,QAAA,UAAU,GAAG;IACxB,YAAY,EAAE,aAAa;IAC3B,UAAU,EAAE,WAAW;IACvB,MAAM,EAAE,QAAQ;CACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const wrapRabbit: (conf: any) => void;
2
+ export default wrapRabbit;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ /* eslint-disable func-names */
30
+ const rabbit_1 = __importDefault(require("@autofleet/rabbit"));
31
+ const tracer_1 = __importStar(require("./tracer"));
32
+ const originalConsume = rabbit_1.default.prototype.consume;
33
+ const originalConsumeFromExchange = rabbit_1.default.prototype.consumeFromExchange;
34
+ const originalSendToQueue = rabbit_1.default.prototype.sendToQueue;
35
+ const originalPublish = rabbit_1.default.prototype.publish;
36
+ function collectHeadersFromMessage(msg, headers, headersPrefix) {
37
+ var _a;
38
+ const prefixHeaders = headersPrefix
39
+ ? Object.keys((_a = msg.properties) === null || _a === void 0 ? void 0 : _a.headers).filter((h) => h.includes(headersPrefix))
40
+ : [];
41
+ [...headers, ...prefixHeaders].forEach((header) => {
42
+ if (typeof msg.properties.headers[header] !== 'undefined') {
43
+ tracer_1.default.currentTrace.context.set(header, msg.properties.headers[header]);
44
+ }
45
+ });
46
+ }
47
+ function mergeHeaders(tracingHeaders, customHeaders) {
48
+ let mergedHeaders = {};
49
+ if (customHeaders) {
50
+ mergedHeaders = Object.assign(mergedHeaders, customHeaders);
51
+ }
52
+ if (tracer_1.default.currentTrace) {
53
+ tracingHeaders.forEach((header) => {
54
+ mergedHeaders[header] = tracer_1.default.currentTrace.context.get(header);
55
+ });
56
+ }
57
+ return mergedHeaders;
58
+ }
59
+ function wrapConsume(config, originalMethod) {
60
+ return function (queue, callback, options) {
61
+ const wrappedCallback = (msg, ack, nack) => {
62
+ (0, tracer_1.newTrace)('rabbitMessage');
63
+ collectHeadersFromMessage(msg, config.headersToCollect, config.headersPrefix);
64
+ return callback(msg, ack, nack);
65
+ };
66
+ return originalMethod(queue, wrappedCallback, options);
67
+ };
68
+ }
69
+ function wrapConsumeFromExchange(config, originalMethod) {
70
+ return function (queue, callback, options) {
71
+ const wrappedCallback = (msg, ack, nack) => {
72
+ (0, tracer_1.newTrace)('rabbitMessage');
73
+ collectHeadersFromMessage(msg, config.headersToCollect, config.headersPrefix);
74
+ return callback(msg, ack, nack);
75
+ };
76
+ return originalMethod(queue, wrappedCallback, options);
77
+ };
78
+ }
79
+ function wrapSendToQueue(config, originalMethod) {
80
+ return function (queue, content, options, customHeaders) {
81
+ const finalHeaders = mergeHeaders(config.headersToCollect, customHeaders);
82
+ return originalMethod(queue, content, options, finalHeaders);
83
+ };
84
+ }
85
+ function wrapPublish(config, originalMethod) {
86
+ return function (queue, content, customHeaders) {
87
+ const finalHeaders = mergeHeaders(config.headersToCollect, customHeaders);
88
+ return originalMethod(queue, content, finalHeaders);
89
+ };
90
+ }
91
+ const wrapRabbit = (conf) => {
92
+ rabbit_1.default.prototype.consume = wrapConsume(conf, originalConsume);
93
+ rabbit_1.default.prototype.consumeFromExchange = wrapConsumeFromExchange(conf, originalConsumeFromExchange);
94
+ rabbit_1.default.prototype.sendToQueue = wrapSendToQueue(conf, originalSendToQueue);
95
+ rabbit_1.default.prototype.publish = wrapPublish(conf, originalPublish);
96
+ };
97
+ exports.default = wrapRabbit;
98
+ //# sourceMappingURL=rabbit-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rabbit-wrapper.js","sourceRoot":"","sources":["../../src/rabbit-wrapper.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import asyncHooks from 'async_hooks';
3
2
  declare const tracer: {
4
3
  currentTrace: any;
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getCurrentTrace = exports.enable = exports.newTrace = void 0;
6
7
  const async_hooks_1 = __importDefault(require("async_hooks"));
7
8
  const uuid_1 = __importDefault(require("uuid"));
8
9
  const prevStates = {};
@@ -44,12 +45,15 @@ class Trace {
44
45
  this.context = new Map();
45
46
  }
46
47
  }
47
- exports.newTrace = (type) => {
48
+ const newTrace = (type) => {
48
49
  tracer.currentTrace = new Trace(type);
49
50
  tracer.traces[async_hooks_1.default.executionAsyncId()] = tracer.currentTrace;
50
51
  return tracer.currentTrace;
51
52
  };
52
- exports.enable = () => hook.enable();
53
- exports.getCurrentTrace = () => tracer.currentTrace || {};
53
+ exports.newTrace = newTrace;
54
+ const enable = () => hook.enable();
55
+ exports.enable = enable;
56
+ const getCurrentTrace = () => tracer.currentTrace || {};
57
+ exports.getCurrentTrace = getCurrentTrace;
54
58
  exports.default = tracer;
55
59
  //# sourceMappingURL=tracer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/tracer.ts"],"names":[],"mappings":";;;;;AAAA,8DAAqC;AACrC,gDAAwB;AAExB,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,MAAM,MAAM,GAAG;IACb,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,SAAS,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc;IACzC,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;QACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;KACxD;AACH,CAAC;AAED,SAAS,MAAM,CAAC,OAAO;IACrB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO;KACR;IACD,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,KAAK,CAAC,OAAO;IACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO;KACR;IACD,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,OAAO,CAAC,OAAO;IACtB,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;KAC5B;AACH,CAAC;AAED,MAAM,IAAI,GAAG,qBAAU,CAAC,UAAU,CAAC;IACjC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAC7B,CAAC,CAAC;AAEH,MAAM,KAAK;IAOT,YAAY,IAAI;QACd,IAAI,CAAC,EAAE,GAAG,cAAI,CAAC,EAAE,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3B,CAAC;CACF;AAEY,QAAA,QAAQ,GAAG,CAAC,IAAI,EAAQ,EAAE;IACrC,MAAM,CAAC,YAAY,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,MAAM,CAAC,qBAAU,CAAC,gBAAgB,EAAE,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;IACnE,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC,CAAC;AAEW,QAAA,MAAM,GAAG,GAAyB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AAEnD,QAAA,eAAe,GAAG,GAAQ,EAAE,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;AAEpE,kBAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/tracer.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAqC;AACrC,gDAAwB;AAExB,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,MAAM,MAAM,GAAG;IACb,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,SAAS,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc;IACzC,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;QACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;KACxD;AACH,CAAC;AAED,SAAS,MAAM,CAAC,OAAO;IACrB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO;KACR;IACD,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,KAAK,CAAC,OAAO;IACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO;KACR;IACD,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,OAAO,CAAC,OAAO;IACtB,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;KAC5B;AACH,CAAC;AAED,MAAM,IAAI,GAAG,qBAAU,CAAC,UAAU,CAAC;IACjC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAC7B,CAAC,CAAC;AAEH,MAAM,KAAK;IAOT,YAAY,IAAI;QACd,IAAI,CAAC,EAAE,GAAG,cAAI,CAAC,EAAE,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3B,CAAC;CACF;AAEM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAQ,EAAE;IACrC,MAAM,CAAC,YAAY,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,MAAM,CAAC,qBAAU,CAAC,gBAAgB,EAAE,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;IACnE,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC,CAAC;AAJW,QAAA,QAAQ,YAInB;AAEK,MAAM,MAAM,GAAG,GAAyB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AAAnD,QAAA,MAAM,UAA6C;AAEzD,MAAM,eAAe,GAAG,GAAQ,EAAE,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;AAAvD,QAAA,eAAe,mBAAwC;AAEpE,kBAAe,MAAM,CAAC"}
@@ -1,4 +1,27 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
26
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
27
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -15,17 +38,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
38
  const express_1 = __importDefault(require("express"));
16
39
  const axios_1 = __importDefault(require("axios"));
17
40
  const winston_1 = __importDefault(require("winston"));
18
- const index_1 = __importDefault(require("../src/index"));
41
+ const bluebird_1 = __importDefault(require("bluebird"));
42
+ const agentkeepalive_1 = __importDefault(require("agentkeepalive"));
43
+ const index_1 = __importStar(require("../src/index"));
19
44
  const logger = winston_1.default.createLogger({
20
45
  transports: [
21
46
  new winston_1.default.transports.Console(),
22
47
  ],
23
48
  });
24
49
  const generateApp = (addEndpoints, port) => __awaiter(void 0, void 0, void 0, function* () {
25
- const app = express_1.default();
50
+ const app = (0, express_1.default)();
26
51
  addEndpoints(app);
27
52
  const server = yield new Promise((resolve) => {
28
53
  const s = app.listen(port, () => {
54
+ s.keepAliveTimeout = 600 * 1000;
29
55
  console.log('Listen on port', port);
30
56
  resolve(s);
31
57
  });
@@ -35,7 +61,7 @@ const generateApp = (addEndpoints, port) => __awaiter(void 0, void 0, void 0, fu
35
61
  describe('E2E', () => {
36
62
  it('Basic functionality', () => __awaiter(void 0, void 0, void 0, function* () {
37
63
  let server2TraceId = null;
38
- index_1.default({
64
+ (0, index_1.default)({
39
65
  setAndPropagateCorrelationId: true,
40
66
  headersToPropagate: [
41
67
  'x-test-header',
@@ -45,8 +71,10 @@ describe('E2E', () => {
45
71
  });
46
72
  const closeServer1 = yield generateApp((app) => {
47
73
  app.get('/', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
48
- const { data: res1 } = yield axios_1.default.post('http://localhost:8082');
49
- res.json(res1);
74
+ setTimeout(() => __awaiter(void 0, void 0, void 0, function* () {
75
+ const { data: res1 } = yield axios_1.default.post('http://localhost:8082');
76
+ res.json(res1);
77
+ }), 10);
50
78
  }));
51
79
  }, 8081);
52
80
  const closeServer2 = yield generateApp((app) => {
@@ -70,5 +98,121 @@ describe('E2E', () => {
70
98
  expect(res1.value).toEqual('testHeader');
71
99
  expect(res1.wkanda).toEqual('my-wakanda-id');
72
100
  }));
101
+ it('Test on http keep alive and abort and bluebird, should create a new trace', () => __awaiter(void 0, void 0, void 0, function* () {
102
+ const server2TraceIds = [];
103
+ let error;
104
+ const httpAgent = new agentkeepalive_1.default({ keepAlive: true, maxSockets: 1 });
105
+ const instance = axios_1.default.create({
106
+ httpAgent,
107
+ });
108
+ (0, index_1.default)({
109
+ setAndPropagateCorrelationId: true,
110
+ headersToPropagate: [
111
+ 'x-test-header',
112
+ ],
113
+ headersPrefix: 'x-wakanda-',
114
+ winstonLogger: logger,
115
+ });
116
+ const closeServer1 = yield generateApp((app) => {
117
+ const serverHttpAgent = new agentkeepalive_1.default({ keepAlive: true, maxSockets: 2 });
118
+ const serverInstance = axios_1.default.create({
119
+ httpAgent: serverHttpAgent,
120
+ });
121
+ app.post('/', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
122
+ const { id } = (0, index_1.getCurrentContext)();
123
+ setTimeout(() => __awaiter(void 0, void 0, void 0, function* () {
124
+ setTimeout(() => __awaiter(void 0, void 0, void 0, function* () {
125
+ const { data: res1 } = yield serverInstance.post('http://localhost:8082');
126
+ if ((0, index_1.getCurrentContext)().id !== id) {
127
+ throw new Error('Should be the same trace');
128
+ }
129
+ res.json(res1);
130
+ }), 10);
131
+ }), 100);
132
+ }));
133
+ }, 8081);
134
+ const closeServer2 = yield generateApp((app) => {
135
+ app.post('/', (req, res) => {
136
+ const { id } = (0, index_1.getCurrentContext)();
137
+ setTimeout(() => __awaiter(void 0, void 0, void 0, function* () {
138
+ yield bluebird_1.default.map([1, 2, 3], (value) => __awaiter(void 0, void 0, void 0, function* () {
139
+ if (value === 2) {
140
+ server2TraceIds.push(req.headers['x-trace-id']);
141
+ if ((0, index_1.getCurrentContext)().id !== id) {
142
+ throw new Error('Should be the same trace');
143
+ }
144
+ res.json({
145
+ value: req.headers['x-test-header'],
146
+ wkanda: req.headers['x-wakanda-id'],
147
+ });
148
+ }
149
+ }), { concurrency: 3 });
150
+ }), 10);
151
+ });
152
+ }, 8082);
153
+ try {
154
+ yield instance.post('http://localhost:8081', {}, {
155
+ headers: {
156
+ 'x-test-header': 'testHeader111',
157
+ 'x-wakanda-id': 'my-wakanda-id',
158
+ },
159
+ timeout: 1,
160
+ });
161
+ }
162
+ catch (e) {
163
+ error = e;
164
+ }
165
+ const [{ data: res1, headers: headers1 }, { data: res2, headers: headers2 }] = yield Promise.all([
166
+ instance.post('http://localhost:8081', { f: 1 }, {
167
+ headers: {
168
+ 'x-test-header': 'testHeader1',
169
+ 'x-wakanda-id': 'my-wakanda-id',
170
+ },
171
+ }),
172
+ instance.post('http://localhost:8081', { c: 3 }, {
173
+ headers: {
174
+ 'x-test-header': 'testHeader1www',
175
+ 'x-wakanda-id': 'my-wakanda-id',
176
+ },
177
+ }),
178
+ axios_1.default.post('http://localhost:8081', { f: 1 }, {
179
+ headers: {
180
+ 'x-test-header': 'testHeader1dssds',
181
+ 'x-wakanda-id': 'my-wakanda-id',
182
+ },
183
+ }),
184
+ axios_1.default.post('http://localhost:8081', { n: 3 }, {
185
+ headers: {
186
+ 'x-test-header': 'testHeader2',
187
+ 'x-wakanda-id': 'my-wakanda-id',
188
+ },
189
+ })
190
+ ]);
191
+ const { data: res3, headers: headers3 } = yield instance.post('http://localhost:8081', {}, {
192
+ headers: {
193
+ 'x-test-header': 'testHeader3',
194
+ 'x-wakanda-id': 'my-wakanda-id',
195
+ },
196
+ });
197
+ yield axios_1.default.post('http://localhost:8081', { n: 3 }, {
198
+ headers: {
199
+ 'x-test-header': 'testHeader2',
200
+ 'x-wakanda-id': 'my-wakanda-id',
201
+ },
202
+ });
203
+ closeServer1();
204
+ closeServer2();
205
+ expect(error.code).toEqual('ECONNABORTED');
206
+ expect((new Set(server2TraceIds)).size).toEqual(7);
207
+ expect(headers1['x-trace-id']).not.toEqual(server2TraceIds[0]);
208
+ expect(headers2['x-trace-id']).not.toEqual(server2TraceIds[0]);
209
+ expect(headers3['x-trace-id']).not.toEqual(server2TraceIds[0]);
210
+ expect(res1.value).toEqual('testHeader1');
211
+ expect(res1.wkanda).toEqual('my-wakanda-id');
212
+ expect(res2.value).toEqual('testHeader1www');
213
+ expect(res2.wkanda).toEqual('my-wakanda-id');
214
+ expect(res3.value).toEqual('testHeader3');
215
+ expect(res2.wkanda).toEqual('my-wakanda-id');
216
+ }));
73
217
  });
74
218
  //# sourceMappingURL=http-wrapper.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-wrapper.test.js","sourceRoot":"","sources":["../../tests/http-wrapper.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,sDAA8B;AAE9B,kDAA0B;AAC1B,sDAA8B;AAE9B,yDAAyC;AAGzC,MAAM,MAAM,GAAG,iBAAO,CAAC,YAAY,CAAC;IAClC,UAAU,EAAE;QACV,IAAI,iBAAO,CAAC,UAAU,CAAC,OAAO,EAAE;KACjC;CACF,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAO,YAAY,EAAE,IAAI,EAAE,EAAE;IAC/C,MAAM,GAAG,GAAG,iBAAO,EAAE,CAAC;IAEtB,YAAY,CAAC,GAAG,CAAC,CAAC;IAElB,MAAM,MAAM,GAAgB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACxD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAC9B,CAAC,CAAA,CAAC;AAEF,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,EAAE,CAAC,qBAAqB,EAAE,GAAS,EAAE;QACnC,IAAI,cAAc,GAAG,IAAI,CAAC;QAC1B,eAAa,CAAC;YACZ,4BAA4B,EAAE,IAAI;YAClC,kBAAkB,EAAE;gBAClB,eAAe;aAChB;YACD,aAAa,EAAE,YAAY;YAC3B,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7C,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAO,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC9B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBACjE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC,CAAA,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7C,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACzB,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC3C,GAAG,CAAC,IAAI,CAAC;oBACP,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC;oBACnC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;iBACpC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,uBAAuB,EAAE;YACvE,OAAO,EAAE;gBACP,eAAe,EAAE,YAAY;gBAC7B,cAAc,EAAE,eAAe;aAChC;SACF,CAAC,CAAC;QACH,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QAGf,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"http-wrapper.test.js","sourceRoot":"","sources":["../../tests/http-wrapper.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autofleet/outbreak",
3
- "version": "0.2.1",
3
+ "version": "1.0.0-beta.0",
4
4
  "description": "",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/src/index.d.ts",
@@ -16,27 +16,33 @@
16
16
  "author": "Dor Shay",
17
17
  "license": "ISC",
18
18
  "dependencies": {
19
- "@autofleet/network": "^1.2.1",
19
+ "@autofleet/rabbit": "^2.4.1",
20
20
  "axios": "^0.19.2",
21
21
  "express": "^4.17.1",
22
- "jsonwebtoken": "^8.5.1",
23
22
  "shortid": "^2.2.15",
24
23
  "uuid": "^3.4.0",
25
24
  "winston": "^3.2.1"
26
25
  },
26
+ "peerDependencies": {
27
+ "bluebird": "*"
28
+ },
27
29
  "devDependencies": {
28
- "@types/jest": "^24.9.1",
30
+ "@types/babel__traverse": "^7.18.2",
31
+ "@types/bluebird": "^3.5.35",
32
+ "@types/jest": "^26.0.23",
29
33
  "@types/node": "^13.5.0",
30
34
  "@typescript-eslint/eslint-plugin": "^2.17.0",
31
35
  "@typescript-eslint/parser": "^2.17.0",
36
+ "agentkeepalive": "^4.2.1",
37
+ "bluebird": "^3.7.2",
32
38
  "eslint": "^6.8.0",
33
39
  "eslint-config-airbnb": "^18.0.1",
34
40
  "eslint-plugin-import": "^2.20.0",
35
- "jest": "^25.1.0",
41
+ "jest": "^27.0.5",
36
42
  "nodemon": "^2.0.2",
37
- "ts-jest": "^25.0.0",
43
+ "ts-jest": "^27.0.3",
38
44
  "ts-node": "^8.6.2",
39
- "typescript": "^3.7.5",
45
+ "typescript": "^4.9.5",
40
46
  "typescript-eslint": "0.0.1-alpha.0"
41
47
  }
42
48
  }
File without changes
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import winston, { format } from 'winston';
2
2
 
3
- import httpWrapper from './http_wrapper';
3
+ import httpWrapper from './http-wrapper';
4
+ import rabbitWrapper from './rabbit-wrapper';
4
5
  import config from './config';
5
6
  import * as tracer from './tracer';
6
7
 
@@ -23,7 +24,9 @@ const addMetadataToLog = (loggerTraceKey) => format((info) => {
23
24
  });
24
25
 
25
26
  export default function (options: Options): void {
26
- httpWrapper(config.load(options));
27
+ const conf = config.load(options);
28
+ httpWrapper(conf);
29
+ rabbitWrapper(conf);
27
30
  tracer.enable();
28
31
 
29
32
  if (options.winstonLogger) {
@@ -34,6 +37,16 @@ export default function (options: Options): void {
34
37
  options.winstonLogger.format,
35
38
  );
36
39
  }
40
+
41
+ try {
42
+ // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires
43
+ const bluebird = require('bluebird');
44
+ bluebird.config({
45
+ asyncHooks: true,
46
+ });
47
+ } finally {
48
+ // Do nothing
49
+ }
37
50
  }
38
51
 
39
52
  export const getCurrentContext = (): any => tracer.getCurrentTrace();
@@ -0,0 +1,84 @@
1
+ /* eslint-disable func-names */
2
+ import Rabbit, { AfRabbitOptions } from '@autofleet/rabbit';
3
+ import shortid from 'shortid';
4
+ import tracer, { newTrace } from './tracer';
5
+
6
+ const originalConsume = Rabbit.prototype.consume;
7
+ const originalConsumeFromExchange = Rabbit.prototype.consumeFromExchange;
8
+ const originalSendToQueue = Rabbit.prototype.sendToQueue;
9
+ const originalPublish = Rabbit.prototype.publish;
10
+
11
+ function collectHeadersFromMessage(msg, headers, headersPrefix): void {
12
+ const prefixHeaders = headersPrefix
13
+ ? Object.keys(msg.properties?.headers).filter((h) => h.includes(headersPrefix))
14
+ : [];
15
+
16
+ [...headers, ...prefixHeaders].forEach((header) => {
17
+ if (typeof msg.properties.headers[header] !== 'undefined') {
18
+ tracer.currentTrace.context.set(header, msg.properties.headers[header]);
19
+ }
20
+ });
21
+ }
22
+
23
+ function mergeHeaders(tracingHeaders, customHeaders): Record<string, string> {
24
+ let mergedHeaders = {};
25
+
26
+ if (customHeaders) {
27
+ mergedHeaders = Object.assign(mergedHeaders, customHeaders);
28
+ }
29
+
30
+ if (tracer.currentTrace) {
31
+ tracingHeaders.forEach((header) => {
32
+ mergedHeaders[header] = tracer.currentTrace.context.get(header);
33
+ });
34
+ }
35
+
36
+ return mergedHeaders;
37
+ }
38
+
39
+ function wrapConsume(config, originalMethod): any {
40
+ return function (queue: string, callback, options: AfRabbitOptions): Promise<any> {
41
+ const wrappedCallback = (msg, ack, nack): Promise<any> => {
42
+ newTrace('rabbitMessage');
43
+ collectHeadersFromMessage(msg, config.headersToCollect, config.headersPrefix);
44
+ return callback(msg, ack, nack);
45
+ };
46
+ return originalMethod(queue, wrappedCallback, options);
47
+ };
48
+ }
49
+
50
+ function wrapConsumeFromExchange(config, originalMethod): any {
51
+ return function (queue: string, callback, options: AfRabbitOptions): Promise<any> {
52
+ const wrappedCallback = (msg, ack, nack): Promise<any> => {
53
+ newTrace('rabbitMessage');
54
+ collectHeadersFromMessage(msg, config.headersToCollect, config.headersPrefix);
55
+ return callback(msg, ack, nack);
56
+ };
57
+ return originalMethod(queue, wrappedCallback, options);
58
+ };
59
+ }
60
+
61
+ function wrapSendToQueue(config, originalMethod): any {
62
+ return function (queue: string, content: any, options?: any, customHeaders?: any):
63
+ Promise<boolean> {
64
+ const finalHeaders = mergeHeaders(config.headersToCollect, customHeaders);
65
+ return originalMethod(queue, content, options, finalHeaders);
66
+ };
67
+ }
68
+
69
+ function wrapPublish(config, originalMethod): any {
70
+ return function (queue: string, content: any, customHeaders?: any):
71
+ Promise<boolean> {
72
+ const finalHeaders = mergeHeaders(config.headersToCollect, customHeaders);
73
+ return originalMethod(queue, content, finalHeaders);
74
+ };
75
+ }
76
+
77
+ const wrapRabbit = (conf): void => {
78
+ Rabbit.prototype.consume = wrapConsume(conf, originalConsume);
79
+ Rabbit.prototype.consumeFromExchange = wrapConsumeFromExchange(conf, originalConsumeFromExchange);
80
+ Rabbit.prototype.sendToQueue = wrapSendToQueue(conf, originalSendToQueue);
81
+ Rabbit.prototype.publish = wrapPublish(conf, originalPublish);
82
+ };
83
+
84
+ export default wrapRabbit;
@@ -1,10 +1,12 @@
1
+ import asyncHooks from 'async_hooks';
1
2
  import express from 'express';
2
3
  import http from 'http';
3
4
  import axios from 'axios';
4
5
  import winston from 'winston';
6
+ import bluebird from 'bluebird';
7
+ import Agent from 'agentkeepalive';
5
8
 
6
- import headersTracer from '../src/index';
7
-
9
+ import headersTracer, { getCurrentContext } from '../src/index';
8
10
 
9
11
  const logger = winston.createLogger({
10
12
  transports: [
@@ -19,6 +21,7 @@ const generateApp = async (addEndpoints, port) => {
19
21
 
20
22
  const server: http.Server = await new Promise((resolve) => {
21
23
  const s = app.listen(port, () => {
24
+ s.keepAliveTimeout = 600 * 1000;
22
25
  console.log('Listen on port', port);
23
26
  resolve(s);
24
27
  });
@@ -41,8 +44,10 @@ describe('E2E', () => {
41
44
 
42
45
  const closeServer1 = await generateApp((app) => {
43
46
  app.get('/', async (req, res) => {
44
- const { data: res1 } = await axios.post('http://localhost:8082');
45
- res.json(res1);
47
+ setTimeout(async () => {
48
+ const { data: res1 } = await axios.post('http://localhost:8082');
49
+ res.json(res1);
50
+ }, 10);
46
51
  });
47
52
  }, 8081);
48
53
 
@@ -70,4 +75,132 @@ describe('E2E', () => {
70
75
  expect(res1.value).toEqual('testHeader');
71
76
  expect(res1.wkanda).toEqual('my-wakanda-id');
72
77
  });
78
+
79
+ it('Test on http keep alive and abort and bluebird, should create a new trace', async () => {
80
+ const server2TraceIds = [];
81
+ let error;
82
+ const httpAgent = new Agent({ keepAlive: true, maxSockets: 1 });
83
+ const instance = axios.create({
84
+ httpAgent,
85
+ });
86
+ headersTracer({
87
+ setAndPropagateCorrelationId: true,
88
+ headersToPropagate: [
89
+ 'x-test-header',
90
+ ],
91
+ headersPrefix: 'x-wakanda-',
92
+ winstonLogger: logger,
93
+ });
94
+
95
+ const closeServer1 = await generateApp((app) => {
96
+ const serverHttpAgent = new Agent({ keepAlive: true, maxSockets: 2 });
97
+ const serverInstance = axios.create({
98
+ httpAgent: serverHttpAgent,
99
+ });
100
+ app.post('/', async (req, res) => {
101
+ const { id } = getCurrentContext();
102
+ setTimeout(async () => {
103
+ setTimeout(async () => {
104
+ const { data: res1 } = await serverInstance.post('http://localhost:8082');
105
+ if (getCurrentContext().id !== id) {
106
+ throw new Error('Should be the same trace');
107
+ }
108
+ res.json(res1);
109
+ }, 10);
110
+ }, 100);
111
+ });
112
+ }, 8081);
113
+
114
+ const closeServer2 = await generateApp((app) => {
115
+ app.post('/', (req, res) => {
116
+ const { id } = getCurrentContext();
117
+ setTimeout(async () => {
118
+ await bluebird.map([1, 2, 3], async (value) => {
119
+ if (value === 2) {
120
+ server2TraceIds.push(req.headers['x-trace-id']);
121
+ if (getCurrentContext().id !== id) {
122
+ throw new Error('Should be the same trace');
123
+ }
124
+ res.json({
125
+ value: req.headers['x-test-header'],
126
+ wkanda: req.headers['x-wakanda-id'],
127
+ });
128
+ }
129
+ }, { concurrency: 3 });
130
+ }, 10);
131
+ });
132
+ }, 8082);
133
+
134
+ try {
135
+ await instance.post('http://localhost:8081', {}, {
136
+ headers: {
137
+ 'x-test-header': 'testHeader111',
138
+ 'x-wakanda-id': 'my-wakanda-id',
139
+ },
140
+ timeout: 1,
141
+ });
142
+ } catch (e) {
143
+ error = e;
144
+ }
145
+
146
+ const [{ data: res1, headers: headers1 }, { data: res2, headers: headers2 }] = await Promise.all([
147
+ instance.post('http://localhost:8081', { f: 1 }, {
148
+ headers: {
149
+ 'x-test-header': 'testHeader1',
150
+ 'x-wakanda-id': 'my-wakanda-id',
151
+ },
152
+ }),
153
+ instance.post('http://localhost:8081', { c: 3 }, {
154
+ headers: {
155
+ 'x-test-header': 'testHeader1www',
156
+ 'x-wakanda-id': 'my-wakanda-id',
157
+ },
158
+ }),
159
+ axios.post('http://localhost:8081', { f: 1 }, {
160
+ headers: {
161
+ 'x-test-header': 'testHeader1dssds',
162
+ 'x-wakanda-id': 'my-wakanda-id',
163
+ },
164
+ }),
165
+ axios.post('http://localhost:8081', { n: 3 }, {
166
+ headers: {
167
+ 'x-test-header': 'testHeader2',
168
+ 'x-wakanda-id': 'my-wakanda-id',
169
+ },
170
+ })]);
171
+
172
+ const { data: res3, headers: headers3 } = await instance.post('http://localhost:8081', {}, {
173
+ headers: {
174
+ 'x-test-header': 'testHeader3',
175
+ 'x-wakanda-id': 'my-wakanda-id',
176
+ },
177
+ });
178
+
179
+ await axios.post('http://localhost:8081', { n: 3 }, {
180
+ headers: {
181
+ 'x-test-header': 'testHeader2',
182
+ 'x-wakanda-id': 'my-wakanda-id',
183
+ },
184
+ });
185
+
186
+ closeServer1();
187
+ closeServer2();
188
+
189
+
190
+ expect(error.code).toEqual('ECONNABORTED');
191
+
192
+
193
+ expect((new Set(server2TraceIds)).size).toEqual(7);
194
+
195
+ expect(headers1['x-trace-id']).not.toEqual(server2TraceIds[0]);
196
+ expect(headers2['x-trace-id']).not.toEqual(server2TraceIds[0]);
197
+ expect(headers3['x-trace-id']).not.toEqual(server2TraceIds[0]);
198
+
199
+ expect(res1.value).toEqual('testHeader1');
200
+ expect(res1.wkanda).toEqual('my-wakanda-id');
201
+ expect(res2.value).toEqual('testHeader1www');
202
+ expect(res2.wkanda).toEqual('my-wakanda-id');
203
+ expect(res3.value).toEqual('testHeader3');
204
+ expect(res2.wkanda).toEqual('my-wakanda-id');
205
+ });
73
206
  });
@@ -1 +0,0 @@
1
- {"version":3,"file":"http_wrapper.js","sourceRoot":"","sources":["../../src/http_wrapper.ts"],"names":[],"mappings":"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"}