nestjs-otel 3.0.2 → 4.0.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.
- package/.eslintignore +1 -0
- package/.eslintrc.js +27 -0
- package/CHANGELOG.md +34 -0
- package/README.md +15 -23
- package/lib/index.js +5 -1
- package/lib/index.js.map +1 -1
- package/lib/interfaces/index.js +5 -1
- package/lib/interfaces/index.js.map +1 -1
- package/lib/interfaces/opentelemetry-options.interface.d.ts +2 -6
- package/lib/metrics/decorators/common.d.ts +1 -1
- package/lib/metrics/decorators/common.js +12 -7
- package/lib/metrics/decorators/common.js.map +1 -1
- package/lib/metrics/decorators/common.spec.d.ts +1 -0
- package/lib/metrics/decorators/common.spec.js +48 -0
- package/lib/metrics/decorators/common.spec.js.map +1 -0
- package/lib/metrics/decorators/index.js +5 -1
- package/lib/metrics/decorators/index.js.map +1 -1
- package/lib/metrics/metric-data.d.ts +4 -4
- package/lib/metrics/metric-data.js +6 -6
- package/lib/metrics/metric-data.js.map +1 -1
- package/lib/metrics/metric.service.d.ts +4 -4
- package/lib/metrics/metric.service.js +6 -6
- package/lib/metrics/metric.service.js.map +1 -1
- package/lib/middleware/api-metrics.middleware.d.ts +10 -17
- package/lib/middleware/api-metrics.middleware.js +40 -50
- package/lib/middleware/api-metrics.middleware.js.map +1 -1
- package/lib/middleware/index.js +5 -1
- package/lib/middleware/index.js.map +1 -1
- package/lib/opentelemetry-core.module.js +3 -11
- package/lib/opentelemetry-core.module.js.map +1 -1
- package/lib/opentelemetry.module.js.map +1 -1
- package/lib/opentelemetry.utils.d.ts +1 -0
- package/lib/opentelemetry.utils.js +10 -0
- package/lib/opentelemetry.utils.js.map +1 -0
- package/lib/tracing/decorators/span.d.ts +2 -1
- package/lib/tracing/decorators/span.js +29 -9
- package/lib/tracing/decorators/span.js.map +1 -1
- package/lib/tracing/decorators/span.spec.d.ts +1 -1
- package/lib/tracing/decorators/span.spec.js +80 -15
- package/lib/tracing/decorators/span.spec.js.map +1 -1
- package/lib/tracing/trace.service.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +31 -30
- package/tsconfig.json +16 -0
- package/.editorconfig +0 -21
- package/.husky/commit-msg +0 -4
- package/.husky/pre-commit +0 -5
- package/.prettierrc.js +0 -47
- package/.vscode/settings.json +0 -8
- package/REFERENCE.md +0 -5
- package/commitlint.config.js +0 -7
- package/examples/nestjs-fastify-prom-grafana-tempo/.dockerignore +0 -5
- package/examples/nestjs-fastify-prom-grafana-tempo/Dockerfile +0 -17
- package/examples/nestjs-fastify-prom-grafana-tempo/README.md +0 -5
- package/examples/nestjs-fastify-prom-grafana-tempo/data/grafana-data/dashboards/nestjs-otel.json +0 -1838
- package/examples/nestjs-fastify-prom-grafana-tempo/data/grafana-data/dashboards-provisioning/dashboards.yaml +0 -14
- package/examples/nestjs-fastify-prom-grafana-tempo/data/grafana-data/datasources/datasource.yml +0 -60
- package/examples/nestjs-fastify-prom-grafana-tempo/docker-compose.yml +0 -86
- package/examples/nestjs-fastify-prom-grafana-tempo/etc/loki-local.yaml +0 -64
- package/examples/nestjs-fastify-prom-grafana-tempo/etc/prometheus.yaml +0 -27
- package/examples/nestjs-fastify-prom-grafana-tempo/etc/promtail-local.yaml +0 -43
- package/examples/nestjs-fastify-prom-grafana-tempo/etc/tempo-local.yaml +0 -45
- package/examples/nestjs-fastify-prom-grafana-tempo/grafana-dashboard.png +0 -0
- package/examples/nestjs-fastify-prom-grafana-tempo/loki-logs.png +0 -0
- package/examples/nestjs-fastify-prom-grafana-tempo/nest-cli.json +0 -4
- package/examples/nestjs-fastify-prom-grafana-tempo/package.json +0 -85
- package/examples/nestjs-fastify-prom-grafana-tempo/src/app.controller.spec.ts +0 -22
- package/examples/nestjs-fastify-prom-grafana-tempo/src/app.controller.ts +0 -26
- package/examples/nestjs-fastify-prom-grafana-tempo/src/app.module.ts +0 -22
- package/examples/nestjs-fastify-prom-grafana-tempo/src/app.service.ts +0 -8
- package/examples/nestjs-fastify-prom-grafana-tempo/src/logger/logger.module.ts +0 -17
- package/examples/nestjs-fastify-prom-grafana-tempo/src/logger/logger.ts +0 -33
- package/examples/nestjs-fastify-prom-grafana-tempo/src/main.ts +0 -20
- package/examples/nestjs-fastify-prom-grafana-tempo/src/tracing.ts +0 -48
- package/examples/nestjs-fastify-prom-grafana-tempo/test/app.e2e-spec.ts +0 -24
- package/examples/nestjs-fastify-prom-grafana-tempo/test/jest-e2e.json +0 -9
- package/examples/nestjs-fastify-prom-grafana-tempo/tsconfig.build.json +0 -4
- package/examples/nestjs-prom-grafana-tempo/.dockerignore +0 -5
- package/examples/nestjs-prom-grafana-tempo/Dockerfile +0 -17
- package/examples/nestjs-prom-grafana-tempo/README.md +0 -11
- package/examples/nestjs-prom-grafana-tempo/data/grafana-data/dashboards/nestjs-otel.json +0 -1838
- package/examples/nestjs-prom-grafana-tempo/data/grafana-data/dashboards-provisioning/dashboards.yaml +0 -14
- package/examples/nestjs-prom-grafana-tempo/data/grafana-data/datasources/datasource.yml +0 -60
- package/examples/nestjs-prom-grafana-tempo/docker-compose.yml +0 -86
- package/examples/nestjs-prom-grafana-tempo/etc/loki-local.yaml +0 -64
- package/examples/nestjs-prom-grafana-tempo/etc/prometheus.yaml +0 -27
- package/examples/nestjs-prom-grafana-tempo/etc/promtail-local.yaml +0 -43
- package/examples/nestjs-prom-grafana-tempo/etc/tempo-local.yaml +0 -45
- package/examples/nestjs-prom-grafana-tempo/grafana-dashboard.png +0 -0
- package/examples/nestjs-prom-grafana-tempo/loki-logs.png +0 -0
- package/examples/nestjs-prom-grafana-tempo/nest-cli.json +0 -4
- package/examples/nestjs-prom-grafana-tempo/package.json +0 -89
- package/examples/nestjs-prom-grafana-tempo/src/app.controller.spec.ts +0 -22
- package/examples/nestjs-prom-grafana-tempo/src/app.controller.ts +0 -26
- package/examples/nestjs-prom-grafana-tempo/src/app.module.ts +0 -23
- package/examples/nestjs-prom-grafana-tempo/src/app.service.ts +0 -8
- package/examples/nestjs-prom-grafana-tempo/src/logger/logger.module.ts +0 -17
- package/examples/nestjs-prom-grafana-tempo/src/logger/logger.ts +0 -33
- package/examples/nestjs-prom-grafana-tempo/src/main.ts +0 -26
- package/examples/nestjs-prom-grafana-tempo/src/team/team.controller.ts +0 -22
- package/examples/nestjs-prom-grafana-tempo/src/team/team.entity.ts +0 -18
- package/examples/nestjs-prom-grafana-tempo/src/team/team.module.ts +0 -9
- package/examples/nestjs-prom-grafana-tempo/src/team/team.service.ts +0 -30
- package/examples/nestjs-prom-grafana-tempo/src/tracing.ts +0 -48
- package/examples/nestjs-prom-grafana-tempo/test/app.e2e-spec.ts +0 -24
- package/examples/nestjs-prom-grafana-tempo/test/jest-e2e.json +0 -9
- package/examples/nestjs-prom-grafana-tempo/tsconfig.build.json +0 -4
- package/examples/nestjs-prom-grafana-tempo-otel-collector/.dockerignore +0 -5
- package/examples/nestjs-prom-grafana-tempo-otel-collector/Dockerfile +0 -17
- package/examples/nestjs-prom-grafana-tempo-otel-collector/README.md +0 -5
- package/examples/nestjs-prom-grafana-tempo-otel-collector/data/grafana-data/dashboards/nestjs-otel.json +0 -1838
- package/examples/nestjs-prom-grafana-tempo-otel-collector/data/grafana-data/dashboards-provisioning/dashboards.yaml +0 -14
- package/examples/nestjs-prom-grafana-tempo-otel-collector/data/grafana-data/datasources/datasource.yml +0 -60
- package/examples/nestjs-prom-grafana-tempo-otel-collector/docker-compose.yml +0 -101
- package/examples/nestjs-prom-grafana-tempo-otel-collector/etc/loki-local.yaml +0 -64
- package/examples/nestjs-prom-grafana-tempo-otel-collector/etc/otel-collector-config.yaml +0 -37
- package/examples/nestjs-prom-grafana-tempo-otel-collector/etc/prometheus.yaml +0 -28
- package/examples/nestjs-prom-grafana-tempo-otel-collector/etc/promtail-local.yaml +0 -43
- package/examples/nestjs-prom-grafana-tempo-otel-collector/etc/tempo-local.yaml +0 -45
- package/examples/nestjs-prom-grafana-tempo-otel-collector/grafana-dashboard.png +0 -0
- package/examples/nestjs-prom-grafana-tempo-otel-collector/loki-logs.png +0 -0
- package/examples/nestjs-prom-grafana-tempo-otel-collector/nest-cli.json +0 -4
- package/examples/nestjs-prom-grafana-tempo-otel-collector/package.json +0 -86
- package/examples/nestjs-prom-grafana-tempo-otel-collector/src/app.controller.spec.ts +0 -22
- package/examples/nestjs-prom-grafana-tempo-otel-collector/src/app.controller.ts +0 -26
- package/examples/nestjs-prom-grafana-tempo-otel-collector/src/app.module.ts +0 -22
- package/examples/nestjs-prom-grafana-tempo-otel-collector/src/app.service.ts +0 -8
- package/examples/nestjs-prom-grafana-tempo-otel-collector/src/logger/logger.module.ts +0 -17
- package/examples/nestjs-prom-grafana-tempo-otel-collector/src/logger/logger.ts +0 -33
- package/examples/nestjs-prom-grafana-tempo-otel-collector/src/main.ts +0 -13
- package/examples/nestjs-prom-grafana-tempo-otel-collector/src/tracing.ts +0 -54
- package/examples/nestjs-prom-grafana-tempo-otel-collector/test/app.e2e-spec.ts +0 -24
- package/examples/nestjs-prom-grafana-tempo-otel-collector/test/jest-e2e.json +0 -9
- package/examples/nestjs-prom-grafana-tempo-otel-collector/tsconfig.build.json +0 -4
- package/src/interfaces/opentelemetry-options.interface.ts +0 -59
- package/src/metrics/decorators/common.ts +0 -52
- package/src/metrics/decorators/counter.ts +0 -17
- package/src/metrics/decorators/histogram.ts +0 -10
- package/src/metrics/decorators/observable.ts +0 -28
- package/src/metrics/injector.ts +0 -14
- package/src/metrics/metric-data.ts +0 -116
- package/src/metrics/metric.service.ts +0 -48
- package/src/metrics/utils.spec.ts +0 -9
- package/src/metrics/utils.ts +0 -6
- package/src/middleware/api-metrics.middleware.ts +0 -174
- package/src/opentelemetry-core.module.ts +0 -175
- package/src/opentelemetry.constants.ts +0 -2
- package/src/opentelemetry.module.ts +0 -34
- package/src/tracing/decorators/span.spec.ts +0 -48
- package/src/tracing/decorators/span.ts +0 -23
- package/src/tracing/trace.service.ts +0 -17
|
@@ -12,62 +12,52 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.ApiMetricsMiddleware =
|
|
15
|
+
exports.ApiMetricsMiddleware = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const responseTime = require("response-time");
|
|
18
18
|
const urlParser = require("url");
|
|
19
19
|
const metric_service_1 = require("../metrics/metric.service");
|
|
20
20
|
const opentelemetry_constants_1 = require("../opentelemetry.constants");
|
|
21
|
-
exports.DEFAULT_LONG_RUNNING_REQUEST_BUCKETS = [
|
|
22
|
-
0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10,
|
|
23
|
-
30, 60, 120, 300, 600,
|
|
24
|
-
];
|
|
25
|
-
exports.DEFAULT_REQUEST_SIZE_BUCKETS = [5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000];
|
|
26
|
-
exports.DEFAULT_RESPONSE_SIZE_BUCKETS = [
|
|
27
|
-
5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000,
|
|
28
|
-
];
|
|
29
21
|
let ApiMetricsMiddleware = class ApiMetricsMiddleware {
|
|
30
22
|
constructor(metricService, options = {}) {
|
|
31
23
|
this.metricService = metricService;
|
|
32
24
|
this.options = options;
|
|
33
|
-
|
|
34
|
-
this.
|
|
35
|
-
this.
|
|
36
|
-
this.
|
|
25
|
+
const { defaultAttributes = {}, ignoreUndefinedRoutes = false, } = options?.metrics?.apiMetrics;
|
|
26
|
+
this.defaultMetricAttributes = defaultAttributes;
|
|
27
|
+
this.ignoreUndefinedRoutes = ignoreUndefinedRoutes;
|
|
28
|
+
this.httpServerRequestCount = this.metricService.getCounter('http.server.request.count', {
|
|
37
29
|
description: 'Total number of HTTP requests',
|
|
30
|
+
unit: 'requests',
|
|
38
31
|
});
|
|
39
|
-
this.
|
|
32
|
+
this.httpServerResponseCount = this.metricService.getCounter('http.server.response.count', {
|
|
40
33
|
description: 'Total number of HTTP responses',
|
|
34
|
+
unit: 'responses',
|
|
41
35
|
});
|
|
42
|
-
this.
|
|
43
|
-
description: 'Total number of
|
|
36
|
+
this.httpServerAbortCount = this.metricService.getCounter('http.server.abort.count', {
|
|
37
|
+
description: 'Total number of data transfers aborted',
|
|
38
|
+
unit: 'requests',
|
|
44
39
|
});
|
|
45
|
-
this.
|
|
46
|
-
description: '
|
|
40
|
+
this.httpServerDuration = this.metricService.getHistogram('http.server.duration', {
|
|
41
|
+
description: 'The duration of the inbound HTTP request',
|
|
42
|
+
unit: 'ms',
|
|
47
43
|
});
|
|
48
|
-
this.
|
|
49
|
-
description: '
|
|
44
|
+
this.httpServerRequestSize = this.metricService.getHistogram('http.server.request.size', {
|
|
45
|
+
description: 'Size of incoming bytes',
|
|
46
|
+
unit: 'By',
|
|
50
47
|
});
|
|
51
|
-
this.
|
|
52
|
-
description: '
|
|
48
|
+
this.httpServerResponseSize = this.metricService.getHistogram('http.server.response.size', {
|
|
49
|
+
description: 'Size of outgoing bytes',
|
|
50
|
+
unit: 'By',
|
|
53
51
|
});
|
|
54
|
-
this.
|
|
55
|
-
description: 'Total number of
|
|
56
|
-
|
|
57
|
-
const { timeBuckets = [], requestSizeBuckets = [], responseSizeBuckets = [], defaultAttributes = {}, ignoreUndefinedRoutes = false, } = options?.metrics?.apiMetrics;
|
|
58
|
-
this.defaultAttributes = defaultAttributes;
|
|
59
|
-
this.ignoreUndefinedRoutes = ignoreUndefinedRoutes;
|
|
60
|
-
this.requestDuration = this.metricService.getHistogram('http_request_duration_seconds', {
|
|
61
|
-
boundaries: timeBuckets.length > 0 ? timeBuckets : this.defaultLongRunningRequestBuckets,
|
|
62
|
-
description: 'HTTP latency value recorder in seconds',
|
|
52
|
+
this.httpServerResponseSuccessCount = this.metricService.getCounter('http.server.response.success.count', {
|
|
53
|
+
description: 'Total number of all successful responses',
|
|
54
|
+
unit: 'responses',
|
|
63
55
|
});
|
|
64
|
-
this.
|
|
65
|
-
|
|
66
|
-
description: 'Current total of incoming bytes',
|
|
56
|
+
this.httpServerResponseErrorCount = this.metricService.getCounter('http.server.response.error.count', {
|
|
57
|
+
description: 'Total number of all response errors',
|
|
67
58
|
});
|
|
68
|
-
this.
|
|
69
|
-
|
|
70
|
-
description: 'Current total of outgoing bytes',
|
|
59
|
+
this.httpClientRequestErrorCount = this.metricService.getCounter('http.client.request.error.count', {
|
|
60
|
+
description: 'Total number of client error requests',
|
|
71
61
|
});
|
|
72
62
|
}
|
|
73
63
|
use(req, res, next) {
|
|
@@ -83,37 +73,37 @@ let ApiMetricsMiddleware = class ApiMetricsMiddleware {
|
|
|
83
73
|
else {
|
|
84
74
|
path = urlParser.parse(url).pathname;
|
|
85
75
|
}
|
|
86
|
-
this.
|
|
76
|
+
this.httpServerRequestCount.add(1, { method, path });
|
|
87
77
|
const requestLength = parseInt(req.headers['content-length'], 10) || 0;
|
|
88
78
|
const responseLength = parseInt(res.getHeader('Content-Length'), 10) || 0;
|
|
89
79
|
const status = res.statusCode || 500;
|
|
90
80
|
const attributes = {
|
|
91
|
-
method, status, path, ...this.
|
|
81
|
+
method, status, path, ...this.defaultMetricAttributes,
|
|
92
82
|
};
|
|
93
|
-
this.
|
|
94
|
-
this.
|
|
95
|
-
this.
|
|
96
|
-
this.
|
|
83
|
+
this.httpServerRequestSize.record(requestLength, attributes);
|
|
84
|
+
this.httpServerResponseSize.record(responseLength, attributes);
|
|
85
|
+
this.httpServerResponseCount.add(1, attributes);
|
|
86
|
+
this.httpServerDuration.record(time / 1000, attributes);
|
|
97
87
|
const codeClass = this.getStatusCodeClass(status);
|
|
98
88
|
switch (codeClass) {
|
|
99
89
|
case 'success':
|
|
100
|
-
this.
|
|
90
|
+
this.httpServerResponseSuccessCount.add(1);
|
|
101
91
|
break;
|
|
102
92
|
case 'redirect':
|
|
103
|
-
this.
|
|
93
|
+
this.httpServerResponseSuccessCount.add(1);
|
|
104
94
|
break;
|
|
105
95
|
case 'client_error':
|
|
106
|
-
this.
|
|
107
|
-
this.
|
|
96
|
+
this.httpServerResponseErrorCount.add(1);
|
|
97
|
+
this.httpClientRequestErrorCount.add(1);
|
|
108
98
|
break;
|
|
109
99
|
case 'server_error':
|
|
110
|
-
this.
|
|
111
|
-
this.
|
|
100
|
+
this.httpServerResponseErrorCount.add(1);
|
|
101
|
+
this.httpClientRequestErrorCount.add(1);
|
|
112
102
|
break;
|
|
113
103
|
}
|
|
114
104
|
req.on('end', () => {
|
|
115
105
|
if (req.aborted === true) {
|
|
116
|
-
this.
|
|
106
|
+
this.httpServerAbortCount.add(1);
|
|
117
107
|
}
|
|
118
108
|
});
|
|
119
109
|
})(req, res, next);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-metrics.middleware.js","sourceRoot":"","sources":["../../src/middleware/api-metrics.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoE;AACpE,8CAA8C;AAC9C,iCAAiC;
|
|
1
|
+
{"version":3,"file":"api-metrics.middleware.js","sourceRoot":"","sources":["../../src/middleware/api-metrics.middleware.ts"],"names":[],"mappings":"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"}
|
package/lib/middleware/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,2DAAyC"}
|
|
@@ -21,13 +21,12 @@ const metric_service_1 = require("./metrics/metric.service");
|
|
|
21
21
|
const middleware_1 = require("./middleware");
|
|
22
22
|
const opentelemetry_constants_1 = require("./opentelemetry.constants");
|
|
23
23
|
const trace_service_1 = require("./tracing/trace.service");
|
|
24
|
-
const opentelemetry_module_1 = require("./opentelemetry.module");
|
|
25
24
|
let OpenTelemetryCoreModule = OpenTelemetryCoreModule_1 = class OpenTelemetryCoreModule {
|
|
26
25
|
constructor(options = {}) {
|
|
27
26
|
this.options = options;
|
|
28
27
|
this.logger = new common_1.Logger('OpenTelemetryModule');
|
|
29
28
|
}
|
|
30
|
-
static forRoot(options = {
|
|
29
|
+
static forRoot(options = {}) {
|
|
31
30
|
const openTelemetryModuleOptions = {
|
|
32
31
|
provide: opentelemetry_constants_1.OPENTELEMETRY_MODULE_OPTIONS,
|
|
33
32
|
useValue: options,
|
|
@@ -48,7 +47,7 @@ let OpenTelemetryCoreModule = OpenTelemetryCoreModule_1 = class OpenTelemetryCor
|
|
|
48
47
|
static forRootAsync(options) {
|
|
49
48
|
const asyncProviders = this.createAsyncProviders(options);
|
|
50
49
|
return {
|
|
51
|
-
module:
|
|
50
|
+
module: OpenTelemetryCoreModule_1,
|
|
52
51
|
imports: [...(options.imports || [])],
|
|
53
52
|
providers: [
|
|
54
53
|
...asyncProviders,
|
|
@@ -62,7 +61,7 @@ let OpenTelemetryCoreModule = OpenTelemetryCoreModule_1 = class OpenTelemetryCor
|
|
|
62
61
|
};
|
|
63
62
|
}
|
|
64
63
|
configure(consumer) {
|
|
65
|
-
const { apiMetrics = { enable: false }, } = this.options?.metrics;
|
|
64
|
+
const { apiMetrics = { enable: false }, } = this.options?.metrics ?? {};
|
|
66
65
|
if (apiMetrics.enable === true) {
|
|
67
66
|
if (apiMetrics?.ignoreRoutes && apiMetrics?.ignoreRoutes.length > 0) {
|
|
68
67
|
consumer.apply(middleware_1.ApiMetricsMiddleware).exclude(...apiMetrics.ignoreRoutes).forRoutes('*');
|
|
@@ -73,18 +72,12 @@ let OpenTelemetryCoreModule = OpenTelemetryCoreModule_1 = class OpenTelemetryCor
|
|
|
73
72
|
}
|
|
74
73
|
}
|
|
75
74
|
async onApplicationBootstrap() {
|
|
76
|
-
let defaultMetrics = false;
|
|
77
75
|
let hostMetrics = false;
|
|
78
76
|
if (this.options?.metrics) {
|
|
79
|
-
defaultMetrics = this.options.metrics.defaultMetrics
|
|
80
|
-
!== undefined ? this.options.metrics.defaultMetrics : false;
|
|
81
77
|
hostMetrics = this.options.metrics.hostMetrics
|
|
82
78
|
!== undefined ? this.options.metrics.hostMetrics : false;
|
|
83
79
|
}
|
|
84
80
|
const meterProvider = api_metrics_1.metrics.getMeterProvider();
|
|
85
|
-
if (defaultMetrics) {
|
|
86
|
-
require('opentelemetry-node-metrics')(meterProvider);
|
|
87
|
-
}
|
|
88
81
|
if (hostMetrics) {
|
|
89
82
|
const host = new host_metrics_1.HostMetrics({ meterProvider, name: 'host-metrics' });
|
|
90
83
|
host.start();
|
|
@@ -120,7 +113,6 @@ let OpenTelemetryCoreModule = OpenTelemetryCoreModule_1 = class OpenTelemetryCor
|
|
|
120
113
|
{
|
|
121
114
|
provide: useClass,
|
|
122
115
|
useClass,
|
|
123
|
-
inject: [...(options.inject || [])],
|
|
124
116
|
},
|
|
125
117
|
];
|
|
126
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opentelemetry-core.module.js","sourceRoot":"","sources":["../src/opentelemetry-core.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAIwB;AACxB,8DAA0D;AAC1D,4DAAqD;AAErD,6DAAyD;AACzD,6CAAoD;AACpD,uEAEmC;AACnC,2DAAuD;
|
|
1
|
+
{"version":3,"file":"opentelemetry-core.module.js","sourceRoot":"","sources":["../src/opentelemetry-core.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opentelemetry.module.js","sourceRoot":"","sources":["../src/opentelemetry.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,2EAAsE;
|
|
1
|
+
{"version":3,"file":"opentelemetry.module.js","sourceRoot":"","sources":["../src/opentelemetry.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,2EAAsE;AAS/D,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAK9B,MAAM,CAAC,OAAO,CAAC,OAAoC;QACjD,OAAO;YACL,MAAM,EAAE,qBAAmB;YAC3B,OAAO,EAAE,CAAC,mDAAuB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACpD,CAAC;IACJ,CAAC;IAOD,MAAM,CAAC,YAAY,CAAC,OAAwC;QAC1D,OAAO;YACL,MAAM,EAAE,qBAAmB;YAC3B,OAAO,EAAE,CAAC,mDAAuB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SACzD,CAAC;IACJ,CAAC;CACF,CAAA;AAvBY,mBAAmB;IAD/B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,mBAAmB,CAuB/B;AAvBY,kDAAmB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const copyMetadataFromFunctionToFunction: (originalFunction: Function, newFunction: Function) => void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.copyMetadataFromFunctionToFunction = void 0;
|
|
4
|
+
const copyMetadataFromFunctionToFunction = (originalFunction, newFunction) => {
|
|
5
|
+
Reflect.getMetadataKeys(originalFunction).forEach(metadataKey => {
|
|
6
|
+
Reflect.defineMetadata(metadataKey, Reflect.getMetadata(metadataKey, originalFunction), newFunction);
|
|
7
|
+
});
|
|
8
|
+
};
|
|
9
|
+
exports.copyMetadataFromFunctionToFunction = copyMetadataFromFunctionToFunction;
|
|
10
|
+
//# sourceMappingURL=opentelemetry.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opentelemetry.utils.js","sourceRoot":"","sources":["../src/opentelemetry.utils.ts"],"names":[],"mappings":";;;AAAO,MAAM,kCAAkC,GAAG,CAChD,gBAA0B,EAC1B,WAAqB,EACf,EAAE;IAIR,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;QAC9D,OAAO,CAAC,cAAc,CACpB,WAAW,EACX,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAClD,WAAW,CACZ,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAdW,QAAA,kCAAkC,sCAc7C"}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { SpanOptions } from '@opentelemetry/api';
|
|
2
|
+
export declare function Span(name?: string, options?: SpanOptions): (target: any, propertyKey: string, propertyDescriptor: PropertyDescriptor) => void;
|
|
@@ -2,23 +2,43 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Span = void 0;
|
|
4
4
|
const api_1 = require("@opentelemetry/api");
|
|
5
|
-
|
|
5
|
+
const opentelemetry_utils_1 = require("../../opentelemetry.utils");
|
|
6
|
+
const recordException = (span, error) => {
|
|
7
|
+
span.recordException(error);
|
|
8
|
+
span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: error.message });
|
|
9
|
+
};
|
|
10
|
+
function Span(name, options = {}) {
|
|
6
11
|
return (target, propertyKey, propertyDescriptor) => {
|
|
7
|
-
const
|
|
8
|
-
|
|
12
|
+
const originalFunction = propertyDescriptor.value;
|
|
13
|
+
const wrappedFunction = function PropertyDescriptor(...args) {
|
|
9
14
|
const tracer = api_1.trace.getTracer('default');
|
|
10
15
|
const spanName = name || `${target.constructor.name}.${propertyKey}`;
|
|
11
|
-
return tracer.startActiveSpan(spanName, span => {
|
|
12
|
-
if (
|
|
13
|
-
return
|
|
16
|
+
return tracer.startActiveSpan(spanName, options, span => {
|
|
17
|
+
if (originalFunction.constructor.name === 'AsyncFunction') {
|
|
18
|
+
return originalFunction
|
|
19
|
+
.apply(this, args)
|
|
20
|
+
.catch(error => {
|
|
21
|
+
recordException(span, error);
|
|
22
|
+
throw error;
|
|
23
|
+
})
|
|
24
|
+
.finally(() => {
|
|
14
25
|
span.end();
|
|
15
26
|
});
|
|
16
27
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
28
|
+
try {
|
|
29
|
+
return originalFunction.apply(this, args);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
recordException(span, error);
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
span.end();
|
|
37
|
+
}
|
|
20
38
|
});
|
|
21
39
|
};
|
|
40
|
+
propertyDescriptor.value = wrappedFunction;
|
|
41
|
+
(0, opentelemetry_utils_1.copyMetadataFromFunctionToFunction)(originalFunction, wrappedFunction);
|
|
22
42
|
};
|
|
23
43
|
}
|
|
24
44
|
exports.Span = Span;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span.js","sourceRoot":"","sources":["../../../src/tracing/decorators/span.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"span.js","sourceRoot":"","sources":["../../../src/tracing/decorators/span.ts"],"names":[],"mappings":";;;AAAA,4CAE4B;AAC5B,mEAA+E;AAE/E,MAAM,eAAe,GAAG,CAAC,IAAa,EAAE,KAAU,EAAE,EAAE;IACpD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,SAAgB,IAAI,CAAC,IAAa,EAAE,UAAuB,EAAE;IAC3D,OAAO,CAAC,MAAW,EAAE,WAAmB,EAAE,kBAAsC,EAAE,EAAE;QAClF,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,KAAK,CAAC;QAClD,MAAM,eAAe,GAAG,SAAS,kBAAkB,CAAC,GAAG,IAAW;YAChE,MAAM,MAAM,GAAG,WAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;YAErE,OAAO,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;gBACtD,IAAI,gBAAgB,CAAC,WAAW,CAAC,IAAI,KAAK,eAAe,EAAE;oBACzD,OAAO,gBAAgB;yBACpB,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;yBACjB,KAAK,CAAC,KAAK,CAAC,EAAE;wBACb,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;wBAE7B,MAAM,KAAK,CAAC;oBACd,CAAC,CAAC;yBACD,OAAO,CAAC,GAAG,EAAE;wBACZ,IAAI,CAAC,GAAG,EAAE,CAAC;oBACb,CAAC,CAAC,CAAC;iBACN;gBAED,IAAI;oBACF,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAC3C;gBAAC,OAAO,KAAK,EAAE;oBACd,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAE7B,MAAM,KAAK,CAAC;iBACb;wBAAS;oBACR,IAAI,CAAC,GAAG,EAAE,CAAC;iBACZ;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,kBAAkB,CAAC,KAAK,GAAG,eAAe,CAAC;QAE3C,IAAA,wDAAkC,EAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;IACxE,CAAC,CAAC;AACJ,CAAC;AArCD,oBAqCC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import 'reflect-metadata';
|
|
@@ -9,16 +9,23 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
require("reflect-metadata");
|
|
12
13
|
const api_1 = require("@opentelemetry/api");
|
|
13
14
|
const sdk_node_1 = require("@opentelemetry/sdk-node");
|
|
15
|
+
const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
14
17
|
const span_1 = require("./span");
|
|
18
|
+
const TestDecoratorThatSetsMetadata = () => (0, common_1.SetMetadata)('some-metadata', true);
|
|
15
19
|
class TestSpan {
|
|
16
|
-
singleSpan() {
|
|
17
|
-
return api_1.trace.getSpan(api_1.context.active());
|
|
18
|
-
}
|
|
20
|
+
singleSpan() { }
|
|
19
21
|
doubleSpan() {
|
|
20
22
|
return this.singleSpan();
|
|
21
23
|
}
|
|
24
|
+
fooProducerSpan() { }
|
|
25
|
+
error() {
|
|
26
|
+
throw new Error('hello world');
|
|
27
|
+
}
|
|
28
|
+
metadata() { }
|
|
22
29
|
}
|
|
23
30
|
__decorate([
|
|
24
31
|
(0, span_1.Span)(),
|
|
@@ -32,27 +39,85 @@ __decorate([
|
|
|
32
39
|
__metadata("design:paramtypes", []),
|
|
33
40
|
__metadata("design:returntype", void 0)
|
|
34
41
|
], TestSpan.prototype, "doubleSpan", null);
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, span_1.Span)('foo', { kind: api_1.SpanKind.PRODUCER }),
|
|
44
|
+
__metadata("design:type", Function),
|
|
45
|
+
__metadata("design:paramtypes", []),
|
|
46
|
+
__metadata("design:returntype", void 0)
|
|
47
|
+
], TestSpan.prototype, "fooProducerSpan", null);
|
|
48
|
+
__decorate([
|
|
49
|
+
(0, span_1.Span)(),
|
|
50
|
+
__metadata("design:type", Function),
|
|
51
|
+
__metadata("design:paramtypes", []),
|
|
52
|
+
__metadata("design:returntype", void 0)
|
|
53
|
+
], TestSpan.prototype, "error", null);
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, span_1.Span)(),
|
|
56
|
+
TestDecoratorThatSetsMetadata(),
|
|
57
|
+
__metadata("design:type", Function),
|
|
58
|
+
__metadata("design:paramtypes", []),
|
|
59
|
+
__metadata("design:returntype", void 0)
|
|
60
|
+
], TestSpan.prototype, "metadata", null);
|
|
35
61
|
describe('Span', () => {
|
|
36
62
|
let instance;
|
|
37
|
-
let
|
|
38
|
-
|
|
63
|
+
let traceExporter;
|
|
64
|
+
let spanProcessor;
|
|
65
|
+
let provider;
|
|
66
|
+
beforeAll(async () => {
|
|
39
67
|
instance = new TestSpan();
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
68
|
+
traceExporter = new sdk_node_1.tracing.InMemorySpanExporter();
|
|
69
|
+
spanProcessor = new sdk_node_1.tracing.SimpleSpanProcessor(traceExporter);
|
|
70
|
+
provider = new sdk_trace_node_1.NodeTracerProvider();
|
|
71
|
+
provider.addSpanProcessor(spanProcessor);
|
|
72
|
+
provider.register();
|
|
45
73
|
});
|
|
46
74
|
afterEach(async () => {
|
|
47
|
-
|
|
75
|
+
spanProcessor.forceFlush();
|
|
76
|
+
traceExporter.reset();
|
|
77
|
+
});
|
|
78
|
+
afterAll(async () => {
|
|
79
|
+
await provider.shutdown();
|
|
80
|
+
});
|
|
81
|
+
it('should maintain reflect metadataa', async () => {
|
|
82
|
+
expect(Reflect.getMetadata('some-metadata', instance.metadata)).toEqual(true);
|
|
48
83
|
});
|
|
49
84
|
it('should set correct span', async () => {
|
|
50
|
-
|
|
51
|
-
|
|
85
|
+
instance.singleSpan();
|
|
86
|
+
const spans = traceExporter.getFinishedSpans();
|
|
87
|
+
expect(spans).toHaveLength(1);
|
|
88
|
+
expect(spans.map(span => span.name)).toEqual(['TestSpan.singleSpan']);
|
|
89
|
+
});
|
|
90
|
+
it('should set correct span options', async () => {
|
|
91
|
+
instance.fooProducerSpan();
|
|
92
|
+
const spans = traceExporter.getFinishedSpans();
|
|
93
|
+
expect(spans).toHaveLength(1);
|
|
94
|
+
expect(spans.map(span => span.kind)).toEqual([api_1.SpanKind.PRODUCER]);
|
|
52
95
|
});
|
|
53
96
|
it('should set correct span even when calling other method with Span decorator', async () => {
|
|
54
|
-
|
|
55
|
-
|
|
97
|
+
instance.doubleSpan();
|
|
98
|
+
const spans = traceExporter.getFinishedSpans();
|
|
99
|
+
expect(spans).toHaveLength(2);
|
|
100
|
+
expect(spans.map(span => span.name)).toEqual(['TestSpan.singleSpan', 'TestSpan.doubleSpan']);
|
|
101
|
+
});
|
|
102
|
+
it('should propagate errors', () => {
|
|
103
|
+
expect(instance.error).toThrowError('hello world');
|
|
104
|
+
});
|
|
105
|
+
it('should set setStatus to ERROR and message to error message', async () => {
|
|
106
|
+
expect(instance.error).toThrowError('hello world');
|
|
107
|
+
const spans = traceExporter.getFinishedSpans();
|
|
108
|
+
expect(spans).toHaveLength(1);
|
|
109
|
+
expect(spans[0].status).toEqual({ code: api_1.SpanStatusCode.ERROR, message: 'hello world' });
|
|
110
|
+
});
|
|
111
|
+
it('should set recordException with error', () => {
|
|
112
|
+
expect(instance.error).toThrowError('hello world');
|
|
113
|
+
const spans = traceExporter.getFinishedSpans();
|
|
114
|
+
expect(spans).toHaveLength(1);
|
|
115
|
+
expect(spans[0].events).toHaveLength(1);
|
|
116
|
+
expect(spans[0].events[0]).toEqual({
|
|
117
|
+
name: 'exception',
|
|
118
|
+
attributes: expect.anything(),
|
|
119
|
+
time: expect.anything(),
|
|
120
|
+
});
|
|
56
121
|
});
|
|
57
122
|
});
|
|
58
123
|
//# sourceMappingURL=span.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span.spec.js","sourceRoot":"","sources":["../../../src/tracing/decorators/span.spec.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"span.spec.js","sourceRoot":"","sources":["../../../src/tracing/decorators/span.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace.service.js","sourceRoot":"","sources":["../../src/tracing/trace.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,4CAA0D;AAC1D,2CAA4C;
|
|
1
|
+
{"version":3,"file":"trace.service.js","sourceRoot":"","sources":["../../src/tracing/trace.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,4CAA0D;AAC1D,2CAA4C;AAGrC,IAAM,YAAY,GAAlB,MAAM,YAAY;IAChB,SAAS;QACd,OAAO,WAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAEM,OAAO;QACZ,OAAO,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAEM,SAAS,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF,CAAA;AAZY,YAAY;IADxB,IAAA,mBAAU,GAAE;GACA,YAAY,CAYxB;AAZY,oCAAY"}
|