nestjs-otel 3.0.4 → 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 +19 -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.spec.js.map +1 -1
- 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/tracing/decorators/span.d.ts +2 -1
- package/lib/tracing/decorators/span.js +2 -2
- package/lib/tracing/decorators/span.js.map +1 -1
- package/lib/tracing/decorators/span.spec.js +13 -0
- 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 +30 -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.spec.ts +0 -37
- package/src/metrics/decorators/common.ts +0 -61
- 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/opentelemetry.utils.ts +0 -15
- package/src/tracing/decorators/span.spec.ts +0 -103
- package/src/tracing/decorators/span.ts +0 -46
- package/src/tracing/trace.service.ts +0 -17
package/.eslintignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
examples/**/*.js
|
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
extends: ['airbnb-base', 'airbnb-typescript/base'],
|
|
3
|
+
parserOptions: {
|
|
4
|
+
project: './tsconfig.json',
|
|
5
|
+
createDefaultProgram: true,
|
|
6
|
+
},
|
|
7
|
+
ignorePatterns: ['**/examples/**/*', 'lib/**/*'],
|
|
8
|
+
rules: {
|
|
9
|
+
'import/prefer-default-export': 'off',
|
|
10
|
+
'import/no-cycle': 'off',
|
|
11
|
+
'no-restricted-syntax': [
|
|
12
|
+
'error',
|
|
13
|
+
'ForInStatement',
|
|
14
|
+
'LabeledStatement',
|
|
15
|
+
'WithStatement',
|
|
16
|
+
],
|
|
17
|
+
'no-unused-vars': 'off',
|
|
18
|
+
'@typescript-eslint/no-unused-vars': 'off',
|
|
19
|
+
'arrow-parens': 'off',
|
|
20
|
+
'import/no-unresolved': 'off',
|
|
21
|
+
'new-cap': 'off',
|
|
22
|
+
'class-methods-use-this': 'off',
|
|
23
|
+
'no-case-declarations': 'off',
|
|
24
|
+
'no-promise-executor-return': 'off',
|
|
25
|
+
'no-unsafe-optional-chaining': 'off',
|
|
26
|
+
},
|
|
27
|
+
};
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [4.0.0](https://www.github.com/pragmaticivan/nestjs-otel/compare/v3.0.4...v4.0.0) (2022-08-29)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### ⚠ BREAKING CHANGES
|
|
7
|
+
|
|
8
|
+
* support latest metric sdk
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* **build:** update dependencies ([c2f8b7b](https://www.github.com/pragmaticivan/nestjs-otel/commit/c2f8b7b9fbe116953521fb6b5d7f4648d09d7712))
|
|
13
|
+
* support latest metric sdk ([e8d2e96](https://www.github.com/pragmaticivan/nestjs-otel/commit/e8d2e96da5161cd5c4ee78290244144f5849ec8b))
|
|
14
|
+
* **tracing:** pass options with span decorator ([3424b88](https://www.github.com/pragmaticivan/nestjs-otel/commit/3424b884e949792679dac79f7b3624cc6e67b110))
|
|
15
|
+
* update remaining counters ([d11f6d9](https://www.github.com/pragmaticivan/nestjs-otel/commit/d11f6d98cf25639c01e24c9007a43d3e06c32738))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* forRootAsync uses the wrong module and empty options breaks the configure method ([c2dc102](https://www.github.com/pragmaticivan/nestjs-otel/commit/c2dc102d41f2ddc1ca3e8a814e7243fc4cc4b773))
|
|
21
|
+
|
|
3
22
|
### [3.0.4](https://www.github.com/pragmaticivan/nestjs-otel/compare/v3.0.3...v3.0.4) (2022-03-29)
|
|
4
23
|
|
|
5
24
|
|
package/README.md
CHANGED
|
@@ -118,10 +118,8 @@ bootstrap();
|
|
|
118
118
|
const OpenTelemetryModuleConfig = OpenTelemetryModule.forRoot({
|
|
119
119
|
metrics: {
|
|
120
120
|
hostMetrics: true, // Includes Host Metrics
|
|
121
|
-
defaultMetrics: true, // Includes Default Metrics
|
|
122
121
|
apiMetrics: {
|
|
123
122
|
enable: true, // Includes api metrics
|
|
124
|
-
timeBuckets: [], // You can change the default time buckets
|
|
125
123
|
defaultAttributes: {
|
|
126
124
|
// You can set default labels for api metrics
|
|
127
125
|
custom: 'label',
|
|
@@ -264,18 +262,17 @@ export class AppController {
|
|
|
264
262
|
|
|
265
263
|
## API Metrics with Middleware
|
|
266
264
|
|
|
267
|
-
| Impl | Metric
|
|
268
|
-
| ---- |
|
|
269
|
-
| ✅ |
|
|
270
|
-
| ✅ |
|
|
271
|
-
| ✅ |
|
|
272
|
-
| ✅ |
|
|
273
|
-
| ✅ |
|
|
274
|
-
| ✅ |
|
|
275
|
-
| ✅ |
|
|
276
|
-
| ✅ |
|
|
277
|
-
| ✅ |
|
|
278
|
-
| ✅ | http_response_size_bytes | Current total of outgoing bytes. | - | Histogram |
|
|
265
|
+
| Impl | Otel Metric | Prometheus Metric | Description | Metric Type |
|
|
266
|
+
| ---- | -------------------------------- | --------------------------------------- | ----------------------------------------- | ----------- |
|
|
267
|
+
| ✅ | http.server.request.count | http_server_request_count_total | Total number of HTTP requests. | Counter |
|
|
268
|
+
| ✅ | http.server.response.count | http_server_response_count_total | Total number of HTTP responses. | Counter |
|
|
269
|
+
| ✅ | http.server.abort.count | http_server_abort_count_total | Total number of data transfers aborted. | Counter |
|
|
270
|
+
| ✅ | http.server.duration | http_server_duration | The duration of the inbound HTTP request. | Histogram |
|
|
271
|
+
| ✅ | http.server.request.size | http_server_request_size | Size of incoming bytes. | Histogram |
|
|
272
|
+
| ✅ | http.server.response.size | http_server_response_size | Size of outgoing bytes. | Histogram |
|
|
273
|
+
| ✅ | http.server.response.success.count | http_server_response_success_count_total | Total number of all successful responses. | Counter |
|
|
274
|
+
| ✅ | http.server.response.error.count | http_server_response_error_count_total | Total number of all response errors'. | Counter |
|
|
275
|
+
| ✅ | http.client.request.error.count | http_client_request_error_count_total | Total number of client error requests. | Counter |
|
|
279
276
|
|
|
280
277
|
## Prometheus Metrics
|
|
281
278
|
|
|
@@ -320,16 +317,11 @@ export const logger: Logger = Pino(loggerOptions);
|
|
|
320
317
|
|
|
321
318
|
## Examples
|
|
322
319
|
|
|
323
|
-
A full working
|
|
324
|
-
|
|
325
|
-
A dashboard example is also available:
|
|
326
|
-
|
|
327
|
-

|
|
328
|
-
|
|
329
|
-
Logs are automatically associated with tracing (Loki + Tempo):
|
|
330
|
-
|
|
331
|
-

|
|
320
|
+
A full working examples are available. This includes a nestjs application fully integrated with prometheus, grafana, loki and tempo:
|
|
332
321
|
|
|
322
|
+
* [nestjs-otel-prom-grafana-tempo-otel-collector](https://github.com/pragmaticivan/nestjs-otel-prom-grafana-tempo-otel-collector)
|
|
323
|
+
* [nestjs-otel-fastify-prom-grafana-tempo ](https://github.com/pragmaticivan/nestjs-otel-fastify-prom-grafana-tempo )
|
|
324
|
+
* [nestjs-otel-prom-grafana-tempo ](https://github.com/pragmaticivan/nestjs-otel-prom-grafana-tempo )
|
|
333
325
|
## Stargazers over time
|
|
334
326
|
|
|
335
327
|
[](https://starchart.cc/pragmaticivan/nestjs-otel)
|
package/lib/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];
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,yDAAuC;AACvC,4DAA0C;AAC1C,0DAAwC;AACxC,2DAAyC;AACzC,qDAAmC;AACnC,uDAAqC;AACrC,4DAA0C"}
|
package/lib/interfaces/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/interfaces/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oEAAkD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ModuleMetadata, Type, Abstract } from '@nestjs/common';
|
|
2
|
-
import {
|
|
2
|
+
import { MetricAttributes } from '@opentelemetry/api-metrics';
|
|
3
3
|
import { RouteInfo } from '@nestjs/common/interfaces';
|
|
4
4
|
export declare type OpenTelemetryModuleOptions = {
|
|
5
5
|
metrics?: OpenTelemetryMetrics;
|
|
@@ -15,14 +15,10 @@ export interface OpenTelemetryModuleAsyncOptions extends Pick<ModuleMetadata, 'i
|
|
|
15
15
|
inject?: (string | symbol | Function | Type<any> | Abstract<any>)[];
|
|
16
16
|
}
|
|
17
17
|
export declare type OpenTelemetryMetrics = {
|
|
18
|
-
defaultMetrics?: boolean;
|
|
19
18
|
hostMetrics?: boolean;
|
|
20
19
|
apiMetrics?: {
|
|
21
20
|
enable?: boolean;
|
|
22
|
-
|
|
23
|
-
requestSizeBuckets?: number[];
|
|
24
|
-
responseSizeBuckets?: number[];
|
|
25
|
-
defaultAttributes?: Attributes;
|
|
21
|
+
defaultAttributes?: MetricAttributes;
|
|
26
22
|
ignoreRoutes?: (string | RouteInfo)[];
|
|
27
23
|
ignoreUndefinedRoutes?: boolean;
|
|
28
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.spec.js","sourceRoot":"","sources":["../../../src/metrics/decorators/common.spec.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAA0B;AAC1B,2CAA6C;AAC7C,qCAAkE;AAElE,MAAM,6BAA6B,GAAG,GAAG,EAAE,CAAC,IAAA,oBAAW,EAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAI/E,IAAM,SAAS,GAAf,MAAM,SAAS;IAGb,MAAM,KAAI,CAAC;CACZ,CAAA;
|
|
1
|
+
{"version":3,"file":"common.spec.js","sourceRoot":"","sources":["../../../src/metrics/decorators/common.spec.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAA0B;AAC1B,2CAA6C;AAC7C,qCAAkE;AAElE,MAAM,6BAA6B,GAAG,GAAG,EAAE,CAAC,IAAA,oBAAW,EAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAI/E,IAAM,SAAS,GAAf,MAAM,SAAS;IAGb,MAAM,KAAI,CAAC;CACZ,CAAA;AAHC;IAAC,6BAA6B,EAAE;IAC/B,IAAA,0BAAiB,GAAE;;;;uCACT;AAHP,SAAS;IAFd,IAAA,4BAAmB,GAAE;IACrB,6BAA6B,EAAE;GAC1B,SAAS,CAId;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,QAAmB,CAAC;IAExB,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,QAAmB,CAAC;IAExB,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -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/metrics/decorators/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metrics/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,8CAA4B;AAC5B,+CAA6B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Counter, MetricOptions, UpDownCounter, Histogram, ObservableGauge, ObservableCounter, ObservableUpDownCounter
|
|
1
|
+
import { Counter, MetricOptions, UpDownCounter, Histogram, ObservableGauge, ObservableCounter, ObservableUpDownCounter } from '@opentelemetry/api-metrics';
|
|
2
2
|
export declare type GenericMetric = Counter | UpDownCounter | Histogram | ObservableGauge | ObservableCounter | ObservableUpDownCounter;
|
|
3
3
|
export declare enum MetricType {
|
|
4
4
|
'Counter' = "Counter",
|
|
@@ -12,6 +12,6 @@ export declare const meterData: Map<string, GenericMetric>;
|
|
|
12
12
|
export declare function getOrCreateHistogram(name: string, options: MetricOptions): Histogram;
|
|
13
13
|
export declare function getOrCreateCounter(name: string, options: MetricOptions): Counter;
|
|
14
14
|
export declare function getOrCreateUpDownCounter(name: string, options: MetricOptions): UpDownCounter;
|
|
15
|
-
export declare function getOrCreateObservableGauge(name: string, options: MetricOptions
|
|
16
|
-
export declare function getOrCreateObservableCounter(name: string, options: MetricOptions
|
|
17
|
-
export declare function getOrCreateObservableUpDownCounter(name: string, options: MetricOptions
|
|
15
|
+
export declare function getOrCreateObservableGauge(name: string, options: MetricOptions): ObservableGauge;
|
|
16
|
+
export declare function getOrCreateObservableCounter(name: string, options: MetricOptions): ObservableCounter;
|
|
17
|
+
export declare function getOrCreateObservableUpDownCounter(name: string, options: MetricOptions): ObservableUpDownCounter;
|
|
@@ -43,32 +43,32 @@ function getOrCreateUpDownCounter(name, options) {
|
|
|
43
43
|
return upDownCounter;
|
|
44
44
|
}
|
|
45
45
|
exports.getOrCreateUpDownCounter = getOrCreateUpDownCounter;
|
|
46
|
-
function getOrCreateObservableGauge(name, options
|
|
46
|
+
function getOrCreateObservableGauge(name, options) {
|
|
47
47
|
if (exports.meterData.has(name)) {
|
|
48
48
|
return exports.meterData.get(name);
|
|
49
49
|
}
|
|
50
50
|
const meter = api_metrics_1.metrics.getMeterProvider().getMeter(opentelemetry_constants_1.OTEL_METER_NAME);
|
|
51
|
-
const observableGauge = meter.createObservableGauge(name, options
|
|
51
|
+
const observableGauge = meter.createObservableGauge(name, options);
|
|
52
52
|
exports.meterData.set(name, observableGauge);
|
|
53
53
|
return observableGauge;
|
|
54
54
|
}
|
|
55
55
|
exports.getOrCreateObservableGauge = getOrCreateObservableGauge;
|
|
56
|
-
function getOrCreateObservableCounter(name, options
|
|
56
|
+
function getOrCreateObservableCounter(name, options) {
|
|
57
57
|
if (exports.meterData.has(name)) {
|
|
58
58
|
return exports.meterData.get(name);
|
|
59
59
|
}
|
|
60
60
|
const meter = api_metrics_1.metrics.getMeterProvider().getMeter(opentelemetry_constants_1.OTEL_METER_NAME);
|
|
61
|
-
const observableCounter = meter.createObservableCounter(name, options
|
|
61
|
+
const observableCounter = meter.createObservableCounter(name, options);
|
|
62
62
|
exports.meterData.set(name, observableCounter);
|
|
63
63
|
return observableCounter;
|
|
64
64
|
}
|
|
65
65
|
exports.getOrCreateObservableCounter = getOrCreateObservableCounter;
|
|
66
|
-
function getOrCreateObservableUpDownCounter(name, options
|
|
66
|
+
function getOrCreateObservableUpDownCounter(name, options) {
|
|
67
67
|
if (exports.meterData.has(name)) {
|
|
68
68
|
return exports.meterData.get(name);
|
|
69
69
|
}
|
|
70
70
|
const meter = api_metrics_1.metrics.getMeterProvider().getMeter(opentelemetry_constants_1.OTEL_METER_NAME);
|
|
71
|
-
const observableCounter = meter.createObservableCounter(name, options
|
|
71
|
+
const observableCounter = meter.createObservableCounter(name, options);
|
|
72
72
|
exports.meterData.set(name, observableCounter);
|
|
73
73
|
return observableCounter;
|
|
74
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metric-data.js","sourceRoot":"","sources":["../../src/metrics/metric-data.ts"],"names":[],"mappings":";;;AAAA,4DAGoC;AACpC,wEAA6D;AAU7D,IAAY,UAOX;AAPD,WAAY,UAAU;IACpB,iCAAqB,CAAA;IACrB,6CAAiC,CAAA;IACjC,qCAAyB,CAAA;IACzB,iDAAqC,CAAA;IACrC,qDAAyC,CAAA;IACzC,iEAAqD,CAAA;AACvD,CAAC,EAPW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAOrB;AAEY,QAAA,SAAS,GAA+B,IAAI,GAAG,EAAE,CAAC;AAE/D,SAAgB,oBAAoB,CAClC,IAAY,EACZ,OAAsB;IAEtB,IAAI,iBAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACvB,OAAO,iBAAS,CAAC,GAAG,CAAC,IAAI,CAAc,CAAC;KACzC;IAED,MAAM,KAAK,GAAG,qBAAO,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,yCAAe,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,iBAAS,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/B,OAAO,SAAS,CAAC;AACnB,CAAC;AAZD,oDAYC;AAED,SAAgB,kBAAkB,CAChC,IAAY,EACZ,OAAsB;IAEtB,IAAI,iBAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACvB,OAAO,iBAAS,CAAC,GAAG,CAAC,IAAI,CAAY,CAAC;KACvC;IAED,MAAM,KAAK,GAAG,qBAAO,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,yCAAe,CAAC,CAAC;IAEnE,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,iBAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,OAAO,OAAO,CAAC;AACjB,CAAC;AAbD,gDAaC;AAED,SAAgB,wBAAwB,CACtC,IAAY,EACZ,OAAsB;IAEtB,IAAI,iBAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACvB,OAAO,iBAAS,CAAC,GAAG,CAAC,IAAI,CAAkB,CAAC;KAC7C;IAED,MAAM,KAAK,GAAG,qBAAO,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,yCAAe,CAAC,CAAC;IAEnE,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/D,iBAAS,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACnC,OAAO,aAAa,CAAC;AACvB,CAAC;AAbD,4DAaC;AAED,SAAgB,0BAA0B,CACxC,IAAY,EACZ,OAAsB
|
|
1
|
+
{"version":3,"file":"metric-data.js","sourceRoot":"","sources":["../../src/metrics/metric-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { MetricOptions
|
|
1
|
+
import { MetricOptions } from '@opentelemetry/api-metrics';
|
|
2
2
|
export declare class MetricService {
|
|
3
3
|
getCounter(name: string, options?: MetricOptions): import("@opentelemetry/api-metrics").Counter;
|
|
4
4
|
getUpDownCounter(name: string, options?: MetricOptions): import("@opentelemetry/api-metrics").UpDownCounter;
|
|
5
5
|
getHistogram(name: string, options?: MetricOptions): import("@opentelemetry/api-metrics").Histogram;
|
|
6
|
-
getObservableCounter(name: string, options?: MetricOptions
|
|
7
|
-
getObservableGauge(name: string, options?: MetricOptions
|
|
8
|
-
getObservableUpDownCounter(name: string, options?: MetricOptions
|
|
6
|
+
getObservableCounter(name: string, options?: MetricOptions): import("@opentelemetry/api-metrics").Observable;
|
|
7
|
+
getObservableGauge(name: string, options?: MetricOptions): import("@opentelemetry/api-metrics").Observable;
|
|
8
|
+
getObservableUpDownCounter(name: string, options?: MetricOptions): import("@opentelemetry/api-metrics").Observable;
|
|
9
9
|
}
|
|
@@ -19,14 +19,14 @@ let MetricService = class MetricService {
|
|
|
19
19
|
getHistogram(name, options) {
|
|
20
20
|
return (0, metric_data_1.getOrCreateHistogram)(name, options);
|
|
21
21
|
}
|
|
22
|
-
getObservableCounter(name, options
|
|
23
|
-
return (0, metric_data_1.getOrCreateObservableCounter)(name, options
|
|
22
|
+
getObservableCounter(name, options) {
|
|
23
|
+
return (0, metric_data_1.getOrCreateObservableCounter)(name, options);
|
|
24
24
|
}
|
|
25
|
-
getObservableGauge(name, options
|
|
26
|
-
return (0, metric_data_1.getOrCreateObservableGauge)(name, options
|
|
25
|
+
getObservableGauge(name, options) {
|
|
26
|
+
return (0, metric_data_1.getOrCreateObservableGauge)(name, options);
|
|
27
27
|
}
|
|
28
|
-
getObservableUpDownCounter(name, options
|
|
29
|
-
return (0, metric_data_1.getOrCreateObservableUpDownCounter)(name, options
|
|
28
|
+
getObservableUpDownCounter(name, options) {
|
|
29
|
+
return (0, metric_data_1.getOrCreateObservableUpDownCounter)(name, options);
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
32
|
MetricService = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metric.service.js","sourceRoot":"","sources":["../../src/metrics/metric.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAI5C,+CAIuB;
|
|
1
|
+
{"version":3,"file":"metric.service.js","sourceRoot":"","sources":["../../src/metrics/metric.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAI5C,+CAIuB;AAGhB,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,UAAU,CAAC,IAAY,EAAE,OAAuB;QAC9C,OAAO,IAAA,gCAAkB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,OAAuB;QACpD,OAAO,IAAA,sCAAwB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,OAAuB;QAChD,OAAO,IAAA,kCAAoB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,oBAAoB,CAClB,IAAY,EACZ,OAAuB;QAEvB,OAAO,IAAA,0CAA4B,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,kBAAkB,CAChB,IAAY,EACZ,OAAuB;QAEvB,OAAO,IAAA,wCAA0B,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,0BAA0B,CACxB,IAAY,EACZ,OAAuB;QAEvB,OAAO,IAAA,gDAAkC,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;CACF,CAAA;AAjCY,aAAa;IADzB,IAAA,mBAAU,GAAE;GACA,aAAa,CAiCzB;AAjCY,sCAAa"}
|
|
@@ -1,26 +1,19 @@
|
|
|
1
1
|
import { NestMiddleware } from '@nestjs/common';
|
|
2
2
|
import { OpenTelemetryModuleOptions } from '../interfaces';
|
|
3
3
|
import { MetricService } from '../metrics/metric.service';
|
|
4
|
-
export declare const DEFAULT_LONG_RUNNING_REQUEST_BUCKETS: number[];
|
|
5
|
-
export declare const DEFAULT_REQUEST_SIZE_BUCKETS: number[];
|
|
6
|
-
export declare const DEFAULT_RESPONSE_SIZE_BUCKETS: number[];
|
|
7
4
|
export declare class ApiMetricsMiddleware implements NestMiddleware {
|
|
8
5
|
private readonly metricService;
|
|
9
6
|
private readonly options;
|
|
10
|
-
private
|
|
11
|
-
private
|
|
12
|
-
private
|
|
13
|
-
private
|
|
14
|
-
private
|
|
15
|
-
private
|
|
16
|
-
private
|
|
17
|
-
private
|
|
18
|
-
private
|
|
19
|
-
private
|
|
20
|
-
private requestDuration;
|
|
21
|
-
private requestSizeHistogram;
|
|
22
|
-
private responseSizeHistogram;
|
|
23
|
-
private defaultAttributes;
|
|
7
|
+
private defaultMetricAttributes;
|
|
8
|
+
private httpServerRequestCount;
|
|
9
|
+
private httpServerResponseCount;
|
|
10
|
+
private httpServerDuration;
|
|
11
|
+
private httpServerRequestSize;
|
|
12
|
+
private httpServerResponseSize;
|
|
13
|
+
private httpServerResponseSuccessCount;
|
|
14
|
+
private httpServerResponseErrorCount;
|
|
15
|
+
private httpClientRequestErrorCount;
|
|
16
|
+
private httpServerAbortCount;
|
|
24
17
|
private readonly ignoreUndefinedRoutes;
|
|
25
18
|
constructor(metricService: MetricService, options?: OpenTelemetryModuleOptions);
|
|
26
19
|
use(req: any, res: any, next: any): void;
|
|
@@ -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
|
}
|