@rsdk/core 4.0.0-next.9 → 4.0.1-next.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.
Files changed (136) hide show
  1. package/CHANGELOG.md +134 -40
  2. package/dist/app-metadata/app-name.validator.js.map +1 -1
  3. package/dist/config/additional-source/additional-source.initializer.js.map +1 -1
  4. package/dist/config/config-reload.indicator.js.map +1 -1
  5. package/dist/config/config.abstract.js.map +1 -1
  6. package/dist/config/config.module.js.map +1 -1
  7. package/dist/config/context/config.context.js.map +1 -1
  8. package/dist/config/metadata/config-metadata.registry.js.map +1 -1
  9. package/dist/config/metadata/decorators/config-section.decorator.js.map +1 -1
  10. package/dist/config/parsers/array.parser.js.map +1 -1
  11. package/dist/config/parsers/path/fspath.parser.js.map +1 -1
  12. package/dist/config/parsers/url/url.parser.js.map +1 -1
  13. package/dist/config/sources/base/config-source.abstract.js.map +1 -1
  14. package/dist/config/sources/base/reloadable-config-source.abstract.js.map +1 -1
  15. package/dist/config/sources/implementations/relodable-json-file.source.js.map +1 -1
  16. package/dist/config/strategy/app-name-strategy.validator.js.map +1 -1
  17. package/dist/config/types.js.map +1 -1
  18. package/dist/config/vars.class.js.map +1 -1
  19. package/dist/context.aggregator.js.map +1 -1
  20. package/dist/exceptions/base/platform-exception.absract.js.map +1 -1
  21. package/dist/exceptions/implementations/bootstrap/double-init.exception.js.map +1 -1
  22. package/dist/exceptions/implementations/bootstrap/no-init.exception.js.map +1 -1
  23. package/dist/exceptions/metadata/exceptions.registry.js.map +1 -1
  24. package/dist/exceptions.handling/global-exceptions.filter.d.ts +3 -1
  25. package/dist/exceptions.handling/global-exceptions.filter.js +10 -4
  26. package/dist/exceptions.handling/global-exceptions.filter.js.map +1 -1
  27. package/dist/exceptions.handling/types.d.ts +4 -11
  28. package/dist/health/autodoc/heath.autodoc-resolver.js.map +1 -1
  29. package/dist/health/health.service.js.map +1 -1
  30. package/dist/health/indicators.abstract/fs-access.indicator.js.map +1 -1
  31. package/dist/index.d.ts +7 -1
  32. package/dist/index.js +22 -2
  33. package/dist/index.js.map +1 -1
  34. package/dist/logging/logging.config.js +1 -2
  35. package/dist/logging/logging.config.js.map +1 -1
  36. package/dist/metrics/metadata/autodoc/metrics.autodoc-resolver.js.map +1 -1
  37. package/dist/metrics/metrics.module.js.map +1 -1
  38. package/dist/platform.context.js.map +1 -1
  39. package/dist/platform.module.js +0 -1
  40. package/dist/platform.module.js.map +1 -1
  41. package/dist/plugin/plugin.module.js.map +1 -1
  42. package/dist/rsdk-metadata/config-metadata.extractor.js.map +1 -1
  43. package/dist/tracing/active-span.module.d.ts +5 -0
  44. package/dist/tracing/active-span.module.js +25 -0
  45. package/dist/tracing/active-span.module.js.map +1 -0
  46. package/dist/tracing/constants.d.ts +7 -1
  47. package/dist/tracing/constants.js +8 -2
  48. package/dist/tracing/constants.js.map +1 -1
  49. package/dist/tracing/decorators/span.decorator.d.ts +2 -2
  50. package/dist/tracing/decorators/span.decorator.js +14 -2
  51. package/dist/tracing/decorators/span.decorator.js.map +1 -1
  52. package/dist/tracing/index.d.ts +7 -0
  53. package/dist/tracing/index.js +7 -0
  54. package/dist/tracing/index.js.map +1 -1
  55. package/dist/tracing/request-metadata.module.d.ts +5 -0
  56. package/dist/tracing/request-metadata.module.js +25 -0
  57. package/dist/tracing/request-metadata.module.js.map +1 -0
  58. package/dist/tracing/services/active-span.storage.d.ts +17 -0
  59. package/dist/tracing/services/active-span.storage.js +46 -0
  60. package/dist/tracing/services/active-span.storage.js.map +1 -0
  61. package/dist/tracing/services/index.d.ts +0 -1
  62. package/dist/tracing/services/index.js +0 -1
  63. package/dist/tracing/services/index.js.map +1 -1
  64. package/dist/tracing/services/instrumentation.service.d.ts +2 -8
  65. package/dist/tracing/services/instrumentation.service.js +9 -114
  66. package/dist/tracing/services/instrumentation.service.js.map +1 -1
  67. package/dist/tracing/services/request-metadata.injector.d.ts +6 -0
  68. package/dist/tracing/services/request-metadata.injector.js +122 -0
  69. package/dist/tracing/services/request-metadata.injector.js.map +1 -0
  70. package/dist/tracing/services/request-metadata.storage.d.ts +32 -0
  71. package/dist/tracing/services/request-metadata.storage.js +64 -0
  72. package/dist/tracing/services/request-metadata.storage.js.map +1 -0
  73. package/dist/tracing/services/trace.injector.d.ts +1 -1
  74. package/dist/tracing/services/trace.injector.js +213 -18
  75. package/dist/tracing/services/trace.injector.js.map +1 -1
  76. package/dist/tracing/tracing.interceptor.d.ts +9 -0
  77. package/dist/tracing/tracing.interceptor.js +24 -0
  78. package/dist/tracing/tracing.interceptor.js.map +1 -0
  79. package/dist/tracing/tracing.module.d.ts +1 -1
  80. package/dist/tracing/tracing.module.js +15 -16
  81. package/dist/tracing/tracing.module.js.map +1 -1
  82. package/dist/tracing/utils/create-span.d.ts +10 -0
  83. package/dist/tracing/utils/create-span.js +20 -0
  84. package/dist/tracing/utils/create-span.js.map +1 -0
  85. package/dist/tracing/utils/save-async-hooks-context.d.ts +19 -0
  86. package/dist/tracing/utils/save-async-hooks-context.js +57 -0
  87. package/dist/tracing/utils/save-async-hooks-context.js.map +1 -0
  88. package/dist/transport/get-transport-id.d.ts +5 -0
  89. package/dist/transport/get-transport-id.js +14 -0
  90. package/dist/transport/get-transport-id.js.map +1 -0
  91. package/dist/transport/protocol.detector.d.ts +7 -0
  92. package/dist/transport/protocol.detector.js +41 -0
  93. package/dist/transport/protocol.detector.js.map +1 -0
  94. package/dist/transport/transport.module.js +9 -0
  95. package/dist/transport/transport.module.js.map +1 -1
  96. package/dist/types/index.d.ts +1 -0
  97. package/dist/types/index.js +4 -0
  98. package/dist/types/index.js.map +1 -1
  99. package/dist/types/metadata.js.map +1 -1
  100. package/dist/types/transports.d.ts +12 -0
  101. package/dist/types/transports.js.map +1 -1
  102. package/dist/unhandled-rejection.handler.js.map +1 -1
  103. package/package.json +12 -12
  104. package/src/config/reload/config-reload.events.ts +9 -0
  105. package/src/config/sources/base/config-source.abstract.ts +2 -0
  106. package/src/config/types.ts +3 -0
  107. package/src/exceptions.handling/global-exceptions.filter.ts +6 -2
  108. package/src/exceptions.handling/types.ts +4 -11
  109. package/src/index.ts +25 -1
  110. package/src/logging/logging.config.ts +1 -2
  111. package/src/platform.module.ts +1 -2
  112. package/src/tracing/active-span.module.ts +13 -0
  113. package/src/tracing/constants.ts +8 -1
  114. package/src/tracing/decorators/span.decorator.ts +19 -6
  115. package/src/tracing/index.ts +7 -0
  116. package/src/tracing/request-metadata.module.ts +13 -0
  117. package/src/tracing/services/active-span.storage.ts +32 -0
  118. package/src/tracing/services/index.ts +0 -1
  119. package/src/tracing/services/instrumentation.service.ts +16 -130
  120. package/src/tracing/services/request-metadata.injector.ts +153 -0
  121. package/src/tracing/services/request-metadata.storage.ts +69 -0
  122. package/src/tracing/services/trace.injector.ts +268 -19
  123. package/src/tracing/tracing.interceptor.ts +18 -0
  124. package/src/tracing/tracing.module.ts +14 -14
  125. package/src/tracing/utils/create-span.ts +20 -0
  126. package/src/tracing/utils/save-async-hooks-context.ts +61 -0
  127. package/src/transport/get-transport-id.ts +20 -0
  128. package/src/transport/protocol.detector.ts +38 -0
  129. package/src/transport/transport.module.ts +10 -0
  130. package/src/types/index.ts +2 -0
  131. package/src/types/transports.ts +15 -0
  132. package/tsconfig.json +12 -2
  133. package/dist/tracing/services/metadata.scanner.d.ts +0 -11
  134. package/dist/tracing/services/metadata.scanner.js +0 -50
  135. package/dist/tracing/services/metadata.scanner.js.map +0 -1
  136. package/src/tracing/services/metadata.scanner.ts +0 -40
@@ -5,17 +5,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TraceInjector = void 0;
7
7
  const api_1 = require("@opentelemetry/api");
8
+ const propagator_b3_1 = require("@opentelemetry/propagator-b3");
9
+ const sdk_node_1 = require("@opentelemetry/sdk-node");
10
+ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
8
11
  const common_1 = require("@rsdk/common");
9
12
  const decorators_1 = require("@rsdk/decorators");
10
13
  const logging_1 = require("@rsdk/logging");
11
14
  const node_assert_1 = __importDefault(require("node:assert"));
15
+ const rxjs_1 = require("rxjs");
12
16
  const constants_1 = require("../constants");
13
17
  const logger = logging_1.LoggerFactory.create('TraceInjector');
14
18
  class TraceInjector {
15
19
  // eslint-disable-next-line @typescript-eslint/ban-types
16
20
  static wrap(cls,
17
21
  // eslint-disable-next-line @typescript-eslint/ban-types
18
- original, descriptor) {
22
+ original, descriptor, isTracingInterceptor) {
19
23
  /**
20
24
  * Означает, что данный метод уже обёрнут
21
25
  */
@@ -23,8 +27,8 @@ class TraceInjector {
23
27
  return;
24
28
  }
25
29
  logger.trace(`Wrapping method: ${cls.constructor.name}.${original.name}()`);
26
- const spanName = TraceInjector.createSpanName(cls, original.name);
27
- const wrapped = TraceInjector.createWrapper(original, spanName);
30
+ const spanName = TraceInjector.createSpanName(cls.constructor.name, original.name);
31
+ const wrapped = TraceInjector.createWrapper(original, spanName, isTracingInterceptor);
28
32
  (0, decorators_1.redecorate)(original, wrapped);
29
33
  if (descriptor) {
30
34
  descriptor.value = wrapped;
@@ -45,38 +49,226 @@ class TraceInjector {
45
49
  }
46
50
  if ((0, common_1.isRecord)(data) || Array.isArray(data)) {
47
51
  const serialized = JSON.stringify((0, common_1.normalizer)()(data));
48
- return serialized.length <= constants_1.MAX_BYTES
52
+ return serialized.length <= constants_1.MAX_BYTES.bytes()
49
53
  ? serialized
50
- : `data exceeds limit of ${constants_1.MAX_BYTES} bytes`;
54
+ : `data exceeds limit of ${constants_1.MAX_BYTES.bytes()} bytes`;
51
55
  }
52
56
  return 'data is undefined';
53
57
  }
54
- static createWrapper(original, spanName) {
58
+ static createWrapper(original, spanName, isTracingInterceptor) {
55
59
  return {
56
60
  [original.name](...args) {
57
61
  const tracer = api_1.trace.getTracer('@rsdk/open-telemetry', '1.0.0');
58
- return tracer.startActiveSpan(spanName, (span) => {
62
+ const executionContext = args[0];
63
+ /**
64
+ * Переменный для хранения значений которые получаем для опен телеметрии
65
+ */
66
+ let traceId;
67
+ let spanId;
68
+ let parentSpanId;
69
+ /**
70
+ * Этот флаг нужен для детекта первого входа и старта трейсинга, логика использования ниже в контексте
71
+ */
72
+ let hasParentSpanId = false;
73
+ /**
74
+ * Переменная для хранения Request/виртуального рекRequestвеста
75
+ */
76
+ let req;
77
+ /**
78
+ * Первый вход обычно происходит в глобальном интерцепторе
79
+ * он оборачивается в некий свой интернал тип спана который и передает этот флаг isTracingInterceptor=true
80
+ */
81
+ if (isTracingInterceptor) {
82
+ if (executionContext.getType() === 'rpc') {
83
+ const metadata = executionContext.switchToRpc().getContext();
84
+ /**
85
+ * Если мы пришли в GRPC и у нас есть методы для работы с Metadata
86
+ * то мы конвертируем Metadata в некий виртуальный request с заголовками (заголовки выбраны как общий стандарт проброса мета информации)
87
+ */
88
+ if (metadata?.get) {
89
+ req = {
90
+ headers: {
91
+ /**
92
+ * Пробрасываем текущий трейс ид запроса
93
+ */
94
+ ...(metadata.get(propagator_b3_1.X_B3_TRACE_ID).length > 0
95
+ ? {
96
+ [propagator_b3_1.X_B3_TRACE_ID]: metadata.get(propagator_b3_1.X_B3_TRACE_ID)[0],
97
+ }
98
+ : {}),
99
+ /**
100
+ * Пробрасываем текущий спан ид, он нужен чтобы установить цепочку с парентами и могли видеть правильную вложенность в графане
101
+ */
102
+ ...(metadata.get(propagator_b3_1.X_B3_SPAN_ID).length > 0
103
+ ? {
104
+ [propagator_b3_1.X_B3_SPAN_ID]: metadata.get(propagator_b3_1.X_B3_SPAN_ID)[0],
105
+ }
106
+ : {}),
107
+ /**
108
+ * Вот это не обычная переменная, она нужна для определения общего входа и детекта рутового спан ид,
109
+ * эта переменная нужна для работы флага hasParentSpanId
110
+ */
111
+ ...(metadata.get(propagator_b3_1.X_B3_PARENT_SPAN_ID).length > 0
112
+ ? {
113
+ [propagator_b3_1.X_B3_PARENT_SPAN_ID]: metadata.get(propagator_b3_1.X_B3_PARENT_SPAN_ID)[0],
114
+ }
115
+ : {}),
116
+ },
117
+ };
118
+ }
119
+ }
120
+ if (executionContext.getType() === 'http') {
121
+ req = executionContext.switchToHttp().getRequest();
122
+ }
123
+ if (executionContext.getType() === 'graphql') {
124
+ req = executionContext.getArgs()[2]?.req; // аналог GqlExecutionContext.create(executionContext).getContext().req
125
+ if (req.connectionInitReceived) {
126
+ /**
127
+ * При работе с сабскрипшен через веб сокет, заголовки передаются в опции подключения к сабскрипшен в переменную connectionParams
128
+ * и мы перегоняем эти данные в request заголовки
129
+ */
130
+ req.headers = {
131
+ ...req?.headers,
132
+ ...Object.entries(req?.connectionParams?.headers || {}).reduce((acc, [key, value]) => {
133
+ acc[key] = value;
134
+ return acc;
135
+ }, {}),
136
+ };
137
+ }
138
+ }
139
+ }
140
+ if (req?.headers) {
141
+ /**
142
+ * Мы приводим все ключи заголовков к одному **lower_case** регистру, так как у разных транспортов разные регистры в именовании ключей для заголовков
143
+ */
144
+ req.headers = {
145
+ ...Object.entries(req.headers).reduce((acc, [key, value]) => {
146
+ acc[key.toLowerCase()] = req.headers[key.toLowerCase()] || value;
147
+ return acc;
148
+ }, {}),
149
+ };
150
+ /**
151
+ * Трейс ид - входящий рутовый идентификатор, он по всем цепочкам идет
152
+ */
153
+ traceId = req.headers[propagator_b3_1.X_B3_TRACE_ID];
154
+ /**
155
+ * Спан ид - идентификатор который нужен для построения цепочки вызовов
156
+ */
157
+ spanId = req.headers[propagator_b3_1.X_B3_SPAN_ID];
158
+ /**
159
+ * Флаг определяет находимся ли мы на рутовой позиции (самая первая точка входа)
160
+ * определяется просто - если с клиента не передали заголовок X_B3_PARENT_SPAN_ID то значит мы в точке входа,
161
+ * иначе мы являемся частью другой общей цепочки
162
+ */
163
+ hasParentSpanId = !!Object.getOwnPropertyDescriptor(req.headers, propagator_b3_1.X_B3_PARENT_SPAN_ID);
164
+ /**
165
+ * Идентификатор родительского спана - больше нужен для определения рутового состояния в различных кодах по опен телеметрии
166
+ */
167
+ parentSpanId = req.headers[propagator_b3_1.X_B3_PARENT_SPAN_ID];
168
+ }
169
+ if (isTracingInterceptor) {
170
+ /**
171
+ * Когда мы находимся в интерцепторе, то названием спана является название класса + метод интерцептора
172
+ * мы перебиваем на название класса + метод который трекаем
173
+ */
174
+ spanName = TraceInjector.createSpanName(executionContext.getClass().name, executionContext.getHandler().name);
175
+ }
176
+ /**
177
+ * Создаем новый спан
178
+ */
179
+ const span = tracer.startSpan(spanName, {});
180
+ // path parentSpanId for correct link to parent span
181
+ if (isTracingInterceptor && hasParentSpanId && parentSpanId) {
182
+ /**
183
+ * Так как опентелеметрия ставит свой некий парент спан ид, то наш слетает
184
+ * если мы работаем в рамках монолита то ничего не слетает
185
+ * как только мы перемещаемся между приложениями - он слетает
186
+ * чтобы иметь корректный парент спан ид - мы патчим его жестко (из коробки нельзя это сделать)
187
+ */
188
+ span.parentSpanId = parentSpanId;
189
+ }
190
+ /**
191
+ * После создания контекста ранее при входе в приложение, у нас новый спан ид
192
+ * мы перетираем значением которе получили через заголовок
193
+ * в рамках приложения он корректный, но при переходе из одного приложения в другой - слетает
194
+ * и чтобы 100% все было норм, мы всегда патчим его
195
+ */
196
+ if (spanId) {
197
+ span.spanContext().spanId = spanId;
198
+ }
199
+ /**
200
+ * Патчим трайс ид, причина выше
201
+ */
202
+ if (traceId) {
203
+ span.spanContext().traceId = traceId;
204
+ }
205
+ if (req?.headers) {
206
+ /**
207
+ * Обычно самая первая точка входа это фронтовый запрос, который содержит некие заголовки хттп
208
+ * мы их кладем в рутовый спан
209
+ */
210
+ span.setAttribute(semantic_conventions_1.SemanticAttributes.HTTP_METHOD, req.method);
211
+ span.setAttribute(semantic_conventions_1.SemanticAttributes.HTTP_URL, req.originalUrl || req.url);
212
+ span.setAttribute(semantic_conventions_1.SemanticAttributes.HTTP_ROUTE, req.route?.path || req.routeOptions?.url || req.routerPath);
213
+ }
214
+ /**
215
+ * Чтобы пробросить пропатченный спан нужно запустить две строчки ниже:
216
+ * 1) создаем контекст в котором активный спан перебиваем новым
217
+ * 2) созданный контекст ставим основным и в нем запускаем под процесс
218
+ */
219
+ const spanContext = sdk_node_1.api.trace.setSpan(sdk_node_1.api.context.active(), span);
220
+ return sdk_node_1.api.context.with(spanContext, async () => {
59
221
  try {
60
- logger.trace(`Wrapped function invoked: ${original.name}`);
222
+ /**
223
+ * При запуске функции обернутой в опентелеметрию мы выводим и трейсИд и спанИд
224
+ * чтобы в ручную по логам отсмотреть порядок запусков, в случаи если нет доступа до борды графаны и на руках есть только файл с логами
225
+ */
226
+ logger.trace(`Wrapped function invoked: ${original.name}, traceId: ${span.spanContext().traceId}, spanId: ${span.spanContext().spanId}`);
61
227
  const result = original.apply(this, args);
62
228
  /**
63
- * If function returns promise:
64
- * - errors won't be caught with try-catch
65
- * - enriching span should be don when promise is resolved
66
- *
67
- * That's why this extra branch exists
229
+ * Если метод асинхронный - обрабтываем его и фиксируем успешное или не успешное завершение метода и зарываем спан,
230
+ * чтобы зафиксировать время запроса и видеть его в графане
68
231
  */
69
232
  if (result instanceof Promise) {
70
233
  return result
71
- .then((result) => TraceInjector.enrich(span, result))
72
- .catch((error) => TraceInjector.recordAndRethrow(error, span))
73
- .finally(() => span.end());
234
+ .then(async (result) => {
235
+ TraceInjector.enrich(span, result);
236
+ span.end();
237
+ return result;
238
+ })
239
+ .catch(async (error) => {
240
+ TraceInjector.recordAndRethrow(error, span);
241
+ span.end();
242
+ throw error;
243
+ });
74
244
  }
245
+ /**
246
+ * Если метод обзервабл - обрабтываем его и фиксируем успешное или не успешное завершение метода и зарываем спан,
247
+ * чтобы зафиксировать время запроса и видеть его в графане
248
+ */
249
+ if (result instanceof rxjs_1.Observable) {
250
+ return result.pipe((0, rxjs_1.mergeMap)((result) => {
251
+ TraceInjector.enrich(span, result);
252
+ span.end();
253
+ return (0, rxjs_1.of)(result);
254
+ }), (0, rxjs_1.catchError)((error) => {
255
+ TraceInjector.recordAndRethrow(error, span);
256
+ span.end();
257
+ return (0, rxjs_1.throwError)(() => error);
258
+ }));
259
+ }
260
+ /**
261
+ * Если метод вернул статичное значение - фиксируем успешное или не успешное завершение метода и зарываем спан,
262
+ * чтобы зафиксировать время запроса и видеть его в графане
263
+ */
75
264
  TraceInjector.enrich(span, result);
76
265
  span.end();
77
266
  return result;
78
267
  }
79
268
  catch (error) {
269
+ /**
270
+ * Обрабатываем ошибку и закрываем спан при попытке получения статичного результата или любую иную ошибку
271
+ */
80
272
  TraceInjector.recordAndRethrow(error, span);
81
273
  span.end();
82
274
  }
@@ -84,8 +276,11 @@ class TraceInjector {
84
276
  },
85
277
  }[original.name];
86
278
  }
87
- static createSpanName(cls, methodName) {
88
- return `${cls.constructor.name} -> ${methodName}`;
279
+ static createSpanName(className, methodName) {
280
+ /**
281
+ * Всего лишь правила формирования имени спана (не более того), для новой логики нужен был именно такой код
282
+ */
283
+ return `${className} -> ${methodName}`;
89
284
  }
90
285
  static isWrapped(prototype) {
91
286
  node_assert_1.default.ok(prototype);
@@ -1 +1 @@
1
- {"version":3,"file":"trace.injector.js","sourceRoot":"","sources":["../../../src/tracing/services/trace.injector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trace.injector.js","sourceRoot":"","sources":["../../../src/tracing/services/trace.injector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common';
2
+ import type { Observable } from 'rxjs';
3
+ /**
4
+ * Интернал глобальный интерцептор для работы опентелеметрии
5
+ * его поведение будет модифицировано в зависимости от включенного или выключенного состояния глобального трэйсинга
6
+ */
7
+ export declare class TracingInterceptor implements NestInterceptor {
8
+ intercept(_context: ExecutionContext, next: CallHandler): Observable<any>;
9
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.TracingInterceptor = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ /**
12
+ * Интернал глобальный интерцептор для работы опентелеметрии
13
+ * его поведение будет модифицировано в зависимости от включенного или выключенного состояния глобального трэйсинга
14
+ */
15
+ let TracingInterceptor = class TracingInterceptor {
16
+ intercept(_context, next) {
17
+ return next.handle();
18
+ }
19
+ };
20
+ exports.TracingInterceptor = TracingInterceptor;
21
+ exports.TracingInterceptor = TracingInterceptor = __decorate([
22
+ (0, common_1.Injectable)()
23
+ ], TracingInterceptor);
24
+ //# sourceMappingURL=tracing.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.interceptor.js","sourceRoot":"","sources":["../../src/tracing/tracing.interceptor.ts"],"names":[],"mappings":";;;;;;;;;AAKA,2CAA4C;AAG5C;;;GAGG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,SAAS,CAAC,QAA0B,EAAE,IAAiB;QACrD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AAJY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;GACA,kBAAkB,CAI9B"}
@@ -2,7 +2,7 @@ import type { DynamicModule } from '@nestjs/common';
2
2
  import { NodeSDK } from '@opentelemetry/sdk-node';
3
3
  import type { SpanExporter } from '@opentelemetry/sdk-trace-base';
4
4
  import { ILogger } from '@rsdk/logging';
5
- import { InstrumentationService } from './services/instrumentation.service';
5
+ import { InstrumentationService } from './services';
6
6
  import { TracingModuleConfig } from './tracing.config';
7
7
  export interface TracingModuleOptions {
8
8
  appName: string;
@@ -15,20 +15,21 @@ var TracingModule_1;
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.TracingModule = void 0;
17
17
  const common_1 = require("@nestjs/common");
18
+ const core_1 = require("@nestjs/core");
18
19
  const api_1 = require("@opentelemetry/api");
19
20
  const context_async_hooks_1 = require("@opentelemetry/context-async-hooks");
20
- const core_1 = require("@opentelemetry/core");
21
21
  const exporter_trace_otlp_http_1 = require("@opentelemetry/exporter-trace-otlp-http");
22
- const propagator_b3_1 = require("@opentelemetry/propagator-b3");
23
22
  const resources_1 = require("@opentelemetry/resources");
24
23
  const sdk_node_1 = require("@opentelemetry/sdk-node");
25
24
  const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
26
25
  const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
27
26
  const logging_1 = require("@rsdk/logging");
28
27
  const logging_2 = require("../logging");
29
- const instrumentation_service_1 = require("./services/instrumentation.service");
30
- const metadata_scanner_1 = require("./services/metadata.scanner");
28
+ const active_span_module_1 = require("./active-span.module");
29
+ const request_metadata_module_1 = require("./request-metadata.module");
30
+ const services_1 = require("./services");
31
31
  const tracing_config_1 = require("./tracing.config");
32
+ const tracing_interceptor_1 = require("./tracing.interceptor");
32
33
  let TracingModule = TracingModule_1 = class TracingModule {
33
34
  logger;
34
35
  instrumentations;
@@ -43,10 +44,14 @@ let TracingModule = TracingModule_1 = class TracingModule {
43
44
  static forRoot(options) {
44
45
  return {
45
46
  module: TracingModule_1,
47
+ imports: [request_metadata_module_1.RequestMetadataModule, active_span_module_1.ActiveSpanModule],
46
48
  providers: [
47
- metadata_scanner_1.ExtendedMetadataScanner,
48
- instrumentation_service_1.InstrumentationService,
49
+ services_1.InstrumentationService,
49
50
  this.createSDKProvider(options),
51
+ /**
52
+ * Глобальный интерцептор для проброса входящих traceId, spanId и requestId из заголовков и метадаты в активный AsyncLocalStorage запроса
53
+ */
54
+ { provide: core_1.APP_INTERCEPTOR, useClass: tracing_interceptor_1.TracingInterceptor },
50
55
  ],
51
56
  };
52
57
  }
@@ -69,20 +74,14 @@ let TracingModule = TracingModule_1 = class TracingModule {
69
74
  [semantic_conventions_1.SemanticResourceAttributes.SERVICE_NAME]: options.appName,
70
75
  }),
71
76
  spanProcessor: processor,
72
- textMapPropagator: new core_1.CompositePropagator({
73
- propagators: [
74
- new propagator_b3_1.B3Propagator(),
75
- new propagator_b3_1.B3Propagator({
76
- injectEncoding: propagator_b3_1.B3InjectEncoding.MULTI_HEADER,
77
- }),
78
- ],
79
- }),
80
77
  });
81
78
  },
82
79
  };
83
80
  }
84
81
  // Можно добавить включение и выключение при изменении конфига.
85
82
  async onModuleInit() {
83
+ this.logger.debug('Injecting request-metadata storage...');
84
+ this.instrumentations.injectWrapRequestMetadataInjector();
86
85
  if (!this.config.enabled) {
87
86
  this.logger.info('Tracing is disabled');
88
87
  return;
@@ -91,7 +90,7 @@ let TracingModule = TracingModule_1 = class TracingModule {
91
90
  this.logger.debug('Starting Open Telemetry SDK...');
92
91
  await this.sdk.start();
93
92
  this.logger.debug('Instrumenting nest.js entities...');
94
- this.instrumentations.inject();
93
+ this.instrumentations.injectWrapTraceInjector();
95
94
  this.logger.debug('Attaching log messages to spans...');
96
95
  logging_1.LoggerFactory.onMessage((level, msg) => {
97
96
  const span = api_1.trace.getSpan(api_1.context.active());
@@ -107,7 +106,7 @@ exports.TracingModule = TracingModule;
107
106
  exports.TracingModule = TracingModule = TracingModule_1 = __decorate([
108
107
  (0, common_1.Module)({}),
109
108
  __param(0, (0, logging_2.InjectLogger)(TracingModule)),
110
- __metadata("design:paramtypes", [Object, instrumentation_service_1.InstrumentationService,
109
+ __metadata("design:paramtypes", [Object, services_1.InstrumentationService,
111
110
  sdk_node_1.NodeSDK,
112
111
  tracing_config_1.TracingModuleConfig])
113
112
  ], TracingModule);
@@ -1 +1 @@
1
- {"version":3,"file":"tracing.module.js","sourceRoot":"","sources":["../../src/tracing/tracing.module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracing.module.js","sourceRoot":"","sources":["../../src/tracing/tracing.module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Функция для генерации корректного рандомного traceId и spanId
3
+ * алгоритм взят из: https://github.com/openzipkin/zipkin-js/blob/ec89188cf6a07e184ab886c1dfb6c9dc276ddfa4/packages/zipkin/src/tracer/randomTraceId.js
4
+ * спецификация по traceId: https://www.w3.org/TR/trace-context/#considerations-for-trace-id-field-generation
5
+ * @returns {traceId, spanId}
6
+ */
7
+ export declare function createSpan(): {
8
+ traceId: string;
9
+ spanId: string;
10
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSpan = void 0;
4
+ const common_1 = require("@rsdk/common");
5
+ /**
6
+ * Функция для генерации корректного рандомного traceId и spanId
7
+ * алгоритм взят из: https://github.com/openzipkin/zipkin-js/blob/ec89188cf6a07e184ab886c1dfb6c9dc276ddfa4/packages/zipkin/src/tracer/randomTraceId.js
8
+ * спецификация по traceId: https://www.w3.org/TR/trace-context/#considerations-for-trace-id-field-generation
9
+ * @returns {traceId, spanId}
10
+ */
11
+ function createSpan() {
12
+ const rootSpanId = (0, common_1.getRandomBytes)(16);
13
+ const traceId = (0, common_1.getRandomBytes)(16) + rootSpanId;
14
+ return {
15
+ traceId,
16
+ spanId: rootSpanId,
17
+ };
18
+ }
19
+ exports.createSpan = createSpan;
20
+ //# sourceMappingURL=create-span.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-span.js","sourceRoot":"","sources":["../../../src/tracing/utils/create-span.ts"],"names":[],"mappings":";;;AAAA,yCAA8C;AAE9C;;;;;GAKG;AACH,SAAgB,UAAU;IAIxB,MAAM,UAAU,GAAG,IAAA,uBAAc,EAAC,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAA,uBAAc,EAAC,EAAE,CAAC,GAAG,UAAU,CAAC;IAEhD,OAAO;QACL,OAAO;QACP,MAAM,EAAE,UAAU;KACnB,CAAC;AACJ,CAAC;AAXD,gCAWC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Проблема: при передаче управления в rxjs теряется контекст асинк локал стораджа
3
+ *
4
+ * Решение: Утилита для проброса инфы из асинк локал стораджа в тело пайпа rxjs
5
+ * поиском "observableToAsyncIterable" можно найти тесты в которых есть пример использования
6
+ *
7
+ * Тут есть часть логик трейсер декоратора, суть простая:
8
+ * мы - находясь в контексте с актуальным асинк Metadata запускаем создание боди для пайпа rx и тем самым мы передаем контекст работы туда
9
+ * ```
10
+ * return this.booksStream.pipe(
11
+ * concatMap(
12
+ * saveAsyncHooksContext(async (book) => {
13
+ * return { book: { ...book, pages: request.limit } };
14
+ * }),
15
+ * ),
16
+ * );
17
+ * ```
18
+ */
19
+ export declare function saveAsyncHooksContext<T>(fn: (...args: any[]) => Promise<T>): (...args: any[]) => Promise<T>;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.saveAsyncHooksContext = void 0;
4
+ const api_1 = require("@opentelemetry/api");
5
+ const sdk_node_1 = require("@opentelemetry/sdk-node");
6
+ const services_1 = require("../services");
7
+ const active_span_storage_1 = require("../services/active-span.storage");
8
+ /**
9
+ * Проблема: при передаче управления в rxjs теряется контекст асинк локал стораджа
10
+ *
11
+ * Решение: Утилита для проброса инфы из асинк локал стораджа в тело пайпа rxjs
12
+ * поиском "observableToAsyncIterable" можно найти тесты в которых есть пример использования
13
+ *
14
+ * Тут есть часть логик трейсер декоратора, суть простая:
15
+ * мы - находясь в контексте с актуальным асинк Metadata запускаем создание боди для пайпа rx и тем самым мы передаем контекст работы туда
16
+ * ```
17
+ * return this.booksStream.pipe(
18
+ * concatMap(
19
+ * saveAsyncHooksContext(async (book) => {
20
+ * return { book: { ...book, pages: request.limit } };
21
+ * }),
22
+ * ),
23
+ * );
24
+ * ```
25
+ */
26
+ function saveAsyncHooksContext(fn) {
27
+ const span = active_span_storage_1.ActiveSpanStorage.getInstance()?.getActiveSpan();
28
+ return async function (...args) {
29
+ const activeSpan = active_span_storage_1.ActiveSpanStorage.getInstance()?.getActiveSpan();
30
+ if (activeSpan) {
31
+ Object.assign(activeSpan.spanContext(), span?.spanContext());
32
+ return fn(...args);
33
+ }
34
+ if (!span) {
35
+ return fn(...args);
36
+ }
37
+ const spanContext = sdk_node_1.api.trace.setSpan(sdk_node_1.api.context.active(), span);
38
+ return sdk_node_1.api.context.with(spanContext, async () => fn(...args)
39
+ .then(async (result) => {
40
+ span.setAttribute('response', services_1.TraceInjector.toAttribute(result));
41
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
42
+ span.end();
43
+ return result;
44
+ })
45
+ .catch(async (error) => {
46
+ span.recordException(error);
47
+ span.setStatus({
48
+ code: api_1.SpanStatusCode.ERROR,
49
+ message: error.message,
50
+ });
51
+ span.end();
52
+ throw error;
53
+ }));
54
+ };
55
+ }
56
+ exports.saveAsyncHooksContext = saveAsyncHooksContext;
57
+ //# sourceMappingURL=save-async-hooks-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-async-hooks-context.js","sourceRoot":"","sources":["../../../src/tracing/utils/save-async-hooks-context.ts"],"names":[],"mappings":";;;AAAA,4CAAoD;AACpD,sDAA8C;AAG9C,0CAA4C;AAC5C,yEAAoE;AAEpE;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,qBAAqB,CACnC,EAAkC;IAElC,MAAM,IAAI,GAAG,uCAAiB,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,CAAC;IAE9D,OAAO,KAAK,WAAW,GAAG,IAAI;QAC5B,MAAM,UAAU,GAAG,uCAAiB,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,CAAC;QACpE,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;YAC7D,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,MAAM,WAAW,GAAG,cAAG,CAAC,KAAK,CAAC,OAAO,CAAC,cAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QAElE,OAAO,cAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAC9C,EAAE,CAAC,GAAG,IAAI,CAAC;aACR,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,wBAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACrB,IAAI,CAAC,eAAe,CAAC,KAAkB,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,oBAAc,CAAC,KAAK;gBAC1B,OAAO,EAAG,KAAmB,CAAC,OAAO;aACtC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CACL,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAnCD,sDAmCC"}
@@ -0,0 +1,5 @@
1
+ import type { ExecutionContext } from '@nestjs/common';
2
+ import type { ExecutionContextHost } from '@nestjs/core/helpers/execution-context-host';
3
+ import type { Transport } from '@nestjs/microservices';
4
+ export declare const TransportId: (...dataOrPipes: unknown[]) => ParameterDecorator;
5
+ export declare function getTransportId(context: ExecutionContext | ExecutionContextHost): Transport;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTransportId = exports.TransportId = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const constants_1 = require("@nestjs/microservices/constants");
6
+ exports.TransportId = (0, common_1.createParamDecorator)((_data, ctx) => {
7
+ return getTransportId(ctx);
8
+ });
9
+ function getTransportId(context) {
10
+ return (Reflect.getMetadata(constants_1.TRANSPORT_METADATA, context.getHandler()) ??
11
+ Reflect.getMetadata(constants_1.TRANSPORT_METADATA, context.getClass()));
12
+ }
13
+ exports.getTransportId = getTransportId;
14
+ //# sourceMappingURL=get-transport-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-transport-id.js","sourceRoot":"","sources":["../../src/transport/get-transport-id.ts"],"names":[],"mappings":";;;AACA,2CAAsD;AAGtD,+DAAqE;AAExD,QAAA,WAAW,GAAG,IAAA,6BAAoB,EAC7C,CAAC,KAAc,EAAE,GAA4C,EAAE,EAAE;IAC/D,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC,CACF,CAAC;AAEF,SAAgB,cAAc,CAC5B,OAAgD;IAEhD,OAAO,CACL,OAAO,CAAC,WAAW,CAAC,8BAAkB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC7D,OAAO,CAAC,WAAW,CAAC,8BAAkB,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAC5D,CAAC;AACJ,CAAC;AAPD,wCAOC"}
@@ -0,0 +1,7 @@
1
+ import type { ArgumentsHost } from '@nestjs/common';
2
+ import type { ITransport } from '../types';
3
+ export declare class ProtocolDetector {
4
+ private transports;
5
+ constructor(transports: ITransport[]);
6
+ getProtocol(context: ArgumentsHost): string | undefined;
7
+ }