@aztec/telemetry-client 0.0.1-commit.03f7ef2 → 0.0.1-commit.04d373f

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 (73) hide show
  1. package/dest/attributes.d.ts +14 -2
  2. package/dest/attributes.d.ts.map +1 -1
  3. package/dest/attributes.js +7 -1
  4. package/dest/bench.d.ts +3 -1
  5. package/dest/bench.d.ts.map +1 -1
  6. package/dest/bench.js +24 -14
  7. package/dest/config.d.ts +3 -1
  8. package/dest/config.d.ts.map +1 -1
  9. package/dest/config.js +17 -9
  10. package/dest/l1_metrics.d.ts +2 -2
  11. package/dest/l1_metrics.d.ts.map +1 -1
  12. package/dest/l1_metrics.js +4 -20
  13. package/dest/lmdb_metrics.d.ts +3 -3
  14. package/dest/lmdb_metrics.d.ts.map +1 -1
  15. package/dest/lmdb_metrics.js +4 -20
  16. package/dest/metric-utils.d.ts +24 -0
  17. package/dest/metric-utils.d.ts.map +1 -0
  18. package/dest/metric-utils.js +59 -0
  19. package/dest/metrics.d.ts +311 -223
  20. package/dest/metrics.d.ts.map +1 -1
  21. package/dest/metrics.js +1593 -221
  22. package/dest/monitored_batch_span_processor.d.ts +29 -0
  23. package/dest/monitored_batch_span_processor.d.ts.map +1 -0
  24. package/dest/monitored_batch_span_processor.js +70 -0
  25. package/dest/nodejs_metrics_monitor.d.ts +3 -5
  26. package/dest/nodejs_metrics_monitor.d.ts.map +1 -1
  27. package/dest/nodejs_metrics_monitor.js +19 -40
  28. package/dest/noop.d.ts +6 -3
  29. package/dest/noop.d.ts.map +1 -1
  30. package/dest/noop.js +32 -1
  31. package/dest/otel.d.ts +5 -3
  32. package/dest/otel.d.ts.map +1 -1
  33. package/dest/otel.js +113 -7
  34. package/dest/otel_propagation.d.ts +3 -1
  35. package/dest/otel_propagation.d.ts.map +1 -1
  36. package/dest/otel_propagation.js +49 -1
  37. package/dest/otel_resource.d.ts +1 -1
  38. package/dest/otel_resource.d.ts.map +1 -1
  39. package/dest/otel_resource.js +14 -2
  40. package/dest/prom_otel_adapter.d.ts +4 -4
  41. package/dest/prom_otel_adapter.d.ts.map +1 -1
  42. package/dest/prom_otel_adapter.js +19 -10
  43. package/dest/start.d.ts +3 -2
  44. package/dest/start.d.ts.map +1 -1
  45. package/dest/start.js +3 -3
  46. package/dest/telemetry.d.ts +38 -26
  47. package/dest/telemetry.d.ts.map +1 -1
  48. package/dest/telemetry.js +46 -23
  49. package/dest/wrappers/fetch.d.ts +3 -3
  50. package/dest/wrappers/fetch.d.ts.map +1 -1
  51. package/dest/wrappers/fetch.js +3 -2
  52. package/dest/wrappers/l2_block_stream.d.ts +2 -2
  53. package/dest/wrappers/l2_block_stream.d.ts.map +1 -1
  54. package/dest/wrappers/l2_block_stream.js +385 -11
  55. package/package.json +4 -4
  56. package/src/attributes.ts +19 -1
  57. package/src/bench.ts +27 -15
  58. package/src/config.ts +24 -9
  59. package/src/l1_metrics.ts +5 -20
  60. package/src/lmdb_metrics.ts +5 -26
  61. package/src/metric-utils.ts +75 -0
  62. package/src/metrics.ts +1655 -249
  63. package/src/monitored_batch_span_processor.ts +93 -0
  64. package/src/nodejs_metrics_monitor.ts +18 -51
  65. package/src/noop.ts +61 -3
  66. package/src/otel.ts +114 -8
  67. package/src/otel_propagation.ts +42 -1
  68. package/src/otel_resource.ts +19 -2
  69. package/src/prom_otel_adapter.ts +16 -23
  70. package/src/start.ts +12 -4
  71. package/src/telemetry.ts +105 -67
  72. package/src/wrappers/fetch.ts +9 -3
  73. package/src/wrappers/l2_block_stream.ts +1 -1
@@ -0,0 +1,29 @@
1
+ import type { Logger } from '@aztec/foundation/log';
2
+ import { type Context } from '@opentelemetry/api';
3
+ import type { SpanExporter } from '@opentelemetry/sdk-trace-base';
4
+ import { BatchSpanProcessor, type BufferConfig, type ReadableSpan, type Span } from '@opentelemetry/sdk-trace-node';
5
+ export type MonitoredBatchSpanProcessorConfig = BufferConfig & {
6
+ minTraceDurationMs?: number;
7
+ };
8
+ /**
9
+ * Wraps BatchSpanProcessor to emit warnings when spans are dropped due to a full queue.
10
+ * The standard BatchSpanProcessor silently discards spans when its internal queue reaches
11
+ * maxQueueSize, making telemetry data loss invisible to operators.
12
+ */
13
+ export declare class MonitoredBatchSpanProcessor extends BatchSpanProcessor {
14
+ private readonly maxQueueSize;
15
+ private readonly minTraceDurationMs;
16
+ private readonly log;
17
+ private approxQueueSize;
18
+ private droppedSinceLastWarning;
19
+ private totalDropped;
20
+ private lastWarningTime;
21
+ constructor(exporter: SpanExporter, log: Logger, config?: MonitoredBatchSpanProcessorConfig);
22
+ onStart(span: Span, parentContext: Context): void;
23
+ onEnd(span: ReadableSpan): void;
24
+ forceFlush(): Promise<void>;
25
+ shutdown(): Promise<void>;
26
+ private shouldDropShortSpan;
27
+ private maybeLogDropWarning;
28
+ }
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmVkX2JhdGNoX3NwYW5fcHJvY2Vzc29yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbW9uaXRvcmVkX2JhdGNoX3NwYW5fcHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBELE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBa0IsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxJQUFJLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU9wSCxNQUFNLE1BQU0saUNBQWlDLEdBQUcsWUFBWSxHQUFHO0lBQzdELGtCQUFrQixDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQzdCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gscUJBQWEsMkJBQTRCLFNBQVEsa0JBQWtCO0lBQ2pFLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFTO0lBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQVM7SUFDNUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQVM7SUFFN0IsT0FBTyxDQUFDLGVBQWUsQ0FBSztJQUM1QixPQUFPLENBQUMsdUJBQXVCLENBQUs7SUFDcEMsT0FBTyxDQUFDLFlBQVksQ0FBSztJQUN6QixPQUFPLENBQUMsZUFBZSxDQUFLO0lBRTVCLFlBQVksUUFBUSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLGlDQUFpQyxFQU0xRjtJQUVRLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLEdBQUcsSUFBSSxDQUV6RDtJQUVRLEtBQUssQ0FBQyxJQUFJLEVBQUUsWUFBWSxHQUFHLElBQUksQ0FhdkM7SUFFYyxVQUFVLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUd6QztJQUVjLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBT3ZDO0lBRUQsT0FBTyxDQUFDLG1CQUFtQjtJQVEzQixPQUFPLENBQUMsbUJBQW1CO0NBWTVCIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitored_batch_span_processor.d.ts","sourceRoot":"","sources":["../src/monitored_batch_span_processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,KAAK,OAAO,EAAkB,MAAM,oBAAoB,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAOpH,MAAM,MAAM,iCAAiC,GAAG,YAAY,GAAG;IAC7D,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,qBAAa,2BAA4B,SAAQ,kBAAkB;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAE7B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,uBAAuB,CAAK;IACpC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,eAAe,CAAK;IAE5B,YAAY,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iCAAiC,EAM1F;IAEQ,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI,CAEzD;IAEQ,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAavC;IAEc,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAGzC;IAEc,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAOvC;IAED,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,mBAAmB;CAY5B"}
@@ -0,0 +1,70 @@
1
+ import { SpanStatusCode } from '@opentelemetry/api';
2
+ import { hrTimeToMilliseconds } from '@opentelemetry/core';
3
+ import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-node';
4
+ /** Minimum interval between drop warnings to avoid log spam. */ const DROP_WARNING_INTERVAL_MS = 30_000;
5
+ const DEFAULT_MIN_TRACE_DURATION_MS = 10;
6
+ /**
7
+ * Wraps BatchSpanProcessor to emit warnings when spans are dropped due to a full queue.
8
+ * The standard BatchSpanProcessor silently discards spans when its internal queue reaches
9
+ * maxQueueSize, making telemetry data loss invisible to operators.
10
+ */ export class MonitoredBatchSpanProcessor extends BatchSpanProcessor {
11
+ maxQueueSize;
12
+ minTraceDurationMs;
13
+ log;
14
+ approxQueueSize = 0;
15
+ droppedSinceLastWarning = 0;
16
+ totalDropped = 0;
17
+ lastWarningTime = 0;
18
+ constructor(exporter, log, config){
19
+ const maxQueueSize = config?.maxQueueSize ?? 2048;
20
+ super(exporter, {
21
+ ...config,
22
+ maxQueueSize
23
+ });
24
+ this.maxQueueSize = maxQueueSize;
25
+ this.minTraceDurationMs = Math.max(0, config?.minTraceDurationMs ?? DEFAULT_MIN_TRACE_DURATION_MS);
26
+ this.log = log;
27
+ }
28
+ onStart(span, parentContext) {
29
+ super.onStart(span, parentContext);
30
+ }
31
+ onEnd(span) {
32
+ if (this.shouldDropShortSpan(span)) {
33
+ return;
34
+ }
35
+ if (this.approxQueueSize >= this.maxQueueSize) {
36
+ this.droppedSinceLastWarning++;
37
+ this.totalDropped++;
38
+ this.maybeLogDropWarning();
39
+ } else {
40
+ this.approxQueueSize++;
41
+ }
42
+ super.onEnd(span);
43
+ }
44
+ async forceFlush() {
45
+ await super.forceFlush();
46
+ this.approxQueueSize = 0;
47
+ }
48
+ async shutdown() {
49
+ if (this.totalDropped > 0) {
50
+ this.log.warn(`BatchSpanProcessor shutting down with ${this.totalDropped} total spans dropped`, {
51
+ totalDropped: this.totalDropped
52
+ });
53
+ }
54
+ await super.shutdown();
55
+ }
56
+ shouldDropShortSpan(span) {
57
+ return this.minTraceDurationMs > 0 && span.status.code !== SpanStatusCode.ERROR && hrTimeToMilliseconds(span.duration) < this.minTraceDurationMs;
58
+ }
59
+ maybeLogDropWarning() {
60
+ const now = Date.now();
61
+ if (now - this.lastWarningTime >= DROP_WARNING_INTERVAL_MS) {
62
+ this.log.warn(`BatchSpanProcessor dropping spans: queue full (maxQueueSize=${this.maxQueueSize}). ` + `${this.droppedSinceLastWarning} dropped since last warning, ${this.totalDropped} total.`, {
63
+ droppedSinceLastWarning: this.droppedSinceLastWarning,
64
+ totalDropped: this.totalDropped
65
+ });
66
+ this.droppedSinceLastWarning = 0;
67
+ this.lastWarningTime = now;
68
+ }
69
+ }
70
+ }
@@ -1,7 +1,5 @@
1
- import { type Meter } from './telemetry.js';
2
- /**
3
- * Detector for custom Aztec attributes
4
- */
1
+ import type { Meter } from './telemetry.js';
2
+ /** Monitors Node.js runtime metrics */
5
3
  export declare class NodejsMetricsMonitor {
6
4
  private meter;
7
5
  private eventLoopDelayGauges;
@@ -18,4 +16,4 @@ export declare class NodejsMetricsMonitor {
18
16
  private measureMemoryUsage;
19
17
  private measureEventLoopDelay;
20
18
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzX21ldHJpY3NfbW9uaXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25vZGVqc19tZXRyaWNzX21vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUVMLEtBQUssS0FBSyxFQUlYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEI7O0dBRUc7QUFDSCxxQkFBYSxvQkFBb0I7SUF1Qm5CLE9BQU8sQ0FBQyxLQUFLO0lBdEJ6QixPQUFPLENBQUMsb0JBQW9CLENBUTFCO0lBSUYsT0FBTyxDQUFDLFlBQVksQ0FBb0U7SUFFeEYsT0FBTyxDQUFDLG1CQUFtQixDQUFrQjtJQUM3QyxPQUFPLENBQUMsYUFBYSxDQUFnQjtJQUVyQyxPQUFPLENBQUMsT0FBTyxDQUFTO0lBRXhCLE9BQU8sQ0FBQyxPQUFPLENBQW1DO0lBQ2xELE9BQU8sQ0FBQyxjQUFjLENBQW9CO0lBRTFDLFlBQW9CLEtBQUssRUFBRSxLQUFLLEVBaUQvQjtJQUVELEtBQUssSUFBSSxJQUFJLENBWVo7SUFFRCxJQUFJLElBQUksSUFBSSxDQVlYO0lBRUQsT0FBTyxDQUFDLE9BQU8sQ0FHYjtJQUVGLE9BQU8sQ0FBQyxrQkFBa0IsQ0FPeEI7SUFFRixPQUFPLENBQUMscUJBQXFCLENBeUIzQjtDQUNIIn0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzX21ldHJpY3NfbW9uaXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25vZGVqc19tZXRyaWNzX21vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxLQUFLLEVBQXlCLEtBQUssRUFBa0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRyx1Q0FBdUM7QUFDdkMscUJBQWEsb0JBQW9CO0lBdUJuQixPQUFPLENBQUMsS0FBSztJQXRCekIsT0FBTyxDQUFDLG9CQUFvQixDQVExQjtJQUlGLE9BQU8sQ0FBQyxZQUFZLENBQW9FO0lBRXhGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBa0I7SUFDN0MsT0FBTyxDQUFDLGFBQWEsQ0FBZ0I7SUFFckMsT0FBTyxDQUFDLE9BQU8sQ0FBUztJQUV4QixPQUFPLENBQUMsT0FBTyxDQUFtQztJQUNsRCxPQUFPLENBQUMsY0FBYyxDQUFvQjtJQUUxQyxZQUFvQixLQUFLLEVBQUUsS0FBSyxFQXVCL0I7SUFFRCxLQUFLLElBQUksSUFBSSxDQVlaO0lBRUQsSUFBSSxJQUFJLElBQUksQ0FZWDtJQUVELE9BQU8sQ0FBQyxPQUFPLENBR2I7SUFFRixPQUFPLENBQUMsa0JBQWtCLENBT3hCO0lBRUYsT0FBTyxDQUFDLHFCQUFxQixDQXlCM0I7Q0FDSCJ9
@@ -1 +1 @@
1
- {"version":3,"file":"nodejs_metrics_monitor.d.ts","sourceRoot":"","sources":["../src/nodejs_metrics_monitor.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,KAAK,EAIX,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,qBAAa,oBAAoB;IAuBnB,OAAO,CAAC,KAAK;IAtBzB,OAAO,CAAC,oBAAoB,CAQ1B;IAIF,OAAO,CAAC,YAAY,CAAoE;IAExF,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,cAAc,CAAoB;IAE1C,YAAoB,KAAK,EAAE,KAAK,EAiD/B;IAED,KAAK,IAAI,IAAI,CAYZ;IAED,IAAI,IAAI,IAAI,CAYX;IAED,OAAO,CAAC,OAAO,CAGb;IAEF,OAAO,CAAC,kBAAkB,CAOxB;IAEF,OAAO,CAAC,qBAAqB,CAyB3B;CACH"}
1
+ {"version":3,"file":"nodejs_metrics_monitor.d.ts","sourceRoot":"","sources":["../src/nodejs_metrics_monitor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAyB,KAAK,EAAkC,MAAM,gBAAgB,CAAC;AAEnG,uCAAuC;AACvC,qBAAa,oBAAoB;IAuBnB,OAAO,CAAC,KAAK;IAtBzB,OAAO,CAAC,oBAAoB,CAQ1B;IAIF,OAAO,CAAC,YAAY,CAAoE;IAExF,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,cAAc,CAAoB;IAE1C,YAAoB,KAAK,EAAE,KAAK,EAuB/B;IAED,KAAK,IAAI,IAAI,CAYZ;IAED,IAAI,IAAI,IAAI,CAYX;IAED,OAAO,CAAC,OAAO,CAGb;IAEF,OAAO,CAAC,kBAAkB,CAOxB;IAEF,OAAO,CAAC,qBAAqB,CAyB3B;CACH"}
@@ -1,10 +1,8 @@
1
1
  import { monitorEventLoopDelay, performance } from 'node:perf_hooks';
2
2
  import * as Attributes from './attributes.js';
3
+ import { createUpDownCounterWithDefault } from './metric-utils.js';
3
4
  import * as Metrics from './metrics.js';
4
- import { ValueType } from './telemetry.js';
5
- /**
6
- * Detector for custom Aztec attributes
7
- */ export class NodejsMetricsMonitor {
5
+ /** Monitors Node.js runtime metrics */ export class NodejsMetricsMonitor {
8
6
  meter;
9
7
  eventLoopDelayGauges;
10
8
  // skip `rss` because that's already tracked by @opentelemetry/host-metrics
@@ -55,47 +53,28 @@ import { ValueType } from './telemetry.js';
55
53
  safeObserveInt(obs, this.eventLoopDelayGauges.p99, this.eventLoopDelay.percentile(99));
56
54
  this.eventLoopDelay.reset();
57
55
  };
58
- const nsObsGauge = (name, description)=>meter.createObservableGauge(name, {
59
- unit: 'ns',
60
- valueType: ValueType.INT,
61
- description
62
- });
63
56
  this.eventLoopDelayGauges = {
64
- min: nsObsGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_MIN, 'Minimum delay of the event loop'),
65
- mean: nsObsGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_MEAN, 'Mean delay of the event loop'),
66
- max: nsObsGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_MAX, 'Max delay of the event loop'),
67
- stddev: nsObsGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_STDDEV, 'Stddev delay of the event loop'),
68
- p50: nsObsGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_P50, 'P50 delay of the event loop'),
69
- p90: nsObsGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_P90, 'P90 delay of the event loop'),
70
- p99: nsObsGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_P99, 'P99 delay of the event loop')
57
+ min: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_MIN),
58
+ mean: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_MEAN),
59
+ max: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_MAX),
60
+ stddev: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_STDDEV),
61
+ p50: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_P50),
62
+ p90: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_P90),
63
+ p99: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_P99)
71
64
  };
72
- this.eventLoopUilization = meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_UTILIZATION, {
73
- valueType: ValueType.DOUBLE,
74
- description: 'How busy is the event loop'
75
- });
76
- this.eventLoopTime = meter.createUpDownCounter(Metrics.NODEJS_EVENT_LOOP_TIME, {
77
- unit: 'ms',
78
- valueType: ValueType.INT,
79
- description: 'How much time the event loop has spent in a given state'
65
+ this.eventLoopUilization = meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_UTILIZATION);
66
+ this.eventLoopTime = createUpDownCounterWithDefault(meter, Metrics.NODEJS_EVENT_LOOP_TIME, {
67
+ [Attributes.NODEJS_EVENT_LOOP_STATE]: [
68
+ 'idle',
69
+ 'active'
70
+ ]
80
71
  });
81
72
  this.eventLoopDelay = monitorEventLoopDelay();
82
73
  this.memoryGauges = {
83
- heapUsed: meter.createObservableGauge(Metrics.NODEJS_MEMORY_HEAP_USAGE, {
84
- unit: 'By',
85
- description: 'Memory used by the V8 heap'
86
- }),
87
- heapTotal: meter.createObservableGauge(Metrics.NODEJS_MEMORY_HEAP_TOTAL, {
88
- unit: 'By',
89
- description: 'The max size the V8 heap can grow to'
90
- }),
91
- arrayBuffers: meter.createObservableGauge(Metrics.NODEJS_MEMORY_BUFFER_USAGE, {
92
- unit: 'By',
93
- description: 'Memory allocated for buffers (includes native memory used)'
94
- }),
95
- external: meter.createObservableGauge(Metrics.NODEJS_MEMORY_NATIVE_USAGE, {
96
- unit: 'By',
97
- description: 'Memory allocated for native C++ objects'
98
- })
74
+ heapUsed: meter.createObservableGauge(Metrics.NODEJS_MEMORY_HEAP_USAGE),
75
+ heapTotal: meter.createObservableGauge(Metrics.NODEJS_MEMORY_HEAP_TOTAL),
76
+ arrayBuffers: meter.createObservableGauge(Metrics.NODEJS_MEMORY_BUFFER_USAGE),
77
+ external: meter.createObservableGauge(Metrics.NODEJS_MEMORY_NATIVE_USAGE)
99
78
  };
100
79
  }
101
80
  start() {
package/dest/noop.d.ts CHANGED
@@ -1,6 +1,7 @@
1
- import { type Meter, type Span, type Tracer } from '@opentelemetry/api';
2
- import type { TelemetryClient } from './telemetry.js';
1
+ import { type Context, type Span, type Tracer } from '@opentelemetry/api';
2
+ import type { Meter, TelemetryClient } from './telemetry.js';
3
3
  export declare class NoopTelemetryClient implements TelemetryClient {
4
+ private meter;
4
5
  setExportedPublicTelemetry(_prefixes: string[]): void;
5
6
  setPublicTelemetryCollectFrom(_roles: string[]): void;
6
7
  getMeter(): Meter;
@@ -8,9 +9,11 @@ export declare class NoopTelemetryClient implements TelemetryClient {
8
9
  stop(): Promise<void>;
9
10
  flush(): Promise<void>;
10
11
  isEnabled(): boolean;
12
+ getTraceContext(): string | undefined;
13
+ extractPropagatedContext(_traceContext: string): Context | undefined;
11
14
  }
12
15
  export declare class NoopTracer implements Tracer {
13
16
  startSpan(): Span;
14
17
  startActiveSpan<F extends (...args: any[]) => any>(_name: string, ...args: unknown[]): ReturnType<F>;
15
18
  }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25vb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFvQixLQUFLLE1BQU0sRUFBbUIsTUFBTSxvQkFBb0IsQ0FBQztBQUUzRyxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxxQkFBYSxtQkFBb0IsWUFBVyxlQUFlO0lBQ3pELDBCQUEwQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUc7SUFDeEQsNkJBQTZCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBRztJQUV4RCxRQUFRLElBQUksS0FBSyxDQUVoQjtJQUVELFNBQVMsSUFBSSxNQUFNLENBRWxCO0lBRUQsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFcEI7SUFFRCxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUVyQjtJQUVELFNBQVMsWUFFUjtDQUNGO0FBS0QscUJBQWEsVUFBVyxZQUFXLE1BQU07SUFDdkMsU0FBUyxJQUFJLElBQUksQ0FFaEI7SUFFRCxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUluRztDQUNGIn0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25vb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFvQixLQUFLLE1BQU0sRUFBbUIsTUFBTSxvQkFBb0IsQ0FBQztBQUc3RyxPQUFPLEtBQUssRUFHVixLQUFLLEVBR0wsZUFBZSxFQUVoQixNQUFNLGdCQUFnQixDQUFDO0FBeUN4QixxQkFBYSxtQkFBb0IsWUFBVyxlQUFlO0lBQ3pELE9BQU8sQ0FBQyxLQUFLLENBQW1CO0lBRWhDLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUc7SUFDeEQsNkJBQTZCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBRztJQUV4RCxRQUFRLElBQUksS0FBSyxDQUVoQjtJQUVELFNBQVMsSUFBSSxNQUFNLENBRWxCO0lBRUQsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFcEI7SUFFRCxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUVyQjtJQUVELFNBQVMsWUFFUjtJQUVELGVBQWUsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUVwQztJQUVELHdCQUF3QixDQUFDLGFBQWEsRUFBRSxNQUFNLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FFbkU7Q0FDRjtBQUtELHFCQUFhLFVBQVcsWUFBVyxNQUFNO0lBQ3ZDLFNBQVMsSUFBSSxJQUFJLENBRWhCO0lBRUQsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FJbkc7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"noop.d.ts","sourceRoot":"","sources":["../src/noop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,IAAI,EAAoB,KAAK,MAAM,EAAmB,MAAM,oBAAoB,CAAC;AAE3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,qBAAa,mBAAoB,YAAW,eAAe;IACzD,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAG;IACxD,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAG;IAExD,QAAQ,IAAI,KAAK,CAEhB;IAED,SAAS,IAAI,MAAM,CAElB;IAED,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpB;IAED,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;IAED,SAAS,YAER;CACF;AAKD,qBAAa,UAAW,YAAW,MAAM;IACvC,SAAS,IAAI,IAAI,CAEhB;IAED,eAAe,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAInG;CACF"}
1
+ {"version":3,"file":"noop.d.ts","sourceRoot":"","sources":["../src/noop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAoB,KAAK,MAAM,EAAmB,MAAM,oBAAoB,CAAC;AAG7G,OAAO,KAAK,EAGV,KAAK,EAGL,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AAyCxB,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,KAAK,CAAmB;IAEhC,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAG;IACxD,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAG;IAExD,QAAQ,IAAI,KAAK,CAEhB;IAED,SAAS,IAAI,MAAM,CAElB;IAED,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpB;IAED,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;IAED,SAAS,YAER;IAED,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEnE;CACF;AAKD,qBAAa,UAAW,YAAW,MAAM;IACvC,SAAS,IAAI,IAAI,CAEhB;IAED,eAAe,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAInG;CACF"}
package/dest/noop.js CHANGED
@@ -1,9 +1,34 @@
1
1
  import { createNoopMeter } from '@opentelemetry/api';
2
+ /** A no-op meter that implements our custom Meter interface */ class NoopMeter {
3
+ otelMeter = createNoopMeter();
4
+ createGauge(_metric) {
5
+ return this.otelMeter.createGauge('');
6
+ }
7
+ createObservableGauge(_metric) {
8
+ return this.otelMeter.createObservableGauge('');
9
+ }
10
+ createHistogram(_metric, _extraOptions) {
11
+ return this.otelMeter.createHistogram('');
12
+ }
13
+ createUpDownCounter(_metric) {
14
+ return this.otelMeter.createUpDownCounter('');
15
+ }
16
+ createObservableUpDownCounter(_metric) {
17
+ return this.otelMeter.createObservableUpDownCounter('');
18
+ }
19
+ addBatchObservableCallback(callback, observables) {
20
+ this.otelMeter.addBatchObservableCallback(callback, observables);
21
+ }
22
+ removeBatchObservableCallback(callback, observables) {
23
+ this.otelMeter.removeBatchObservableCallback(callback, observables);
24
+ }
25
+ }
2
26
  export class NoopTelemetryClient {
27
+ meter = new NoopMeter();
3
28
  setExportedPublicTelemetry(_prefixes) {}
4
29
  setPublicTelemetryCollectFrom(_roles) {}
5
30
  getMeter() {
6
- return createNoopMeter();
31
+ return this.meter;
7
32
  }
8
33
  getTracer() {
9
34
  return new NoopTracer();
@@ -17,6 +42,12 @@ export class NoopTelemetryClient {
17
42
  isEnabled() {
18
43
  return false;
19
44
  }
45
+ getTraceContext() {
46
+ return undefined;
47
+ }
48
+ extractPropagatedContext(_traceContext) {
49
+ return undefined;
50
+ }
20
51
  }
21
52
  // @opentelemetry/api internally uses NoopTracer and NoopSpan but they're not exported
22
53
  // make our own versions
package/dest/otel.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { type Logger } from '@aztec/foundation/log';
2
- import { type Meter, type Tracer, type TracerProvider } from '@opentelemetry/api';
2
+ import { type Context, type Tracer, type TracerProvider } from '@opentelemetry/api';
3
3
  import { HostMetrics } from '@opentelemetry/host-metrics';
4
4
  import type { IResource } from '@opentelemetry/resources';
5
5
  import type { LoggerProvider } from '@opentelemetry/sdk-logs';
@@ -7,7 +7,7 @@ import { MeterProvider, type PeriodicExportingMetricReaderOptions } from '@opent
7
7
  import type { TelemetryClientConfig } from './config.js';
8
8
  import { NodejsMetricsMonitor } from './nodejs_metrics_monitor.js';
9
9
  import { PublicOtelFilterMetricExporter } from './otel_filter_metric_exporter.js';
10
- import type { TelemetryClient } from './telemetry.js';
10
+ import type { Meter, TelemetryClient } from './telemetry.js';
11
11
  export type OpenTelemetryClientFactory = (resource: IResource, log: Logger) => OpenTelemetryClient;
12
12
  export declare class OpenTelemetryClient implements TelemetryClient {
13
13
  private resource;
@@ -29,8 +29,10 @@ export declare class OpenTelemetryClient implements TelemetryClient {
29
29
  isEnabled(): boolean;
30
30
  flush(): Promise<void>;
31
31
  stop(): Promise<void>;
32
+ getTraceContext(): string | undefined;
33
+ extractPropagatedContext(traceContext: string): Context;
32
34
  static createMeterProvider(resource: IResource, exporters: Array<PeriodicExportingMetricReaderOptions>): MeterProvider;
33
35
  private static getCustomClientFactory;
34
36
  static createAndStart(config: TelemetryClientConfig, log: Logger): OpenTelemetryClient;
35
37
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL290ZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixLQUFLLE1BQU0sRUFBcUIsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRixPQUFPLEVBR0wsS0FBSyxLQUFLLEVBQ1YsS0FBSyxNQUFNLEVBQ1gsS0FBSyxjQUFjLEVBS3BCLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFHTCxhQUFhLEVBRWIsS0FBSyxvQ0FBb0MsRUFFMUMsTUFBTSw0QkFBNEIsQ0FBQztBQUlwQyxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQTRCLDhCQUE4QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHNUcsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsTUFBTSxNQUFNLDBCQUEwQixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLG1CQUFtQixDQUFDO0FBRW5HLHFCQUFhLG1CQUFvQixZQUFXLGVBQWU7SUFPdkQsT0FBTyxDQUFDLFFBQVE7SUFDaEIsT0FBTyxDQUFDLGFBQWE7SUFDckIsT0FBTyxDQUFDLGFBQWE7SUFDckIsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLG9CQUFvQjtJQUM1QixPQUFPLENBQUMsR0FBRztJQVhiLFdBQVcsRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLG9CQUFvQixFQUFFLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztJQUN2RCxPQUFPLENBQUMsTUFBTSxDQUFnRDtJQUM5RCxPQUFPLENBQUMsT0FBTyxDQUFrRDtJQUVqRSxTQUFTLGFBQ0MsUUFBUSxFQUFFLFNBQVMsRUFDbkIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGNBQWMsRUFDN0IsY0FBYyxFQUFFLGNBQWMsR0FBRyxTQUFTLEVBQzFDLG9CQUFvQixFQUFFLDhCQUE4QixHQUFHLFNBQVMsRUFDaEUsR0FBRyxFQUFFLE1BQU0sRUFDakI7SUFFSiwwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUVsRDtJQUVELDZCQUE2QixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBRW5EO0lBRUQsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsS0FBSyxDQU81QjtJQUVELFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FPOUI7SUFFTSxLQUFLLFNBNkJYO0lBRU0sU0FBUyxZQUVmO0lBRVksS0FBSyxrQkFNakI7SUFFWSxJQUFJLGtCQWdCaEI7SUFFRCxPQUFjLG1CQUFtQixDQUMvQixRQUFRLEVBQUUsU0FBUyxFQUNuQixTQUFTLEVBQUUsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLEdBQ3JELGFBQWEsQ0ErSGY7SUFFRCxPQUFPLENBQUMsTUFBTSxDQUFDLHNCQUFzQjtJQStEckMsT0FBYyxjQUFjLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsbUJBQW1CLENBUTVGO0NBQ0YifQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL290ZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixLQUFLLE1BQU0sRUFBcUIsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRixPQUFPLEVBQ0wsS0FBSyxPQUFPLEVBS1osS0FBSyxNQUFNLEVBQ1gsS0FBSyxjQUFjLEVBTXBCLE1BQU0sb0JBQW9CLENBQUM7QUFJNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFHTCxhQUFhLEVBRWIsS0FBSyxvQ0FBb0MsRUFFMUMsTUFBTSw0QkFBNEIsQ0FBQztBQUlwQyxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQTRCLDhCQUE4QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHNUcsT0FBTyxLQUFLLEVBR1YsS0FBSyxFQUdMLGVBQWUsRUFFaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQXlDeEIsTUFBTSxNQUFNLDBCQUEwQixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLG1CQUFtQixDQUFDO0FBRW5HLHFCQUFhLG1CQUFvQixZQUFXLGVBQWU7SUFPdkQsT0FBTyxDQUFDLFFBQVE7SUFDaEIsT0FBTyxDQUFDLGFBQWE7SUFDckIsT0FBTyxDQUFDLGFBQWE7SUFDckIsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLG9CQUFvQjtJQUM1QixPQUFPLENBQUMsR0FBRztJQVhiLFdBQVcsRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLG9CQUFvQixFQUFFLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztJQUN2RCxPQUFPLENBQUMsTUFBTSxDQUE4RDtJQUM1RSxPQUFPLENBQUMsT0FBTyxDQUFrRDtJQUVqRSxTQUFTLGFBQ0MsUUFBUSxFQUFFLFNBQVMsRUFDbkIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGNBQWMsRUFDN0IsY0FBYyxFQUFFLGNBQWMsR0FBRyxTQUFTLEVBQzFDLG9CQUFvQixFQUFFLDhCQUE4QixHQUFHLFNBQVMsRUFDaEUsR0FBRyxFQUFFLE1BQU0sRUFDakI7SUFFSiwwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUVsRDtJQUVELDZCQUE2QixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBRW5EO0lBRUQsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsS0FBSyxDQVE1QjtJQUVELFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FPOUI7SUFFTSxLQUFLLFNBOEJYO0lBRU0sU0FBUyxZQUVmO0lBRVksS0FBSyxrQkFNakI7SUFFWSxJQUFJLGtCQWdCaEI7SUFFTSxlQUFlLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FJM0M7SUFFTSx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FLN0Q7SUFFRCxPQUFjLG1CQUFtQixDQUMvQixRQUFRLEVBQUUsU0FBUyxFQUNuQixTQUFTLEVBQUUsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLEdBQ3JELGFBQWEsQ0E2SmY7SUFFRCxPQUFPLENBQUMsTUFBTSxDQUFDLHNCQUFzQjtJQXNFckMsT0FBYyxjQUFjLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsbUJBQW1CLENBUTVGO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AAErF,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,cAAc,EAKpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAGL,aAAa,EAEb,KAAK,oCAAoC,EAE1C,MAAM,4BAA4B,CAAC;AAIpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAA4B,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAG5G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,MAAM,0BAA0B,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,mBAAmB,CAAC;AAEnG,qBAAa,mBAAoB,YAAW,eAAe;IAOvD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,GAAG;IAXb,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACvD,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,OAAO,CAAkD;IAEjE,SAAS,aACC,QAAQ,EAAE,SAAS,EACnB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,cAAc,EAC7B,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,oBAAoB,EAAE,8BAA8B,GAAG,SAAS,EAChE,GAAG,EAAE,MAAM,EACjB;IAEJ,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAElD;IAED,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAEnD;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAO5B;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9B;IAEM,KAAK,SA6BX;IAEM,SAAS,YAEf;IAEY,KAAK,kBAMjB;IAEY,IAAI,kBAgBhB;IAED,OAAc,mBAAmB,CAC/B,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,KAAK,CAAC,oCAAoC,CAAC,GACrD,aAAa,CA+Hf;IAED,OAAO,CAAC,MAAM,CAAC,sBAAsB;IA+DrC,OAAc,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAQ5F;CACF"}
1
+ {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AAErF,OAAO,EACL,KAAK,OAAO,EAKZ,KAAK,MAAM,EACX,KAAK,cAAc,EAMpB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAGL,aAAa,EAEb,KAAK,oCAAoC,EAE1C,MAAM,4BAA4B,CAAC;AAIpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAA4B,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAG5G,OAAO,KAAK,EAGV,KAAK,EAGL,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AAyCxB,MAAM,MAAM,0BAA0B,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,mBAAmB,CAAC;AAEnG,qBAAa,mBAAoB,YAAW,eAAe;IAOvD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,GAAG;IAXb,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACvD,OAAO,CAAC,MAAM,CAA8D;IAC5E,OAAO,CAAC,OAAO,CAAkD;IAEjE,SAAS,aACC,QAAQ,EAAE,SAAS,EACnB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,cAAc,EAC7B,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,oBAAoB,EAAE,8BAA8B,GAAG,SAAS,EAChE,GAAG,EAAE,MAAM,EACjB;IAEJ,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAElD;IAED,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAEnD;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAQ5B;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9B;IAEM,KAAK,SA8BX;IAEM,SAAS,YAEf;IAEY,KAAK,kBAMjB;IAEY,IAAI,kBAgBhB;IAEM,eAAe,IAAI,MAAM,GAAG,SAAS,CAI3C;IAEM,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAK7D;IAED,OAAc,mBAAmB,CAC/B,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,KAAK,CAAC,oCAAoC,CAAC,GACrD,aAAa,CA6Jf;IAED,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAsErC,OAAc,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAQ5F;CACF"}
package/dest/otel.js CHANGED
@@ -1,15 +1,48 @@
1
1
  import { addLogDataHandler } from '@aztec/foundation/log';
2
- import { DiagConsoleLogger, DiagLogLevel, context, diag, isSpanContextValid, trace } from '@opentelemetry/api';
2
+ import { DiagConsoleLogger, DiagLogLevel, ROOT_CONTEXT, context, diag, isSpanContextValid, propagation, trace } from '@opentelemetry/api';
3
+ import { W3CTraceContextPropagator } from '@opentelemetry/core';
3
4
  import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
4
5
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
5
6
  import { HostMetrics } from '@opentelemetry/host-metrics';
6
7
  import { ExplicitBucketHistogramAggregation, InstrumentType, MeterProvider, PeriodicExportingMetricReader, View } from '@opentelemetry/sdk-metrics';
7
- import { BatchSpanProcessor, NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
8
+ import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
8
9
  import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
10
+ import { toMetricOptions } from './metric-utils.js';
11
+ import { MonitoredBatchSpanProcessor } from './monitored_batch_span_processor.js';
9
12
  import { NodejsMetricsMonitor } from './nodejs_metrics_monitor.js';
10
13
  import { OtelFilterMetricExporter, PublicOtelFilterMetricExporter } from './otel_filter_metric_exporter.js';
11
14
  import { registerOtelLoggerProvider } from './otel_logger_provider.js';
12
15
  import { getOtelResource } from './otel_resource.js';
16
+ /** Wraps an OpenTelemetry Meter to implement our custom Meter interface */ class WrappedMeter {
17
+ otelMeter;
18
+ constructor(otelMeter){
19
+ this.otelMeter = otelMeter;
20
+ }
21
+ createGauge(metric) {
22
+ return this.otelMeter.createGauge(metric.name, toMetricOptions(metric));
23
+ }
24
+ createObservableGauge(metric) {
25
+ return this.otelMeter.createObservableGauge(metric.name, toMetricOptions(metric));
26
+ }
27
+ createHistogram(metric, extraOptions) {
28
+ return this.otelMeter.createHistogram(metric.name, {
29
+ ...toMetricOptions(metric),
30
+ ...extraOptions
31
+ });
32
+ }
33
+ createUpDownCounter(metric) {
34
+ return this.otelMeter.createUpDownCounter(metric.name, toMetricOptions(metric));
35
+ }
36
+ createObservableUpDownCounter(metric) {
37
+ return this.otelMeter.createObservableUpDownCounter(metric.name, toMetricOptions(metric));
38
+ }
39
+ addBatchObservableCallback(callback, observables) {
40
+ this.otelMeter.addBatchObservableCallback(callback, observables);
41
+ }
42
+ removeBatchObservableCallback(callback, observables) {
43
+ this.otelMeter.removeBatchObservableCallback(callback, observables);
44
+ }
45
+ }
13
46
  export class OpenTelemetryClient {
14
47
  resource;
15
48
  meterProvider;
@@ -40,7 +73,8 @@ export class OpenTelemetryClient {
40
73
  getMeter(name) {
41
74
  let meter = this.meters.get(name);
42
75
  if (!meter) {
43
- meter = this.meterProvider.getMeter(name, this.resource.attributes[ATTR_SERVICE_VERSION]);
76
+ const otelMeter = this.meterProvider.getMeter(name, this.resource.attributes[ATTR_SERVICE_VERSION]);
77
+ meter = new WrappedMeter(otelMeter);
44
78
  this.meters.set(name, meter);
45
79
  }
46
80
  return meter;
@@ -71,7 +105,8 @@ export class OpenTelemetryClient {
71
105
  name: this.resource.attributes[ATTR_SERVICE_NAME],
72
106
  meterProvider: this.meterProvider
73
107
  });
74
- this.nodejsMetricsMonitor = new NodejsMetricsMonitor(this.meterProvider.getMeter(this.resource.attributes[ATTR_SERVICE_NAME]));
108
+ const nodejsMeter = new WrappedMeter(this.meterProvider.getMeter(this.resource.attributes[ATTR_SERVICE_NAME]));
109
+ this.nodejsMetricsMonitor = new NodejsMetricsMonitor(nodejsMeter);
75
110
  this.hostMetrics.start();
76
111
  this.nodejsMetricsMonitor.start();
77
112
  }
@@ -100,6 +135,17 @@ export class OpenTelemetryClient {
100
135
  this.traceProvider instanceof NodeTracerProvider ? flushAndShutdown(this.traceProvider) : Promise.resolve()
101
136
  ]);
102
137
  }
138
+ getTraceContext() {
139
+ const carrier = {};
140
+ propagation.inject(context.active(), carrier);
141
+ return carrier['traceparent'];
142
+ }
143
+ extractPropagatedContext(traceContext) {
144
+ const extractedContext = propagation.extract(ROOT_CONTEXT, {
145
+ traceparent: traceContext
146
+ });
147
+ return extractedContext;
148
+ }
103
149
  static createMeterProvider(resource, exporters) {
104
150
  return new MeterProvider({
105
151
  resource,
@@ -324,6 +370,61 @@ export class OpenTelemetryClient {
324
370
  15_000_000,
325
371
  30_000_000
326
372
  ], true)
373
+ }),
374
+ // L1 gas prices in gwei: priority fees ~0.01-10, base fees ~1-500, spikes to 1000+
375
+ new View({
376
+ instrumentType: InstrumentType.HISTOGRAM,
377
+ instrumentUnit: 'gwei',
378
+ aggregation: new ExplicitBucketHistogramAggregation([
379
+ 0.1,
380
+ 0.5,
381
+ 1,
382
+ 2,
383
+ 5,
384
+ 10,
385
+ 20,
386
+ 50,
387
+ 100,
388
+ 200,
389
+ 500,
390
+ 1_000
391
+ ], true)
392
+ }),
393
+ // L1 gas consumption: tx gas 100k-30M, calldata/blob gas varies
394
+ new View({
395
+ instrumentType: InstrumentType.HISTOGRAM,
396
+ instrumentUnit: 'gas',
397
+ aggregation: new ExplicitBucketHistogramAggregation([
398
+ 10_000,
399
+ 50_000,
400
+ 100_000,
401
+ 250_000,
402
+ 500_000,
403
+ 1_000_000,
404
+ 2_000_000,
405
+ 5_000_000,
406
+ 10_000_000,
407
+ 15_000_000,
408
+ 30_000_000
409
+ ], true)
410
+ }),
411
+ // L1 tx total fee in ETH: typically 0.001 - 1 ETH
412
+ new View({
413
+ instrumentType: InstrumentType.HISTOGRAM,
414
+ instrumentUnit: 'eth',
415
+ aggregation: new ExplicitBucketHistogramAggregation([
416
+ 0.0001,
417
+ 0.0005,
418
+ 0.001,
419
+ 0.005,
420
+ 0.01,
421
+ 0.05,
422
+ 0.1,
423
+ 0.5,
424
+ 1,
425
+ 5,
426
+ 10
427
+ ], true)
327
428
  })
328
429
  ]
329
430
  });
@@ -333,12 +434,17 @@ export class OpenTelemetryClient {
333
434
  const tracerProvider = new NodeTracerProvider({
334
435
  resource,
335
436
  spanProcessors: config.tracesCollectorUrl ? [
336
- new BatchSpanProcessor(new OTLPTraceExporter({
437
+ new MonitoredBatchSpanProcessor(new OTLPTraceExporter({
337
438
  url: config.tracesCollectorUrl.href
338
- }))
439
+ }), log, {
440
+ maxQueueSize: config.otelBspMaxQueueSize,
441
+ minTraceDurationMs: config.otelMinTraceDurationMs
442
+ })
339
443
  ] : []
340
444
  });
341
- tracerProvider.register();
445
+ tracerProvider.register({
446
+ propagator: new W3CTraceContextPropagator()
447
+ });
342
448
  const exporters = [];
343
449
  if (config.metricsCollectorUrl) {
344
450
  // Default to a blacklist that is empty (allow all metrics)
@@ -1,3 +1,5 @@
1
+ import type { DiagnosticsMiddleware } from '@aztec/foundation/json-rpc/server';
1
2
  import type Koa from 'koa';
2
3
  export declare function getOtelJsonRpcPropagationMiddleware(scope?: string): (ctx: Koa.Context, next: () => Promise<void>) => Promise<void>;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbF9wcm9wYWdhdGlvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL290ZWxfcHJvcGFnYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLENBQUM7QUFVM0Isd0JBQWdCLG1DQUFtQyxDQUNqRCxLQUFLLFNBQWtCLEdBQ3RCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FvQ2hFIn0=
4
+ export declare function getOtelJsonRpcDiagnosticsMiddleware(): DiagnosticsMiddleware;
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbF9wcm9wYWdhdGlvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL290ZWxfcHJvcGFnYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUcvRSxPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQztBQVUzQix3QkFBZ0IsbUNBQW1DLENBQ2pELEtBQUssU0FBa0IsR0FDdEIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQW9DaEU7QUFFRCx3QkFBZ0IsbUNBQW1DLElBQUkscUJBQXFCLENBNEIzRSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"otel_propagation.d.ts","sourceRoot":"","sources":["../src/otel_propagation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAU3B,wBAAgB,mCAAmC,CACjD,KAAK,SAAkB,GACtB,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAoChE"}
1
+ {"version":3,"file":"otel_propagation.d.ts","sourceRoot":"","sources":["../src/otel_propagation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAG/E,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAU3B,wBAAgB,mCAAmC,CACjD,KAAK,SAAkB,GACtB,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAoChE;AAED,wBAAgB,mCAAmC,IAAI,qBAAqB,CA4B3E"}
@@ -6,7 +6,7 @@ export function getOtelJsonRpcPropagationMiddleware(scope = 'JsonRpcServer') {
6
6
  const tracer = getTelemetryClient().getTracer(scope);
7
7
  const context = propagation.extract(ROOT_CONTEXT, ctx.request.headers);
8
8
  const method = ctx.request.body?.method;
9
- return tracer.startActiveSpan(`JsonRpcServer.${method ?? 'unknown'}`, {
9
+ return tracer.startActiveSpan(`JsonRpcServer.${method ?? 'batch'}`, {
10
10
  kind: SpanKind.SERVER
11
11
  }, context, async (span)=>{
12
12
  if (ctx.id) {
@@ -42,3 +42,51 @@ export function getOtelJsonRpcPropagationMiddleware(scope = 'JsonRpcServer') {
42
42
  });
43
43
  };
44
44
  }
45
+ export function getOtelJsonRpcDiagnosticsMiddleware() {
46
+ return function otelJsonRpcDiagnostics(ctx, next) {
47
+ const [namespace, method] = splitNamespace(ctx.method);
48
+ const scope = namespace ?? 'UnknownHandler';
49
+ const tracer = getTelemetryClient().getTracer(scope);
50
+ return tracer.startActiveSpan(`${scope}.${method}`, {
51
+ kind: SpanKind.INTERNAL,
52
+ attributes: {
53
+ [ATTR_JSONRPC_METHOD]: ctx.method
54
+ }
55
+ }, async (span)=>{
56
+ if (ctx.id !== null) {
57
+ span.setAttribute(ATTR_JSONRPC_REQUEST_ID, ctx.id);
58
+ }
59
+ try {
60
+ await next();
61
+ span.setStatus({
62
+ code: SpanStatusCode.OK
63
+ });
64
+ } catch (err) {
65
+ span.setStatus({
66
+ code: SpanStatusCode.ERROR,
67
+ message: err instanceof Error ? err.message : String(err)
68
+ });
69
+ if (typeof err === 'string' || err instanceof Error) {
70
+ span.recordException(err);
71
+ }
72
+ throw err;
73
+ } finally{
74
+ span.end();
75
+ }
76
+ });
77
+ };
78
+ }
79
+ function splitNamespace(fullMethod) {
80
+ const idx = fullMethod.indexOf('_');
81
+ if (idx > -1) {
82
+ return [
83
+ fullMethod.slice(0, idx),
84
+ fullMethod.slice(idx + 1)
85
+ ];
86
+ } else {
87
+ return [
88
+ undefined,
89
+ fullMethod
90
+ ];
91
+ }
92
+ }
@@ -1,3 +1,3 @@
1
1
  import { type IResource } from '@opentelemetry/resources';
2
2
  export declare function getOtelResource(): IResource;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbF9yZXNvdXJjZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL290ZWxfcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLEtBQUssU0FBUyxFQU1mLE1BQU0sMEJBQTBCLENBQUM7QUFLbEMsd0JBQWdCLGVBQWUsSUFBSSxTQUFTLENBZTNDIn0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbF9yZXNvdXJjZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL290ZWxfcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLEtBQUssU0FBUyxFQU1mLE1BQU0sMEJBQTBCLENBQUM7QUFxQmxDLHdCQUFnQixlQUFlLElBQUksU0FBUyxDQWUzQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"otel_resource.d.ts","sourceRoot":"","sources":["../src/otel_resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EAMf,MAAM,0BAA0B,CAAC;AAKlC,wBAAgB,eAAe,IAAI,SAAS,CAe3C"}
1
+ {"version":3,"file":"otel_resource.d.ts","sourceRoot":"","sources":["../src/otel_resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EAMf,MAAM,0BAA0B,CAAC;AAqBlC,wBAAgB,eAAe,IAAI,SAAS,CAe3C"}
@@ -1,6 +1,17 @@
1
1
  import { Resource, detectResourcesSync, envDetectorSync, osDetectorSync, serviceInstanceIdDetectorSync } from '@opentelemetry/resources';
2
- import { SEMRESATTRS_SERVICE_NAME } from '@opentelemetry/semantic-conventions';
2
+ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
3
+ import { readFileSync } from 'fs';
4
+ import { dirname, resolve } from 'path';
5
+ import { fileURLToPath } from 'url';
3
6
  import { AZTEC_NODE_ROLE, AZTEC_REGISTRY_ADDRESS, AZTEC_ROLLUP_ADDRESS, AZTEC_ROLLUP_VERSION } from './attributes.js';
7
+ /** Reads the Aztec client version from the release manifest. */ function getAztecVersion() {
8
+ try {
9
+ const releasePleasePath = resolve(dirname(fileURLToPath(import.meta.url)), '../../../.release-please-manifest.json');
10
+ return JSON.parse(readFileSync(releasePleasePath, 'utf-8'))['.'];
11
+ } catch {
12
+ return undefined;
13
+ }
14
+ }
4
15
  export function getOtelResource() {
5
16
  const resource = detectResourcesSync({
6
17
  detectors: [
@@ -30,7 +41,8 @@ const aztecNetworkDetectorSync = {
30
41
  }
31
42
  const aztecAttributes = {
32
43
  // this gets overwritten by OTEL_RESOURCE_ATTRIBUTES (if set)
33
- [SEMRESATTRS_SERVICE_NAME]: role ? `aztec-${role}` : undefined,
44
+ [ATTR_SERVICE_NAME]: role ? `aztec-${role}` : undefined,
45
+ [ATTR_SERVICE_VERSION]: getAztecVersion(),
34
46
  [AZTEC_NODE_ROLE]: role,
35
47
  [AZTEC_ROLLUP_VERSION]: process.env.ROLLUP_VERSION ?? 'canonical',
36
48
  [AZTEC_ROLLUP_ADDRESS]: process.env.ROLLUP_CONTRACT_ADDRESS,