@rsdk/core 4.0.0 → 4.0.1-next.1

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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.0.1-next.1](https://github.com/R-Vision/rsdk/compare/v4.0.0...v4.0.1-next.1) (2023-12-06)
7
+
8
+ **Note:** Version bump only for package @rsdk/core
9
+
10
+ ## [4.0.1-next.0](https://github.com/R-Vision/rsdk/compare/v4.0.0...v4.0.1-next.0) (2023-12-06)
11
+
12
+ **Note:** Version bump only for package @rsdk/core
13
+
6
14
  ## [4.0.0](https://github.com/R-Vision/rsdk/compare/v4.0.0-next.19...v4.0.0) (2023-12-04)
7
15
 
8
16
  **Note:** Version bump only for package @rsdk/core
@@ -0,0 +1 @@
1
+ export declare const autoInstumentationOptions: any[];
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.autoInstumentationOptions = void 0;
4
+ const auto_instrumentations_node_1 = require("@opentelemetry/auto-instrumentations-node");
5
+ const node_http_1 = require("node:http");
6
+ const request_metadata_storage_1 = require("./services/request-metadata.storage");
7
+ exports.autoInstumentationOptions = (0, auto_instrumentations_node_1.getNodeAutoInstrumentations)({
8
+ '@opentelemetry/instrumentation-aws-sdk': {
9
+ responseHook: (span, { response }) => {
10
+ if (response.request.commandInput?.Bucket) {
11
+ span.setAttribute('s3.bucket.name', response.request.commandInput?.Bucket);
12
+ }
13
+ },
14
+ },
15
+ '@opentelemetry/instrumentation-graphql': {
16
+ allowValues: true,
17
+ },
18
+ '@opentelemetry/instrumentation-http': {
19
+ requestHook: (span, request) => {
20
+ if (request instanceof node_http_1.IncomingMessage) {
21
+ if (request.method && request.url) {
22
+ span.updateName(`${request.method} ${request.url}`);
23
+ }
24
+ }
25
+ else if (request instanceof node_http_1.ClientRequest &&
26
+ request.req.method &&
27
+ request.req.url) {
28
+ span.updateName(`${request.req.method} ${request.req.url}`);
29
+ }
30
+ },
31
+ },
32
+ '@opentelemetry/instrumentation-pg': {
33
+ enhancedDatabaseReporting: true,
34
+ },
35
+ '@opentelemetry/instrumentation-pino': {
36
+ enabled: true,
37
+ logHook: (_span, record) => {
38
+ record['request_id'] =
39
+ request_metadata_storage_1.RequestMetadataStorage.getInstance()?.getRequestMetadata().requestId;
40
+ },
41
+ },
42
+ });
43
+ //# sourceMappingURL=auto-instrumentations.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-instrumentations.config.js","sourceRoot":"","sources":["../../src/tracing/auto-instrumentations.config.ts"],"names":[],"mappings":";;;AAAA,0FAAwF;AACxF,yCAA2D;AAE3D,kFAA6E;AAEhE,QAAA,yBAAyB,GAAU,IAAA,wDAA2B,EAAC;IAC1E,wCAAwC,EAAE;QACxC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YACnC,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBAC1C,IAAI,CAAC,YAAY,CACf,gBAAgB,EAChB,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CACtC,CAAC;YACJ,CAAC;QACH,CAAC;KACF;IACD,wCAAwC,EAAE;QACxC,WAAW,EAAE,IAAI;KAClB;IACD,qCAAqC,EAAE;QACrC,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YAC7B,IAAI,OAAO,YAAY,2BAAe,EAAE,CAAC;gBACvC,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;oBAClC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;iBAAM,IACL,OAAO,YAAY,yBAAa;gBAChC,OAAO,CAAC,GAAG,CAAC,MAAM;gBAClB,OAAO,CAAC,GAAG,CAAC,GAAG,EACf,CAAC;gBACD,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;KACF;IACD,mCAAmC,EAAE;QACnC,yBAAyB,EAAE,IAAI;KAChC;IACD,qCAAqC,EAAE;QACrC,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACzB,MAAM,CAAC,YAAY,CAAC;gBAClB,iDAAsB,CAAC,WAAW,EAAE,EAAE,kBAAkB,EAAE,CAAC,SAAS,CAAC;QACzE,CAAC;KACF;CACF,CAAC,CAAC"}
@@ -18,7 +18,7 @@ export declare class RequestMetadataStorage {
18
18
  /**
19
19
  * Получает новое значение из контекста
20
20
  */
21
- getRequestMetadata(): Promise<RequestMetadata>;
21
+ getRequestMetadata(): RequestMetadata;
22
22
  /**
23
23
  * Запускает переданную фунцию в контексте
24
24
  * @template TResult
@@ -37,7 +37,7 @@ let RequestMetadataStorage = class RequestMetadataStorage {
37
37
  /**
38
38
  * Получает новое значение из контекста
39
39
  */
40
- async getRequestMetadata() {
40
+ getRequestMetadata() {
41
41
  return (RequestMetadataStorage_1.instance?.asyncLocalStorage.getStore()
42
42
  ?.requestMetadata ?? {
43
43
  requestId: undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"request-metadata.storage.js","sourceRoot":"","sources":["../../../src/tracing/services/request-metadata.storage.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,uDAAqD;AAMrD;;;;GAIG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;;IACjC;;;OAGG;IACK,MAAM,CAAC,QAAQ,CAAqC;IAEpD,iBAAiB,GAAG,IAAI,oCAAiB,EAE7C,CAAC;IAEL;QACE,IAAI,CAAC,wBAAsB,CAAC,QAAQ,EAAE,CAAC;YACrC,wBAAsB,CAAC,QAAQ,GAAG,IAAI,CAAC;QACzC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,wBAAsB,CAAC,QAAQ,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,OAAO,CACL,wBAAsB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE;YAC3D,EAAE,eAAe,IAAI;YACrB,SAAS,EAAE,SAAS;SACrB,CACF,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,GAAG,CACD,eAAgC,EAChC,EAA+B,EAC/B,GAAG,IAAW;QAEd,OAAO,CACL,wBAAsB,EAAE,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CACrD,EAAE,eAAe,EAAE,EACnB,EAAE,EACF,GAAG,IAAI,CACR,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CACjB,CAAC;IACJ,CAAC;CACF,CAAA;AAvDY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;;GACA,sBAAsB,CAuDlC"}
1
+ {"version":3,"file":"request-metadata.storage.js","sourceRoot":"","sources":["../../../src/tracing/services/request-metadata.storage.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,uDAAqD;AAMrD;;;;GAIG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;;IACjC;;;OAGG;IACK,MAAM,CAAC,QAAQ,CAAqC;IAEpD,iBAAiB,GAAG,IAAI,oCAAiB,EAE7C,CAAC;IAEL;QACE,IAAI,CAAC,wBAAsB,CAAC,QAAQ,EAAE,CAAC;YACrC,wBAAsB,CAAC,QAAQ,GAAG,IAAI,CAAC;QACzC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,wBAAsB,CAAC,QAAQ,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,CACL,wBAAsB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE;YAC3D,EAAE,eAAe,IAAI;YACrB,SAAS,EAAE,SAAS;SACrB,CACF,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,GAAG,CACD,eAAgC,EAChC,EAA+B,EAC/B,GAAG,IAAW;QAEd,OAAO,CACL,wBAAsB,EAAE,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CACrD,EAAE,eAAe,EAAE,EACnB,EAAE,EACF,GAAG,IAAI,CACR,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CACjB,CAAC;IACJ,CAAC;CACF,CAAA;AAvDY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;;GACA,sBAAsB,CAuDlC"}
@@ -18,7 +18,9 @@ const common_1 = require("@nestjs/common");
18
18
  const core_1 = require("@nestjs/core");
19
19
  const api_1 = require("@opentelemetry/api");
20
20
  const context_async_hooks_1 = require("@opentelemetry/context-async-hooks");
21
+ const core_2 = require("@opentelemetry/core");
21
22
  const exporter_trace_otlp_http_1 = require("@opentelemetry/exporter-trace-otlp-http");
23
+ const propagator_b3_1 = require("@opentelemetry/propagator-b3");
22
24
  const resources_1 = require("@opentelemetry/resources");
23
25
  const sdk_node_1 = require("@opentelemetry/sdk-node");
24
26
  const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
@@ -26,6 +28,7 @@ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
26
28
  const logging_1 = require("@rsdk/logging");
27
29
  const logging_2 = require("../logging");
28
30
  const active_span_module_1 = require("./active-span.module");
31
+ const auto_instrumentations_config_1 = require("./auto-instrumentations.config");
29
32
  const request_metadata_module_1 = require("./request-metadata.module");
30
33
  const services_1 = require("./services");
31
34
  const tracing_config_1 = require("./tracing.config");
@@ -70,10 +73,19 @@ let TracingModule = TracingModule_1 = class TracingModule {
70
73
  return new sdk_node_1.NodeSDK({
71
74
  autoDetectResources: true,
72
75
  contextManager: new context_async_hooks_1.AsyncLocalStorageContextManager(),
76
+ instrumentations: [auto_instrumentations_config_1.autoInstumentationOptions],
73
77
  resource: new resources_1.Resource({
74
78
  [semantic_conventions_1.SemanticResourceAttributes.SERVICE_NAME]: options.appName,
75
79
  }),
76
80
  spanProcessor: processor,
81
+ textMapPropagator: new core_2.CompositePropagator({
82
+ propagators: [
83
+ new propagator_b3_1.B3Propagator(),
84
+ new propagator_b3_1.B3Propagator({
85
+ injectEncoding: propagator_b3_1.B3InjectEncoding.MULTI_HEADER,
86
+ }),
87
+ ],
88
+ }),
77
89
  });
78
90
  },
79
91
  };
@@ -88,10 +100,11 @@ let TracingModule = TracingModule_1 = class TracingModule {
88
100
  }
89
101
  this.logger.info('Tracing is enabled');
90
102
  this.logger.debug('Starting Open Telemetry SDK...');
91
- await this.sdk.start();
103
+ this.sdk.start();
92
104
  this.logger.debug('Instrumenting nest.js entities...');
93
105
  this.instrumentations.injectWrapTraceInjector();
94
106
  this.logger.debug('Attaching log messages to spans...');
107
+ logging_1.LoggerFactory.applyInstrumentations();
95
108
  logging_1.LoggerFactory.onMessage((level, msg) => {
96
109
  const span = api_1.trace.getSpan(api_1.context.active());
97
110
  span?.addEvent('log', { ...msg, level });
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdk/core",
3
- "version": "4.0.0",
3
+ "version": "4.0.1-next.1",
4
4
  "description": "Nestjs based microservice chassis",
5
5
  "license": "Apache License 2.0",
6
6
  "publishConfig": {
@@ -15,6 +15,7 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "@opentelemetry/api": "1.4.1",
18
+ "@opentelemetry/auto-instrumentations-node": "0.36.1",
18
19
  "@opentelemetry/context-async-hooks": "1.13.0",
19
20
  "@opentelemetry/core": "1.13.0",
20
21
  "@opentelemetry/exporter-trace-otlp-http": "0.39.1",
@@ -31,18 +32,18 @@
31
32
  "@nestjs/common": "^10.0.0",
32
33
  "@nestjs/core": "^10.0.0",
33
34
  "@nestjs/microservices": "^10.0.0",
34
- "@rsdk/autodoc.protocol": "^4.0.0",
35
- "@rsdk/common": "^4.0.0",
36
- "@rsdk/common.nestjs": "^4.0.0",
37
- "@rsdk/common.node": "^4.0.0",
38
- "@rsdk/decorators": "^4.0.0",
39
- "@rsdk/logging": "^4.0.0",
40
- "@rsdk/metadata": "^4.0.0",
41
- "@rsdk/nest-tools": "^4.0.0",
35
+ "@rsdk/autodoc.protocol": "^4.0.1-next.1",
36
+ "@rsdk/common": "^4.0.1-next.1",
37
+ "@rsdk/common.nestjs": "^4.0.1-next.1",
38
+ "@rsdk/common.node": "^4.0.1-next.1",
39
+ "@rsdk/decorators": "^4.0.1-next.1",
40
+ "@rsdk/logging": "^4.0.1-next.1",
41
+ "@rsdk/metadata": "^4.0.1-next.1",
42
+ "@rsdk/nest-tools": "^4.0.1-next.1",
42
43
  "axios": "^1.1.3",
43
44
  "pino": "^8.16.1",
44
45
  "reflect-metadata": "^0.1.13",
45
46
  "rxjs": "^7.0.0"
46
47
  },
47
- "gitHead": "e38e5b762d2c4aab277f0f65a5be5abcbccba8a8"
48
+ "gitHead": "9dcbaf369400a27c0b29fce9c7f319c5b81c9594"
48
49
  }
@@ -0,0 +1,45 @@
1
+ import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
2
+ import { ClientRequest, IncomingMessage } from 'node:http';
3
+
4
+ import { RequestMetadataStorage } from './services/request-metadata.storage';
5
+
6
+ export const autoInstumentationOptions: any[] = getNodeAutoInstrumentations({
7
+ '@opentelemetry/instrumentation-aws-sdk': {
8
+ responseHook: (span, { response }) => {
9
+ if (response.request.commandInput?.Bucket) {
10
+ span.setAttribute(
11
+ 's3.bucket.name',
12
+ response.request.commandInput?.Bucket,
13
+ );
14
+ }
15
+ },
16
+ },
17
+ '@opentelemetry/instrumentation-graphql': {
18
+ allowValues: true,
19
+ },
20
+ '@opentelemetry/instrumentation-http': {
21
+ requestHook: (span, request) => {
22
+ if (request instanceof IncomingMessage) {
23
+ if (request.method && request.url) {
24
+ span.updateName(`${request.method} ${request.url}`);
25
+ }
26
+ } else if (
27
+ request instanceof ClientRequest &&
28
+ request.req.method &&
29
+ request.req.url
30
+ ) {
31
+ span.updateName(`${request.req.method} ${request.req.url}`);
32
+ }
33
+ },
34
+ },
35
+ '@opentelemetry/instrumentation-pg': {
36
+ enhancedDatabaseReporting: true,
37
+ },
38
+ '@opentelemetry/instrumentation-pino': {
39
+ enabled: true,
40
+ logHook: (_span, record) => {
41
+ record['request_id'] =
42
+ RequestMetadataStorage.getInstance()?.getRequestMetadata().requestId;
43
+ },
44
+ },
45
+ });
@@ -35,7 +35,7 @@ export class RequestMetadataStorage {
35
35
  /**
36
36
  * Получает новое значение из контекста
37
37
  */
38
- async getRequestMetadata(): Promise<RequestMetadata> {
38
+ getRequestMetadata(): RequestMetadata {
39
39
  return (
40
40
  RequestMetadataStorage.instance?.asyncLocalStorage.getStore()
41
41
  ?.requestMetadata ?? {
@@ -3,7 +3,9 @@ import { Module } from '@nestjs/common';
3
3
  import { APP_INTERCEPTOR } from '@nestjs/core';
4
4
  import { context, trace } from '@opentelemetry/api';
5
5
  import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';
6
+ import { CompositePropagator } from '@opentelemetry/core';
6
7
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
8
+ import { B3InjectEncoding, B3Propagator } from '@opentelemetry/propagator-b3';
7
9
  import { Resource } from '@opentelemetry/resources';
8
10
  import { NodeSDK } from '@opentelemetry/sdk-node';
9
11
  import type { SpanExporter } from '@opentelemetry/sdk-trace-base';
@@ -17,6 +19,7 @@ import { ILogger, LoggerFactory } from '@rsdk/logging';
17
19
  import { InjectLogger } from '../logging';
18
20
 
19
21
  import { ActiveSpanModule } from './active-span.module';
22
+ import { autoInstumentationOptions } from './auto-instrumentations.config';
20
23
  import { RequestMetadataModule } from './request-metadata.module';
21
24
  import { InstrumentationService } from './services';
22
25
  import { TracingModuleConfig } from './tracing.config';
@@ -72,10 +75,19 @@ export class TracingModule {
72
75
  return new NodeSDK({
73
76
  autoDetectResources: true,
74
77
  contextManager: new AsyncLocalStorageContextManager(),
78
+ instrumentations: [autoInstumentationOptions],
75
79
  resource: new Resource({
76
80
  [SemanticResourceAttributes.SERVICE_NAME]: options.appName,
77
81
  }),
78
82
  spanProcessor: processor,
83
+ textMapPropagator: new CompositePropagator({
84
+ propagators: [
85
+ new B3Propagator(),
86
+ new B3Propagator({
87
+ injectEncoding: B3InjectEncoding.MULTI_HEADER,
88
+ }),
89
+ ],
90
+ }),
79
91
  });
80
92
  },
81
93
  };
@@ -95,12 +107,13 @@ export class TracingModule {
95
107
  this.logger.info('Tracing is enabled');
96
108
 
97
109
  this.logger.debug('Starting Open Telemetry SDK...');
98
- await this.sdk.start();
110
+ this.sdk.start();
99
111
 
100
112
  this.logger.debug('Instrumenting nest.js entities...');
101
113
  this.instrumentations.injectWrapTraceInjector();
102
114
 
103
115
  this.logger.debug('Attaching log messages to spans...');
116
+ LoggerFactory.applyInstrumentations();
104
117
  LoggerFactory.onMessage((level, msg) => {
105
118
  const span = trace.getSpan(context.active());
106
119