nestjs-otel 2.5.2 → 3.0.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.
Files changed (48) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +28 -9
  3. package/examples/nestjs-prom-grafana-tempo/package.json +40 -37
  4. package/examples/nestjs-prom-grafana-tempo/src/tracing.ts +5 -5
  5. package/lib/interfaces/opentelemetry-options.interface.d.ts +5 -2
  6. package/lib/metrics/decorators/common.js +2 -2
  7. package/lib/metrics/decorators/common.js.map +1 -1
  8. package/lib/metrics/decorators/counter.js +2 -2
  9. package/lib/metrics/decorators/counter.js.map +1 -1
  10. package/lib/metrics/decorators/histogram.d.ts +1 -0
  11. package/lib/metrics/decorators/histogram.js +12 -0
  12. package/lib/metrics/decorators/histogram.js.map +1 -0
  13. package/lib/metrics/decorators/index.d.ts +2 -1
  14. package/lib/metrics/decorators/index.js +2 -1
  15. package/lib/metrics/decorators/index.js.map +1 -1
  16. package/lib/metrics/decorators/observable.d.ts +3 -0
  17. package/lib/metrics/decorators/observable.js +24 -0
  18. package/lib/metrics/decorators/observable.js.map +1 -0
  19. package/lib/metrics/metric-data.d.ts +12 -5
  20. package/lib/metrics/metric-data.js +53 -24
  21. package/lib/metrics/metric-data.js.map +1 -1
  22. package/lib/metrics/metric.service.d.ts +7 -6
  23. package/lib/metrics/metric.service.js +11 -8
  24. package/lib/metrics/metric.service.js.map +1 -1
  25. package/lib/middleware/api-metrics.middleware.d.ts +6 -5
  26. package/lib/middleware/api-metrics.middleware.js +21 -24
  27. package/lib/middleware/api-metrics.middleware.js.map +1 -1
  28. package/lib/opentelemetry-core.module.js +6 -1
  29. package/lib/opentelemetry-core.module.js.map +1 -1
  30. package/lib/tracing/trace.service.d.ts +1 -0
  31. package/lib/tracing/trace.service.js +4 -2
  32. package/lib/tracing/trace.service.js.map +1 -1
  33. package/lib/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +32 -32
  35. package/src/interfaces/opentelemetry-options.interface.ts +6 -3
  36. package/src/metrics/decorators/common.ts +7 -5
  37. package/src/metrics/decorators/counter.ts +5 -9
  38. package/src/metrics/decorators/histogram.ts +10 -0
  39. package/src/metrics/decorators/observable.ts +28 -0
  40. package/src/metrics/metric-data.ts +89 -29
  41. package/src/metrics/metric.service.ts +28 -14
  42. package/src/middleware/api-metrics.middleware.ts +25 -29
  43. package/src/opentelemetry-core.module.ts +9 -4
  44. package/src/tracing/trace.service.ts +5 -2
  45. package/lib/metrics/decorators/value-recorder.d.ts +0 -1
  46. package/lib/metrics/decorators/value-recorder.js +0 -12
  47. package/lib/metrics/decorators/value-recorder.js.map +0 -1
  48. package/src/metrics/decorators/value-recorder.ts +0 -12
package/CHANGELOG.md CHANGED
@@ -1,5 +1,49 @@
1
1
  # Changelog
2
2
 
3
+ ### [3.0.1](https://www.github.com/pragmaticivan/nestjs-otel/compare/v3.0.0...v3.0.1) (2022-01-03)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **#171:** fixes missing observation callback for observable metrics ([7d89c1f](https://www.github.com/pragmaticivan/nestjs-otel/commit/7d89c1f910b28d0661da6f2989ddea4b9bdcc643)), closes [#171](https://www.github.com/pragmaticivan/nestjs-otel/issues/171)
9
+
10
+ ## [3.0.0](https://www.github.com/pragmaticivan/nestjs-otel/compare/v2.6.1...v3.0.0) (2021-12-30)
11
+
12
+
13
+ ### ⚠ BREAKING CHANGES
14
+
15
+ * Anything related to metrics sdk has changed. OTEL now has a stable spec and all the projects are moving towards new interfaces.
16
+
17
+ ### Features
18
+
19
+ * ename value recorder on decorators and update readme ([646e2ea](https://www.github.com/pragmaticivan/nestjs-otel/commit/646e2eacd07127f9658b302c09d3056b3b2e1771))
20
+ * support all metric types from otel spec ([36a7c5f](https://www.github.com/pragmaticivan/nestjs-otel/commit/36a7c5f2f895157b3e675a7a6ff6693fea6cc8f2))
21
+ * update metric spec to the latest otel lib ([6ed63ae](https://www.github.com/pragmaticivan/nestjs-otel/commit/6ed63aefbc1e39da9659d6e232a4883f7ed93dac))
22
+ * update packages to compply with latest otel metric spec ([943ca06](https://www.github.com/pragmaticivan/nestjs-otel/commit/943ca06ea62e95d8a07af63030609f226b78c4b8))
23
+
24
+ ### [2.6.1](https://www.github.com/pragmaticivan/nestjs-otel/compare/v2.6.0...v2.6.1) (2021-10-13)
25
+
26
+
27
+ ### Reverts
28
+
29
+ * replace arrow function back with unnamed function ([3e7ac1f](https://www.github.com/pragmaticivan/nestjs-otel/commit/3e7ac1f160e1454f7c36470aafd7e8bfa7ee47b5))
30
+
31
+ ## [2.6.0](https://www.github.com/pragmaticivan/nestjs-otel/compare/v2.5.2...v2.6.0) (2021-10-12)
32
+
33
+
34
+ ### Features
35
+
36
+ * **metrics:** option for ignoring undefined routes ([15577e8](https://www.github.com/pragmaticivan/nestjs-otel/commit/15577e83c7b3ea7642dc7eba65517361edfe3a54))
37
+ * **metrics:** option to ignore specific routes ([b8a05f1](https://www.github.com/pragmaticivan/nestjs-otel/commit/b8a05f1ef46b9e077f8c4edbad59f91b00d3a49e))
38
+
39
+
40
+ ### Bug Fixes
41
+
42
+ * eslint setup ([14d9870](https://www.github.com/pragmaticivan/nestjs-otel/commit/14d9870d9aacee325a7338dd764ccfef404b7ad5))
43
+ * linting ([1961f18](https://www.github.com/pragmaticivan/nestjs-otel/commit/1961f18ae1203a4e721e72caeb9f425f1937d918))
44
+ * **linting:** replace unnamed function with arrow function ([12fa02c](https://www.github.com/pragmaticivan/nestjs-otel/commit/12fa02c081ef85ddde7208c7b865efcaa05bab6f))
45
+ * **metrics:** add missing commas in example config in README.md ([7b159c6](https://www.github.com/pragmaticivan/nestjs-otel/commit/7b159c603bc9655b270f9447414cdab473b31526))
46
+
3
47
  ### [2.5.2](https://www.github.com/pragmaticivan/nestjs-otel/compare/v2.5.1...v2.5.2) (2021-10-07)
4
48
 
5
49
 
package/README.md CHANGED
@@ -16,7 +16,7 @@ For questions and support please use the official [Discord channel](https://disc
16
16
 
17
17
  ## Why
18
18
 
19
- Setting up observability metrics with nestjs requires multiple libraries and patterns. OpenTelemetry has support for multiple exporters and types of metrics such as Prometheus Metrics.
19
+ Setting up observability metrics with nestjs requires multiple libraries and patterns. OpenTelemetry has support for multiple exporters and types of metrics such as Prometheus Metrics.
20
20
 
21
21
  ## Observability
22
22
 
@@ -122,7 +122,9 @@ const OpenTelemetryModuleConfig = OpenTelemetryModule.forRoot({
122
122
  timeBuckets: [], // You can change the default time buckets
123
123
  defaultLabels: { // You can set default labels for api metrics
124
124
  custom: 'label'
125
- }
125
+ },
126
+ ignoreRoutes: ['/favicon.ico'], // You can ignore specific routes (See https://docs.nestjs.com/middleware#excluding-routes for options)
127
+ ignoreUndefinedRoutes: false, //Records metrics for all URLs, even undefined ones
126
128
  },
127
129
  },
128
130
  });
@@ -177,7 +179,7 @@ export class BookService {
177
179
 
178
180
  ## Metric Service
179
181
 
180
- [OpenTelemetry Metrics](https://www.npmjs.com/package/@opentelemetry/metrics) allow a user to collect data and export it to metrics backend like Prometheus.
182
+ [OpenTelemetry Metrics](https://www.npmjs.com/package/@opentelemetry/api-metrics) allow a user to collect data and export it to metrics backend like Prometheus.
181
183
 
182
184
  ```ts
183
185
  import { MetricService } from 'nestjs-otel';
@@ -241,7 +243,10 @@ You have the following decorators:
241
243
 
242
244
  * `@OtelCounter()`
243
245
  * `@OtelUpDownCounter()`
244
- * `@OtelValueRecorder()`
246
+ * `@OtelHistogram()`
247
+ * `@OtelObservableGauge()`
248
+ * `@OtelObservableCounter()`
249
+ * `@OtelObservableUpDownCounter()`
245
250
 
246
251
  Example of usage:
247
252
 
@@ -256,7 +261,7 @@ export class AppController {
256
261
  home(
257
262
  @OtelCounter('app_counter_1_inc', { description: 'counter 1 description' }) counter1: Counter,
258
263
  ) {
259
- counter1.inc(1);
264
+ counter1.add(1);
260
265
  }
261
266
  }
262
267
 
@@ -270,12 +275,12 @@ Impl |Metric |Description| Labels | Metric Type
270
275
  | ✅ | http_response_total| Total number of HTTP responses.| method, status, path | Counter |
271
276
  | ✅ | http_response_success_total| Total number of all successful responses.| - | Counter |
272
277
  | ✅ | http_response_error_total| Total number of all response errors.| - | Counter |
273
- | ✅ | http_request_duration_seconds | HTTP latency value recorder in seconds. | method, status, path | ValueRecorder |
278
+ | ✅ | http_request_duration_seconds | HTTP latency value recorder in seconds. | method, status, path | Histogram |
274
279
  | ✅ | http_client_error_total | Total number of client error requests. | - | Counter |
275
280
  | ✅ | http_server_error_total | Total number of server error requests. | - | Counter |
276
281
  | ✅ | http_server_aborts_total | Total number of data transfers aborted. | - | Counter |
277
- | ✅ | http_request_size_bytes | Current total of incoming bytes. | - | ValueRecorder|
278
- | ✅ | http_response_size_bytes | Current total of outgoing bytes. | - | ValueRecorder |
282
+ | ✅ | http_request_size_bytes | Current total of incoming bytes. | - | Histogram|
283
+ | ✅ | http_response_size_bytes | Current total of outgoing bytes. | - | Histogram |
279
284
 
280
285
  ## Prometheus Metrics
281
286
 
@@ -283,7 +288,21 @@ When `metricExporter` is defined in otel SDK with a `PrometheusExporter`it will
283
288
 
284
289
  ## Using with a logger
285
290
 
286
- ### Pino
291
+ ### Pino with instrumentation
292
+
293
+ This approach uses otel instrumentation to automatically inject spanId and traceId.
294
+
295
+ ```ts
296
+ import { PinoInstrumentation } from '@opentelemetry/instrumentation-pino';
297
+
298
+ const otelSDK = new NodeSDK({
299
+ instrumentations: [new PinoInstrumentation()],
300
+ });
301
+ ```
302
+
303
+ ### Pino with custom formatter
304
+
305
+ This approach uses the global trace context for injecting SpanId and traceId as a property of your structured log.
287
306
 
288
307
  ```ts
289
308
  import Pino, { Logger } from 'pino';
@@ -21,50 +21,53 @@
21
21
  "test:e2e": "jest --config ./test/jest-e2e.json"
22
22
  },
23
23
  "dependencies": {
24
- "@nestjs/common": "^8.0.5",
25
- "@nestjs/core": "^8.0.5",
26
- "@nestjs/platform-express": "^8.0.5",
27
- "@nestjs/swagger": "^5.0.9",
28
- "@opentelemetry/auto-instrumentations-node": "^0.24.0",
29
- "@opentelemetry/core": "^0.24.0",
30
- "@opentelemetry/exporter-jaeger": "^0.24.0",
31
- "@opentelemetry/exporter-prometheus": "^0.24.0",
32
- "@opentelemetry/host-metrics": "^0.24.0",
33
- "@opentelemetry/metrics": "^0.24.0",
34
- "@opentelemetry/propagator-b3": "^0.24.0",
35
- "@opentelemetry/propagator-jaeger": "^0.24.0",
36
- "@opentelemetry/sdk-node": "^0.24.0",
37
- "@opentelemetry/tracing": "^0.24.0",
38
- "nestjs-otel": "^2.1.0",
39
- "nestjs-pino": "^1.4.0",
40
- "opentelemetry-node-metrics": "^1.0.2",
41
- "pino": "^6.13.0",
24
+ "@nestjs/common": "^8.2.4",
25
+ "@nestjs/core": "^8.2.4",
26
+ "@nestjs/platform-express": "^8.2.4",
27
+ "@nestjs/swagger": "^5.1.5",
28
+ "@opentelemetry/auto-instrumentations-node": "^0.27.1",
29
+ "@opentelemetry/core": "^1.0.1",
30
+ "@opentelemetry/exporter-jaeger": "^1.0.1",
31
+ "@opentelemetry/exporter-prometheus": "^0.27.0",
32
+ "@opentelemetry/host-metrics": "^0.27.0",
33
+ "@opentelemetry/instrumentation-graphql": "^0.27.1",
34
+ "@opentelemetry/propagator-b3": "^1.0.1",
35
+ "@opentelemetry/propagator-jaeger": "^1.0.1",
36
+ "@opentelemetry/sdk-node": "^0.27.0",
37
+ "@types/graphql": "^14.5.0",
38
+ "nestjs-otel": "^3.0.0",
39
+ "nestjs-pino": "^2.4.0",
40
+ "opentelemetry-node-metrics": "^1.1.0",
41
+ "pino": "^7.6.2",
42
+ "pino-http": "^6.5.0",
42
43
  "reflect-metadata": "^0.1.13",
43
44
  "rimraf": "^3.0.2",
44
- "rxjs": "^7.3.0",
45
- "swagger-ui-express": "^4.1.6"
45
+ "rxjs": "^7.5.1",
46
+ "swagger-ui-express": "^4.3.0"
46
47
  },
47
48
  "devDependencies": {
48
- "@nestjs/cli": "^8.1.1",
49
- "@nestjs/schematics": "^8.0.2",
50
- "@nestjs/testing": "^8.0.5",
49
+ "@nestjs/cli": "^8.1.6",
50
+ "@nestjs/schematics": "^8.0.5",
51
+ "@nestjs/testing": "^8.2.4",
52
+ "@opentelemetry/api-metrics": "^0.27.0",
51
53
  "@types/express": "^4.17.13",
52
- "@types/jest": "^26.0.24",
53
- "@types/node": "^16.4.10",
54
+ "@types/jest": "^27.0.3",
55
+ "@types/node": "^17.0.5",
56
+ "@types/pino-http": "^5.8.1",
54
57
  "@types/supertest": "^2.0.11",
55
- "@typescript-eslint/eslint-plugin": "^4.29.0",
56
- "@typescript-eslint/parser": "^4.29.0",
57
- "eslint": "^7.32.0",
58
+ "@typescript-eslint/eslint-plugin": "^5.8.1",
59
+ "@typescript-eslint/parser": "^5.8.1",
60
+ "eslint": "^8.5.0",
58
61
  "eslint-config-prettier": "8.3.0",
59
- "eslint-plugin-prettier": "^3.4.0",
60
- "jest": "^27.0.6",
61
- "prettier": "^2.3.2",
62
- "supertest": "^6.1.4",
63
- "ts-jest": "^27.0.4",
64
- "ts-loader": "^9.2.4",
65
- "ts-node": "^10.1.0",
66
- "tsconfig-paths": "^3.10.1",
67
- "typescript": "^4.3.5"
62
+ "eslint-plugin-prettier": "^4.0.0",
63
+ "jest": "^27.4.5",
64
+ "prettier": "^2.5.1",
65
+ "supertest": "^6.1.6",
66
+ "ts-jest": "^27.1.2",
67
+ "ts-loader": "^9.2.6",
68
+ "ts-node": "^10.4.0",
69
+ "tsconfig-paths": "^3.12.0",
70
+ "typescript": "^4.5.4"
68
71
  },
69
72
  "jest": {
70
73
  "moduleFileExtensions": [
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  CompositePropagator,
3
- HttpTraceContextPropagator,
4
- HttpBaggagePropagator,
3
+ W3CTraceContextPropagator,
4
+ W3CBaggagePropagator,
5
5
  } from '@opentelemetry/core';
6
- import { BatchSpanProcessor } from '@opentelemetry/tracing';
6
+ import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
7
7
  import { JaegerExporter } from '@opentelemetry/exporter-jaeger';
8
8
  import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
9
9
  import { JaegerPropagator } from '@opentelemetry/propagator-jaeger';
@@ -23,8 +23,8 @@ const otelSDK = new NodeSDK({
23
23
  textMapPropagator: new CompositePropagator({
24
24
  propagators: [
25
25
  new JaegerPropagator(),
26
- new HttpTraceContextPropagator(),
27
- new HttpBaggagePropagator(),
26
+ new W3CTraceContextPropagator(),
27
+ new W3CBaggagePropagator(),
28
28
  new B3Propagator(),
29
29
  new B3Propagator({
30
30
  injectEncoding: B3InjectEncoding.MULTI_HEADER,
@@ -1,5 +1,6 @@
1
1
  import { ModuleMetadata, Type, Abstract } from '@nestjs/common';
2
- import { Labels } from '@opentelemetry/api-metrics';
2
+ import { Attributes } from '@opentelemetry/api-metrics';
3
+ import { RouteInfo } from '@nestjs/common/interfaces';
3
4
  export declare type OpenTelemetryModuleOptions = {
4
5
  metrics?: OpenTelemetryMetrics;
5
6
  };
@@ -21,6 +22,8 @@ export declare type OpenTelemetryMetrics = {
21
22
  timeBuckets?: number[];
22
23
  requestSizeBuckets?: number[];
23
24
  responseSizeBuckets?: number[];
24
- defaultLabels?: Labels;
25
+ defaultAttributes?: Attributes;
26
+ ignoreRoutes?: (string | RouteInfo)[];
27
+ ignoreUndefinedRoutes?: boolean;
25
28
  };
26
29
  };
@@ -9,7 +9,7 @@ const OtelInstanceCounter = (options) => (ctor) => {
9
9
  return class extends ctor {
10
10
  constructor(...args) {
11
11
  if (!counterMetric) {
12
- counterMetric = (0, metric_data_1.getOrCreateCounter)(name, metric_data_1.MetricType.Counter, { description, ...options });
12
+ counterMetric = (0, metric_data_1.getOrCreateCounter)(name, { description, ...options });
13
13
  }
14
14
  counterMetric.add(1);
15
15
  super(...args);
@@ -25,7 +25,7 @@ const OtelMethodCounter = (options) => (target, propertyKey, descriptor) => {
25
25
  const methodFunc = descriptor.value;
26
26
  descriptor.value = function (...args) {
27
27
  if (!counterMetric) {
28
- counterMetric = (0, metric_data_1.getOrCreateCounter)(name, metric_data_1.MetricType.Counter, { description, ...options });
28
+ counterMetric = (0, metric_data_1.getOrCreateCounter)(name, { description, ...options });
29
29
  }
30
30
  counterMetric.add(1);
31
31
  return methodFunc.apply(this, args);
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/metrics/decorators/common.ts"],"names":[],"mappings":";;;AACA,gDAA0F;AAOnF,MAAM,mBAAmB,GAAG,CACjC,OAAuB,EACvB,EAAE,CAAC,CAAwC,IAAO,EAAE,EAAE;IACtD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,kBAAkB,CAAC;IAChD,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,IAAI,yBAAyB,CAAC;IAC9D,IAAI,aAAsB,CAAC;IAE3B,OAAO,KAAM,SAAQ,IAAI;QACvB,YAAY,GAAG,IAAI;YACjB,IAAI,CAAC,aAAa,EAAE;gBAClB,aAAa,GAAG,IAAA,gCAAkB,EAAC,IAAI,EAAE,wBAAU,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;aAC3F;YAED,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,mBAAmB,uBAiB9B;AAKK,MAAM,iBAAiB,GAAG,CAC/B,OAAuB,EACvB,EAAE,CAAC,CACH,MAAc,EAAE,WAA4B,EAAE,UACrC,EACT,EAAE;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,SAAS,IAAI,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC;IACtE,MAAM,WAAW,GAAG,OAAO,SAAS,IAAI,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC;IAC9E,IAAI,aAAsB,CAAC;IAC3B,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC;IAEpC,UAAU,CAAC,KAAK,GAAG,UAAU,GAAG,IAAW;QACzC,IAAI,CAAC,aAAa,EAAE;YAClB,aAAa,GAAG,IAAA,gCAAkB,EAAC,IAAI,EAAE,wBAAU,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;SAC3F;QACD,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC,CAAC;AAnBW,QAAA,iBAAiB,qBAmB5B"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/metrics/decorators/common.ts"],"names":[],"mappings":";;;AACA,gDAAoD;AAO7C,MAAM,mBAAmB,GAAG,CACjC,OAAuB,EACvB,EAAE,CAAC,CAAwC,IAAO,EAAE,EAAE;IACtD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,kBAAkB,CAAC;IAChD,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,IAAI,yBAAyB,CAAC;IAC9D,IAAI,aAAsB,CAAC;IAE3B,OAAO,KAAM,SAAQ,IAAI;QACvB,YAAY,GAAG,IAAI;YACjB,IAAI,CAAC,aAAa,EAAE;gBAClB,aAAa,GAAG,IAAA,gCAAkB,EAAC,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;aACvE;YAED,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,mBAAmB,uBAiB9B;AAKK,MAAM,iBAAiB,GAAG,CAC/B,OAAuB,EACvB,EAAE,CAAC,CACH,MAAc,EACd,WAA4B,EAC5B,UACS,EACT,EAAE;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,SAAS,IAAI,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC;IACtE,MAAM,WAAW,GAAG,OAAO,SAAS,IAAI,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC;IAC9E,IAAI,aAAsB,CAAC;IAC3B,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC;IAEpC,UAAU,CAAC,KAAK,GAAG,UAAU,GAAG,IAAW;QACzC,IAAI,CAAC,aAAa,EAAE;YAClB,aAAa,GAAG,IAAA,gCAAkB,EAAC,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;SACvE;QACD,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC,CAAC;AArBW,QAAA,iBAAiB,qBAqB5B"}
@@ -7,12 +7,12 @@ exports.OtelCounter = (0, common_1.createParamDecorator)((name, options) => {
7
7
  if (!name || name.length === 0) {
8
8
  throw new Error('OtelCounter need a name argument');
9
9
  }
10
- return (0, metric_data_1.getOrCreateCounter)(name, metric_data_1.MetricType.Counter, options);
10
+ return (0, metric_data_1.getOrCreateCounter)(name, options);
11
11
  });
12
12
  exports.OtelUpDownCounter = (0, common_1.createParamDecorator)((name, options) => {
13
13
  if (!name || name.length === 0) {
14
14
  throw new Error('OtelUpDownCounter need a name argument');
15
15
  }
16
- return (0, metric_data_1.getOrCreateCounter)(name, metric_data_1.MetricType.UpDownCounter, options);
16
+ return (0, metric_data_1.getOrCreateCounter)(name, options);
17
17
  });
18
18
  //# sourceMappingURL=counter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"counter.js","sourceRoot":"","sources":["../../../src/metrics/decorators/counter.ts"],"names":[],"mappings":";;;AAAA,2CAAsD;AAEtD,gDAA0F;AAE7E,QAAA,WAAW,GAAG,IAAA,6BAAoB,EAAC,CAC9C,IAAY,EAAE,OAAuB,EACrC,EAAE;IACF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACrD;IACD,OAAO,IAAA,gCAAkB,EAAC,IAAI,EAAE,wBAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEU,QAAA,iBAAiB,GAAG,IAAA,6BAAoB,EAAC,CACpD,IAAY,EAAE,OAAuB,EACrC,EAAE;IACF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;KAC3D;IACD,OAAO,IAAA,gCAAkB,EAAC,IAAI,EAAE,wBAAU,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"counter.js","sourceRoot":"","sources":["../../../src/metrics/decorators/counter.ts"],"names":[],"mappings":";;;AAAA,2CAAsD;AAEtD,gDAAgE;AAEnD,QAAA,WAAW,GAAG,IAAA,6BAAoB,EAAC,CAAC,IAAY,EAAE,OAAuB,EAAE,EAAE;IACxF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACrD;IACD,OAAO,IAAA,gCAAkB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEU,QAAA,iBAAiB,GAAG,IAAA,6BAAoB,EAAC,CAAC,IAAY,EAAE,OAAuB,EAAE,EAAE;IAC9F,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;KAC3D;IACD,OAAO,IAAA,gCAAkB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const OtelHistogram: (...dataOrPipes: (string | import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OtelHistogram = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const metric_data_1 = require("../metric-data");
6
+ exports.OtelHistogram = (0, common_1.createParamDecorator)((name, options) => {
7
+ if (!name || name.length === 0) {
8
+ throw new Error('OtelHistogram need a name argument');
9
+ }
10
+ return (0, metric_data_1.getOrCreateHistogram)(name, options);
11
+ });
12
+ //# sourceMappingURL=histogram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"histogram.js","sourceRoot":"","sources":["../../../src/metrics/decorators/histogram.ts"],"names":[],"mappings":";;;AAAA,2CAAsD;AAEtD,gDAAsD;AAEzC,QAAA,aAAa,GAAG,IAAA,6BAAoB,EAAC,CAAC,IAAY,EAAE,OAAuB,EAAE,EAAE;IAC1F,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;KACvD;IACD,OAAO,IAAA,kCAAoB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './common';
2
2
  export * from './counter';
3
- export * from './value-recorder';
3
+ export * from './histogram';
4
+ export * from './observable';
@@ -12,5 +12,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./common"), exports);
14
14
  __exportStar(require("./counter"), exports);
15
- __exportStar(require("./value-recorder"), exports);
15
+ __exportStar(require("./histogram"), exports);
16
+ __exportStar(require("./observable"), exports);
16
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metrics/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metrics/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,8CAA4B;AAC5B,+CAA6B"}
@@ -0,0 +1,3 @@
1
+ export declare const OtelObservableGauge: (...dataOrPipes: (string | import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
2
+ export declare const OtelObservableCounter: (...dataOrPipes: (string | import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
3
+ export declare const OtelObservableUpDownCounter: (...dataOrPipes: (string | import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OtelObservableUpDownCounter = exports.OtelObservableCounter = exports.OtelObservableGauge = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const metric_data_1 = require("../metric-data");
6
+ exports.OtelObservableGauge = (0, common_1.createParamDecorator)((name, options) => {
7
+ if (!name || name.length === 0) {
8
+ throw new Error('OtelObservableGauge need a name argument');
9
+ }
10
+ return (0, metric_data_1.getOrCreateObservableGauge)(name, options);
11
+ });
12
+ exports.OtelObservableCounter = (0, common_1.createParamDecorator)((name, options) => {
13
+ if (!name || name.length === 0) {
14
+ throw new Error('OtelObservableCounter need a name argument');
15
+ }
16
+ return (0, metric_data_1.getOrCreateObservableCounter)(name, options);
17
+ });
18
+ exports.OtelObservableUpDownCounter = (0, common_1.createParamDecorator)((name, options) => {
19
+ if (!name || name.length === 0) {
20
+ throw new Error('OtelObservableUpDownCounter need a name argument');
21
+ }
22
+ return (0, metric_data_1.getOrCreateObservableUpDownCounter)(name, options);
23
+ });
24
+ //# sourceMappingURL=observable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable.js","sourceRoot":"","sources":["../../../src/metrics/decorators/observable.ts"],"names":[],"mappings":";;;AAAA,2CAAsD;AAEtD,gDAA8H;AAEjH,QAAA,mBAAmB,GAAG,IAAA,6BAAoB,EAAC,CAAC,IAAY,EAAE,OAAuB,EAAE,EAAE;IAChG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;KAC7D;IACD,OAAO,IAAA,wCAA0B,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEU,QAAA,qBAAqB,GAAG,IAAA,6BAAoB,EACvD,CAAC,IAAY,EAAE,OAAuB,EAAE,EAAE;IACxC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;KAC/D;IACD,OAAO,IAAA,0CAA4B,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC,CACF,CAAC;AAEW,QAAA,2BAA2B,GAAG,IAAA,6BAAoB,EAC7D,CAAC,IAAY,EAAE,OAAuB,EAAE,EAAE;IACxC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;KACrE;IACD,OAAO,IAAA,gDAAkC,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC,CACF,CAAC"}
@@ -1,10 +1,17 @@
1
- import { Counter, MetricOptions, UpDownCounter, ValueRecorder } from '@opentelemetry/api-metrics';
2
- export declare type GenericMetric = Counter | UpDownCounter | ValueRecorder;
1
+ import { Counter, MetricOptions, UpDownCounter, Histogram, ObservableGauge, ObservableCounter, ObservableUpDownCounter, ObservableResult } from '@opentelemetry/api-metrics';
2
+ export declare type GenericMetric = Counter | UpDownCounter | Histogram | ObservableGauge | ObservableCounter | ObservableUpDownCounter;
3
3
  export declare enum MetricType {
4
4
  'Counter' = "Counter",
5
5
  'UpDownCounter' = "UpDownCounter",
6
- 'ValueRecorder' = "ValueRecorder"
6
+ 'Histogram' = "Histogram",
7
+ 'ObservableGauge' = "ObservableGauge",
8
+ 'ObservableCounter' = "ObservableCounter",
9
+ 'ObservableUpDownCounter' = "ObservableUpDownCounter"
7
10
  }
8
11
  export declare const meterData: Map<string, GenericMetric>;
9
- export declare function getOrCreateValueRecorder(name: string, type: MetricType, options: MetricOptions): ValueRecorder;
10
- export declare function getOrCreateCounter(name: string, type: MetricType, options: MetricOptions): Counter | UpDownCounter;
12
+ export declare function getOrCreateHistogram(name: string, options: MetricOptions): Histogram;
13
+ export declare function getOrCreateCounter(name: string, options: MetricOptions): Counter;
14
+ export declare function getOrCreateUpDownCounter(name: string, options: MetricOptions): UpDownCounter;
15
+ export declare function getOrCreateObservableGauge(name: string, options: MetricOptions, callback?: (observableResult: ObservableResult) => void): ObservableGauge;
16
+ export declare function getOrCreateObservableCounter(name: string, options: MetricOptions, callback?: (observableResult: ObservableResult) => void): ObservableCounter;
17
+ export declare function getOrCreateObservableUpDownCounter(name: string, options: MetricOptions, callback?: (observableResult: ObservableResult) => void): ObservableUpDownCounter;
@@ -1,47 +1,76 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getOrCreateCounter = exports.getOrCreateValueRecorder = exports.meterData = exports.MetricType = void 0;
3
+ exports.getOrCreateObservableUpDownCounter = exports.getOrCreateObservableCounter = exports.getOrCreateObservableGauge = exports.getOrCreateUpDownCounter = exports.getOrCreateCounter = exports.getOrCreateHistogram = exports.meterData = exports.MetricType = void 0;
4
4
  const api_metrics_1 = require("@opentelemetry/api-metrics");
5
5
  const opentelemetry_constants_1 = require("../opentelemetry.constants");
6
6
  var MetricType;
7
7
  (function (MetricType) {
8
8
  MetricType["Counter"] = "Counter";
9
9
  MetricType["UpDownCounter"] = "UpDownCounter";
10
- MetricType["ValueRecorder"] = "ValueRecorder";
10
+ MetricType["Histogram"] = "Histogram";
11
+ MetricType["ObservableGauge"] = "ObservableGauge";
12
+ MetricType["ObservableCounter"] = "ObservableCounter";
13
+ MetricType["ObservableUpDownCounter"] = "ObservableUpDownCounter";
11
14
  })(MetricType = exports.MetricType || (exports.MetricType = {}));
12
15
  exports.meterData = new Map();
13
- function getOrCreateValueRecorder(name, type, options) {
16
+ function getOrCreateHistogram(name, options) {
14
17
  if (exports.meterData.has(name)) {
15
18
  return exports.meterData.get(name);
16
19
  }
17
20
  const meter = api_metrics_1.metrics.getMeterProvider().getMeter(opentelemetry_constants_1.OTEL_METER_NAME);
18
- switch (type) {
19
- case MetricType.ValueRecorder:
20
- const valueRecorder = meter.createValueRecorder(name, options);
21
- exports.meterData.set(name, valueRecorder);
22
- return valueRecorder;
23
- default:
24
- throw new Error(`Unknown type: ${type}`);
21
+ const histogram = meter.createHistogram(name, options);
22
+ exports.meterData.set(name, histogram);
23
+ return histogram;
24
+ }
25
+ exports.getOrCreateHistogram = getOrCreateHistogram;
26
+ function getOrCreateCounter(name, options) {
27
+ if (exports.meterData.has(name)) {
28
+ return exports.meterData.get(name);
25
29
  }
30
+ const meter = api_metrics_1.metrics.getMeterProvider().getMeter(opentelemetry_constants_1.OTEL_METER_NAME);
31
+ const counter = meter.createCounter(name, options);
32
+ exports.meterData.set(name, counter);
33
+ return counter;
26
34
  }
27
- exports.getOrCreateValueRecorder = getOrCreateValueRecorder;
28
- function getOrCreateCounter(name, type, options) {
35
+ exports.getOrCreateCounter = getOrCreateCounter;
36
+ function getOrCreateUpDownCounter(name, options) {
29
37
  if (exports.meterData.has(name)) {
30
38
  return exports.meterData.get(name);
31
39
  }
32
40
  const meter = api_metrics_1.metrics.getMeterProvider().getMeter(opentelemetry_constants_1.OTEL_METER_NAME);
33
- switch (type) {
34
- case MetricType.Counter:
35
- const counter = meter.createCounter(name, options);
36
- exports.meterData.set(name, counter);
37
- return counter;
38
- case MetricType.UpDownCounter:
39
- const upDownCounter = meter.createUpDownCounter(name, options);
40
- exports.meterData.set(name, upDownCounter);
41
- return upDownCounter;
42
- default:
43
- throw new Error(`Unknown type: ${type}`);
41
+ const upDownCounter = meter.createUpDownCounter(name, options);
42
+ exports.meterData.set(name, upDownCounter);
43
+ return upDownCounter;
44
+ }
45
+ exports.getOrCreateUpDownCounter = getOrCreateUpDownCounter;
46
+ function getOrCreateObservableGauge(name, options, callback) {
47
+ if (exports.meterData.has(name)) {
48
+ return exports.meterData.get(name);
44
49
  }
50
+ const meter = api_metrics_1.metrics.getMeterProvider().getMeter(opentelemetry_constants_1.OTEL_METER_NAME);
51
+ const observableGauge = meter.createObservableGauge(name, options, callback);
52
+ exports.meterData.set(name, observableGauge);
53
+ return observableGauge;
45
54
  }
46
- exports.getOrCreateCounter = getOrCreateCounter;
55
+ exports.getOrCreateObservableGauge = getOrCreateObservableGauge;
56
+ function getOrCreateObservableCounter(name, options, callback) {
57
+ if (exports.meterData.has(name)) {
58
+ return exports.meterData.get(name);
59
+ }
60
+ const meter = api_metrics_1.metrics.getMeterProvider().getMeter(opentelemetry_constants_1.OTEL_METER_NAME);
61
+ const observableCounter = meter.createObservableCounter(name, options, callback);
62
+ exports.meterData.set(name, observableCounter);
63
+ return observableCounter;
64
+ }
65
+ exports.getOrCreateObservableCounter = getOrCreateObservableCounter;
66
+ function getOrCreateObservableUpDownCounter(name, options, callback) {
67
+ if (exports.meterData.has(name)) {
68
+ return exports.meterData.get(name);
69
+ }
70
+ const meter = api_metrics_1.metrics.getMeterProvider().getMeter(opentelemetry_constants_1.OTEL_METER_NAME);
71
+ const observableCounter = meter.createObservableCounter(name, options, callback);
72
+ exports.meterData.set(name, observableCounter);
73
+ return observableCounter;
74
+ }
75
+ exports.getOrCreateObservableUpDownCounter = getOrCreateObservableUpDownCounter;
47
76
  //# sourceMappingURL=metric-data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metric-data.js","sourceRoot":"","sources":["../../src/metrics/metric-data.ts"],"names":[],"mappings":";;;AAAA,4DAEoC;AACpC,wEAA6D;AAI7D,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,iCAAqB,CAAA;IACrB,6CAAiC,CAAA;IACjC,6CAAiC,CAAA;AACnC,CAAC,EAJW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAIrB;AAEY,QAAA,SAAS,GAA+B,IAAI,GAAG,EAAE,CAAC;AAE/D,SAAgB,wBAAwB,CACtC,IAAY,EAAE,IAAgB,EAAE,OAAsB;IAEtD,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,QAAQ,IAAI,EAAE;QACZ,KAAK,UAAU,CAAC,aAAa;YAC3B,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC/D,iBAAS,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACnC,OAAO,aAAa,CAAC;QACvB;YACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;KAC5C;AACH,CAAC;AAjBD,4DAiBC;AAED,SAAgB,kBAAkB,CAChC,IAAY,EAAE,IAAgB,EAAE,OAAsB;IAEtD,IAAI,iBAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACvB,OAAO,iBAAS,CAAC,GAAG,CAAC,IAAI,CAA4B,CAAC;KACvD;IAED,MAAM,KAAK,GAAG,qBAAO,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,yCAAe,CAAC,CAAC;IAEnE,QAAQ,IAAI,EAAE;QACZ,KAAK,UAAU,CAAC,OAAO;YACrB,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACnD,iBAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,OAAO,CAAC;QACjB,KAAK,UAAU,CAAC,aAAa;YAC3B,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC/D,iBAAS,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACnC,OAAO,aAAa,CAAC;QACvB;YACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;KAC5C;AACH,CAAC;AArBD,gDAqBC"}
1
+ {"version":3,"file":"metric-data.js","sourceRoot":"","sources":["../../src/metrics/metric-data.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import { Counter, UpDownCounter, ValueRecorder, MetricOptions } from '@opentelemetry/api-metrics';
1
+ import { MetricOptions, ObservableResult } from '@opentelemetry/api-metrics';
2
2
  export declare class MetricService {
3
- getCounter(name: string, options?: MetricOptions): Counter | UpDownCounter;
4
- getUpDownCounter(name: string, options?: MetricOptions): Counter | UpDownCounter;
5
- getValueRecorder(name: string, options?: MetricOptions): ValueRecorder;
6
- private getOrCreateValueRecorder;
7
- private getOrCreateCounter;
3
+ getCounter(name: string, options?: MetricOptions): import("@opentelemetry/api-metrics").Counter;
4
+ getUpDownCounter(name: string, options?: MetricOptions): import("@opentelemetry/api-metrics").UpDownCounter;
5
+ getHistogram(name: string, options?: MetricOptions): import("@opentelemetry/api-metrics").Histogram;
6
+ getObservableCounter(name: string, options?: MetricOptions, callback?: (observableResult: ObservableResult) => void): import("@opentelemetry/api-metrics").ObservableBase;
7
+ getObservableGauge(name: string, options?: MetricOptions, callback?: (observableResult: ObservableResult) => void): import("@opentelemetry/api-metrics").ObservableBase;
8
+ getObservableUpDownCounter(name: string, options?: MetricOptions, callback?: (observableResult: ObservableResult) => void): import("@opentelemetry/api-metrics").ObservableBase;
8
9
  }
@@ -11,19 +11,22 @@ const common_1 = require("@nestjs/common");
11
11
  const metric_data_1 = require("./metric-data");
12
12
  let MetricService = class MetricService {
13
13
  getCounter(name, options) {
14
- return this.getOrCreateCounter(name, metric_data_1.MetricType.Counter, options);
14
+ return (0, metric_data_1.getOrCreateCounter)(name, options);
15
15
  }
16
16
  getUpDownCounter(name, options) {
17
- return this.getOrCreateCounter(name, metric_data_1.MetricType.UpDownCounter, options);
17
+ return (0, metric_data_1.getOrCreateUpDownCounter)(name, options);
18
18
  }
19
- getValueRecorder(name, options) {
20
- return this.getOrCreateValueRecorder(name, metric_data_1.MetricType.ValueRecorder, options);
19
+ getHistogram(name, options) {
20
+ return (0, metric_data_1.getOrCreateHistogram)(name, options);
21
21
  }
22
- getOrCreateValueRecorder(name, type, options) {
23
- return (0, metric_data_1.getOrCreateValueRecorder)(name, type, options);
22
+ getObservableCounter(name, options, callback) {
23
+ return (0, metric_data_1.getOrCreateObservableCounter)(name, options, callback);
24
24
  }
25
- getOrCreateCounter(name, type, options) {
26
- return (0, metric_data_1.getOrCreateCounter)(name, type, options);
25
+ getObservableGauge(name, options, callback) {
26
+ return (0, metric_data_1.getOrCreateObservableGauge)(name, options, callback);
27
+ }
28
+ getObservableUpDownCounter(name, options, callback) {
29
+ return (0, metric_data_1.getOrCreateObservableUpDownCounter)(name, options, callback);
27
30
  }
28
31
  };
29
32
  MetricService = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"metric.service.js","sourceRoot":"","sources":["../../src/metrics/metric.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAI5C,+CAEuB;AAGvB,IAAa,aAAa,GAA1B,MAAa,aAAa;IACxB,UAAU,CAAC,IAAY,EAAE,OAAuB;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,wBAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,OAAuB;QACpD,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,wBAAU,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,OAAuB;QACpD,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,wBAAU,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAEO,wBAAwB,CAC9B,IAAY,EAAE,IAAgB,EAAE,OAAsB;QAEtD,OAAO,IAAA,sCAAwB,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAEO,kBAAkB,CACxB,IAAY,EAAE,IAAgB,EAAE,OAAsB;QAEtD,OAAO,IAAA,gCAAkB,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;CACF,CAAA;AAxBY,aAAa;IADzB,IAAA,mBAAU,GAAE;GACA,aAAa,CAwBzB;AAxBY,sCAAa"}
1
+ {"version":3,"file":"metric.service.js","sourceRoot":"","sources":["../../src/metrics/metric.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAI5C,+CAIuB;AAGvB,IAAa,aAAa,GAA1B,MAAa,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,EACvB,QAAuD;QAEvD,OAAO,IAAA,0CAA4B,EAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,kBAAkB,CAChB,IAAY,EACZ,OAAuB,EACvB,QAAuD;QAEvD,OAAO,IAAA,wCAA0B,EAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED,0BAA0B,CACxB,IAAY,EACZ,OAAuB,EACvB,QAAuD;QAEvD,OAAO,IAAA,gDAAkC,EAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;CACF,CAAA;AApCY,aAAa;IADzB,IAAA,mBAAU,GAAE;GACA,aAAa,CAoCzB;AApCY,sCAAa"}