@aztec/telemetry-client 0.86.0 → 0.87.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.
@@ -1,6 +1,7 @@
1
- import { type Meter } from './telemetry.js';
1
+ import { type AttributesType, type Meter } from './telemetry.js';
2
2
  export type LmdbStatsCallback = () => Promise<{
3
3
  mappingSize: number;
4
+ physicalFileSize: number;
4
5
  numItems: number;
5
6
  actualSize: number;
6
7
  }>;
@@ -8,9 +9,10 @@ export declare class LmdbMetrics {
8
9
  private attributes?;
9
10
  private getStats?;
10
11
  private dbMapSize;
12
+ private dbPhysicalFileSize;
11
13
  private dbUsedSize;
12
14
  private dbNumItems;
13
- constructor(meter: Meter, attributes?: Partial<Record<"http.header.request.host" | "http.response.status_code" | "aztec.network_name" | "aztec.circuit.protocol_circuit_name" | "aztec.circuit.app_circuit_name" | "aztec.block.archive" | "aztec.block.number" | "aztec.slot.number" | "aztec.block.parent" | "aztec.block.candidate_txs_count" | "aztec.block.txs_count" | "aztec.block.size" | "aztec.epoch.size" | "aztec.block.proposer" | "aztec.epoch.number" | "aztec.tx.hash" | "aztec.ok" | "aztec.status" | "aztec.error_type" | "aztec.l1.tx_type" | "aztec.l1.sender" | "aztec.coinbase" | "aztec.tx.phase_name" | "aztec.p2p.goodbye.reason" | "aztec.proving.job_type" | "aztec.proving.job_id" | "aztec.merkle_tree.name" | "aztec.rollup.prover_id" | "aztec.proof.timed_out" | "aztec.p2p.id" | "aztec.p2p.req_resp.protocol" | "aztec.p2p.req_resp.batch_requests_count" | "aztec.pool.name" | "aztec.sequencer.state" | "aztec.simulator.phase" | "aztec.address.target" | "aztec.address.sender" | "aztec.mana.used" | "aztec.total_instructions" | "aztec.initial_sync" | "aztec.world_state.db_type" | "aztec.db_type" | "aztec.revertibility" | "aztec.gas_dimension" | "aztec.world_state_request" | "nodejs.eventloop.state", import("@opentelemetry/api").AttributeValue>> | undefined, getStats?: LmdbStatsCallback | undefined);
15
+ constructor(meter: Meter, attributes?: AttributesType | undefined, getStats?: LmdbStatsCallback | undefined);
14
16
  private recordDBMetrics;
15
17
  }
16
18
  //# sourceMappingURL=lmdb_metrics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lmdb_metrics.d.ts","sourceRoot":"","sources":["../src/lmdb_metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,KAAK,EAGX,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7G,qBAAa,WAAW;IAKI,OAAO,CAAC,UAAU,CAAC;IAAkB,OAAO,CAAC,QAAQ,CAAC;IAJhF,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAkB;gBAExB,KAAK,EAAE,KAAK,EAAU,UAAU,CAAC,4sCAAgB,EAAU,QAAQ,CAAC,+BAAmB;IAmBnG,OAAO,CAAC,eAAe,CAQrB;CACH"}
1
+ {"version":3,"file":"lmdb_metrics.d.ts","sourceRoot":"","sources":["../src/lmdb_metrics.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,KAAK,EAGX,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,qBAAa,WAAW;IAQpB,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,QAAQ,CAAC;IARnB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAkB;gBAGlC,KAAK,EAAE,KAAK,EACJ,UAAU,CAAC,EAAE,cAAc,YAAA,EAC3B,QAAQ,CAAC,EAAE,iBAAiB,YAAA;IA8BtC,OAAO,CAAC,eAAe,CASrB;CACH"}
@@ -4,6 +4,7 @@ export class LmdbMetrics {
4
4
  attributes;
5
5
  getStats;
6
6
  dbMapSize;
7
+ dbPhysicalFileSize;
7
8
  dbUsedSize;
8
9
  dbNumItems;
9
10
  constructor(meter, attributes, getStats){
@@ -15,6 +16,7 @@ export class LmdbMetrics {
15
16
  }
16
17
  const metrics = await this.getStats();
17
18
  observable.observe(this.dbMapSize, metrics.mappingSize, this.attributes);
19
+ observable.observe(this.dbPhysicalFileSize, metrics.physicalFileSize, this.attributes);
18
20
  observable.observe(this.dbNumItems, metrics.numItems, this.attributes);
19
21
  observable.observe(this.dbUsedSize, metrics.actualSize, this.attributes);
20
22
  };
@@ -23,6 +25,11 @@ export class LmdbMetrics {
23
25
  valueType: ValueType.INT,
24
26
  unit: 'By'
25
27
  });
28
+ this.dbPhysicalFileSize = meter.createObservableGauge(Metrics.DB_PHYSICAL_FILE_SIZE, {
29
+ description: 'LMDB Physical File Size',
30
+ valueType: ValueType.INT,
31
+ unit: 'By'
32
+ });
26
33
  this.dbUsedSize = meter.createObservableGauge(Metrics.DB_USED_SIZE, {
27
34
  description: 'LMDB Used Size',
28
35
  valueType: ValueType.INT,
@@ -34,6 +41,7 @@ export class LmdbMetrics {
34
41
  });
35
42
  meter.addBatchObservableCallback(this.recordDBMetrics, [
36
43
  this.dbMapSize,
44
+ this.dbPhysicalFileSize,
37
45
  this.dbUsedSize,
38
46
  this.dbNumItems
39
47
  ]);
package/dest/metrics.d.ts CHANGED
@@ -29,6 +29,7 @@ export declare const MEMPOOL_TX_COUNT = "aztec.mempool.tx_count";
29
29
  export declare const MEMPOOL_TX_SIZE = "aztec.mempool.tx_size";
30
30
  export declare const DB_NUM_ITEMS = "aztec.db.num_items";
31
31
  export declare const DB_MAP_SIZE = "aztec.db.map_size";
32
+ export declare const DB_PHYSICAL_FILE_SIZE = "aztec.db.physical_file_size";
32
33
  export declare const DB_USED_SIZE = "aztec.db.used_size";
33
34
  export declare const MEMPOOL_ATTESTATIONS_COUNT = "aztec.mempool.attestations_count";
34
35
  export declare const MEMPOOL_ATTESTATIONS_SIZE = "aztec.mempool.attestations_size";
@@ -150,4 +151,8 @@ export declare const NODEJS_EVENT_LOOP_DELAY_P90 = "nodejs.eventloop.delay.p90";
150
151
  export declare const NODEJS_EVENT_LOOP_DELAY_P99 = "nodejs.eventloop.delay.p99";
151
152
  export declare const NODEJS_EVENT_LOOP_UTILIZATION = "nodejs.eventloop.utilization";
152
153
  export declare const NODEJS_EVENT_LOOP_TIME = "nodejs.eventloop.time";
154
+ export declare const NODEJS_MEMORY_HEAP_USAGE = "nodejs.memory.v8_heap.usage";
155
+ export declare const NODEJS_MEMORY_HEAP_TOTAL = "nodejs.memory.v8_heap.total";
156
+ export declare const NODEJS_MEMORY_NATIVE_USAGE = "nodejs.memory.native.usage";
157
+ export declare const NODEJS_MEMORY_BUFFER_USAGE = "nodejs.memory.array_buffer.usage";
153
158
  //# sourceMappingURL=metrics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
package/dest/metrics.js CHANGED
@@ -27,6 +27,7 @@ export const MEMPOOL_TX_COUNT = 'aztec.mempool.tx_count';
27
27
  export const MEMPOOL_TX_SIZE = 'aztec.mempool.tx_size';
28
28
  export const DB_NUM_ITEMS = 'aztec.db.num_items';
29
29
  export const DB_MAP_SIZE = 'aztec.db.map_size';
30
+ export const DB_PHYSICAL_FILE_SIZE = 'aztec.db.physical_file_size';
30
31
  export const DB_USED_SIZE = 'aztec.db.used_size';
31
32
  export const MEMPOOL_ATTESTATIONS_COUNT = 'aztec.mempool.attestations_count';
32
33
  export const MEMPOOL_ATTESTATIONS_SIZE = 'aztec.mempool.attestations_size';
@@ -148,3 +149,7 @@ export const NODEJS_EVENT_LOOP_DELAY_P90 = 'nodejs.eventloop.delay.p90';
148
149
  export const NODEJS_EVENT_LOOP_DELAY_P99 = 'nodejs.eventloop.delay.p99';
149
150
  export const NODEJS_EVENT_LOOP_UTILIZATION = 'nodejs.eventloop.utilization';
150
151
  export const NODEJS_EVENT_LOOP_TIME = 'nodejs.eventloop.time';
152
+ export const NODEJS_MEMORY_HEAP_USAGE = 'nodejs.memory.v8_heap.usage';
153
+ export const NODEJS_MEMORY_HEAP_TOTAL = 'nodejs.memory.v8_heap.total';
154
+ export const NODEJS_MEMORY_NATIVE_USAGE = 'nodejs.memory.native.usage';
155
+ export const NODEJS_MEMORY_BUFFER_USAGE = 'nodejs.memory.array_buffer.usage';
@@ -2,9 +2,10 @@ import { type Meter } from './telemetry.js';
2
2
  /**
3
3
  * Detector for custom Aztec attributes
4
4
  */
5
- export declare class EventLoopMonitor {
5
+ export declare class NodejsMetricsMonitor {
6
6
  private meter;
7
7
  private eventLoopDelayGauges;
8
+ private memoryGauges;
8
9
  private eventLoopUilization;
9
10
  private eventLoopTime;
10
11
  private started;
@@ -14,5 +15,7 @@ export declare class EventLoopMonitor {
14
15
  start(): void;
15
16
  stop(): void;
16
17
  private measure;
18
+ private measureMemoryUsage;
19
+ private measureEventLoopDelay;
17
20
  }
18
- //# sourceMappingURL=event_loop_monitor.d.ts.map
21
+ //# sourceMappingURL=nodejs_metrics_monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodejs_metrics_monitor.d.ts","sourceRoot":"","sources":["../src/nodejs_metrics_monitor.ts"],"names":[],"mappings":"AAIA,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;gBAEtB,KAAK,EAAE,KAAK;IAmDhC,KAAK,IAAI,IAAI;IAcb,IAAI,IAAI,IAAI;IAcZ,OAAO,CAAC,OAAO,CAGb;IAEF,OAAO,CAAC,kBAAkB,CAOxB;IAEF,OAAO,CAAC,qBAAqB,CAyB3B;CACH"}
@@ -4,9 +4,12 @@ import * as Metrics from './metrics.js';
4
4
  import { ValueType } from './telemetry.js';
5
5
  /**
6
6
  * Detector for custom Aztec attributes
7
- */ export class EventLoopMonitor {
7
+ */ export class NodejsMetricsMonitor {
8
8
  meter;
9
9
  eventLoopDelayGauges;
10
+ // skip `rss` because that's already tracked by @opentelemetry/host-metrics
11
+ // description of each field here https://nodejs.org/api/process.html#processmemoryusage
12
+ memoryGauges;
10
13
  eventLoopUilization;
11
14
  eventLoopTime;
12
15
  started;
@@ -16,6 +19,17 @@ import { ValueType } from './telemetry.js';
16
19
  this.meter = meter;
17
20
  this.started = false;
18
21
  this.measure = (obs)=>{
22
+ this.measureMemoryUsage(obs);
23
+ this.measureEventLoopDelay(obs);
24
+ };
25
+ this.measureMemoryUsage = (observer)=>{
26
+ const mem = process.memoryUsage();
27
+ observer.observe(this.memoryGauges.heapUsed, mem.heapUsed);
28
+ observer.observe(this.memoryGauges.heapTotal, mem.heapTotal);
29
+ observer.observe(this.memoryGauges.arrayBuffers, mem.arrayBuffers);
30
+ observer.observe(this.memoryGauges.external, mem.external);
31
+ };
32
+ this.measureEventLoopDelay = (obs)=>{
19
33
  const newELU = performance.eventLoopUtilization();
20
34
  const delta = performance.eventLoopUtilization(newELU, this.lastELU);
21
35
  this.lastELU = newELU;
@@ -65,6 +79,24 @@ import { ValueType } from './telemetry.js';
65
79
  description: 'How much time the event loop has spent in a given state'
66
80
  });
67
81
  this.eventLoopDelay = monitorEventLoopDelay();
82
+ 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
+ })
99
+ };
68
100
  }
69
101
  start() {
70
102
  if (this.started) {
@@ -74,7 +106,8 @@ import { ValueType } from './telemetry.js';
74
106
  this.eventLoopDelay.enable();
75
107
  this.meter.addBatchObservableCallback(this.measure, [
76
108
  this.eventLoopUilization,
77
- ...Object.values(this.eventLoopDelayGauges)
109
+ ...Object.values(this.eventLoopDelayGauges),
110
+ ...Object.values(this.memoryGauges)
78
111
  ]);
79
112
  }
80
113
  stop() {
@@ -83,11 +116,14 @@ import { ValueType } from './telemetry.js';
83
116
  }
84
117
  this.meter.removeBatchObservableCallback(this.measure, [
85
118
  this.eventLoopUilization,
86
- ...Object.values(this.eventLoopDelayGauges)
119
+ ...Object.values(this.eventLoopDelayGauges),
120
+ ...Object.values(this.memoryGauges)
87
121
  ]);
88
122
  this.eventLoopDelay.disable();
89
123
  this.eventLoopDelay.reset();
90
124
  this.lastELU = undefined;
91
125
  }
92
126
  measure;
127
+ measureMemoryUsage;
128
+ measureEventLoopDelay;
93
129
  }
package/dest/noop.d.ts CHANGED
@@ -9,6 +9,6 @@ export declare class NoopTelemetryClient implements TelemetryClient {
9
9
  }
10
10
  export declare class NoopTracer implements Tracer {
11
11
  startSpan(): Span;
12
- startActiveSpan<F extends (...args: any[]) => any>(_name: string, ...args: (unknown | F)[]): ReturnType<F>;
12
+ startActiveSpan<F extends (...args: any[]) => any>(_name: string, ...args: unknown[]): ReturnType<F>;
13
13
  }
14
14
  //# sourceMappingURL=noop.d.ts.map
@@ -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,QAAQ,IAAI,KAAK;IAIjB,SAAS,IAAI,MAAM;IAInB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,SAAS;CAGV;AAKD,qBAAa,UAAW,YAAW,MAAM;IACvC,SAAS,IAAI,IAAI;IAIjB,eAAe,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;CAK3G"}
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,QAAQ,IAAI,KAAK;IAIjB,SAAS,IAAI,MAAM;IAInB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,SAAS;CAGV;AAKD,qBAAa,UAAW,YAAW,MAAM;IACvC,SAAS,IAAI,IAAI;IAIjB,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;CAKrG"}
package/dest/otel.d.ts CHANGED
@@ -5,7 +5,7 @@ import type { IResource } from '@opentelemetry/resources';
5
5
  import type { LoggerProvider } from '@opentelemetry/sdk-logs';
6
6
  import { MeterProvider, type PeriodicExportingMetricReaderOptions } from '@opentelemetry/sdk-metrics';
7
7
  import type { TelemetryClientConfig } from './config.js';
8
- import { EventLoopMonitor } from './event_loop_monitor.js';
8
+ import { NodejsMetricsMonitor } from './nodejs_metrics_monitor.js';
9
9
  import type { TelemetryClient } from './telemetry.js';
10
10
  export type OpenTelemetryClientFactory = (resource: IResource, log: Logger) => OpenTelemetryClient;
11
11
  export declare class OpenTelemetryClient implements TelemetryClient {
@@ -15,7 +15,7 @@ export declare class OpenTelemetryClient implements TelemetryClient {
15
15
  private loggerProvider;
16
16
  private log;
17
17
  hostMetrics: HostMetrics | undefined;
18
- eventLoopMonitor: EventLoopMonitor | undefined;
18
+ nodejsMetricsMonitor: NodejsMetricsMonitor | undefined;
19
19
  private meters;
20
20
  private tracers;
21
21
  protected constructor(resource: IResource, meterProvider: MeterProvider, traceProvider: TracerProvider, loggerProvider: LoggerProvider | undefined, log: Logger);
@@ -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,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAI3D,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,GAAG;IAVb,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC/C,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,GAAG,EAAE,MAAM;IAGrB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAS7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASxB,KAAK;IA+BL,SAAS;IAIH,KAAK;IAQL,IAAI;WAkBH,mBAAmB,CAC/B,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,OAAO,CAAC,oCAAoC,CAAC,GACrD,aAAa;IAkHhB,OAAO,CAAC,MAAM,CAAC,sBAAsB;WA4BvB,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB;CAS9F"}
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;AAInE,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,GAAG;IAVb,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,GAAG,EAAE,MAAM;IAGrB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAS7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASxB,KAAK;IA+BL,SAAS;IAIH,KAAK;IAQL,IAAI;WAkBH,mBAAmB,CAC/B,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,OAAO,CAAC,oCAAoC,CAAC,GACrD,aAAa;IAkHhB,OAAO,CAAC,MAAM,CAAC,sBAAsB;WA4BvB,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB;CAS9F"}
package/dest/otel.js CHANGED
@@ -6,7 +6,7 @@ import { HostMetrics } from '@opentelemetry/host-metrics';
6
6
  import { ExplicitBucketHistogramAggregation, InstrumentType, MeterProvider, PeriodicExportingMetricReader, View } from '@opentelemetry/sdk-metrics';
7
7
  import { BatchSpanProcessor, NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
8
8
  import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
9
- import { EventLoopMonitor } from './event_loop_monitor.js';
9
+ import { NodejsMetricsMonitor } from './nodejs_metrics_monitor.js';
10
10
  import { OtelFilterMetricExporter } from './otel_filter_metric_exporter.js';
11
11
  import { registerOtelLoggerProvider } from './otel_logger_provider.js';
12
12
  import { getOtelResource } from './otel_resource.js';
@@ -17,7 +17,7 @@ export class OpenTelemetryClient {
17
17
  loggerProvider;
18
18
  log;
19
19
  hostMetrics;
20
- eventLoopMonitor;
20
+ nodejsMetricsMonitor;
21
21
  meters;
22
22
  tracers;
23
23
  constructor(resource, meterProvider, traceProvider, loggerProvider, log){
@@ -63,9 +63,9 @@ export class OpenTelemetryClient {
63
63
  name: this.resource.attributes[ATTR_SERVICE_NAME],
64
64
  meterProvider: this.meterProvider
65
65
  });
66
- this.eventLoopMonitor = new EventLoopMonitor(this.meterProvider.getMeter(this.resource.attributes[ATTR_SERVICE_NAME]));
66
+ this.nodejsMetricsMonitor = new NodejsMetricsMonitor(this.meterProvider.getMeter(this.resource.attributes[ATTR_SERVICE_NAME]));
67
67
  this.hostMetrics.start();
68
- this.eventLoopMonitor.start();
68
+ this.nodejsMetricsMonitor.start();
69
69
  }
70
70
  isEnabled() {
71
71
  return true;
@@ -78,7 +78,7 @@ export class OpenTelemetryClient {
78
78
  ]);
79
79
  }
80
80
  async stop() {
81
- this.eventLoopMonitor?.stop();
81
+ this.nodejsMetricsMonitor?.stop();
82
82
  const flushAndShutdown = async (provider)=>{
83
83
  if (!provider) {
84
84
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"otel_filter_metric_exporter.d.ts","sourceRoot":"","sources":["../src/otel_filter_metric_exporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAc,kBAAkB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElG,qBAAa,wBAAyB,YAAW,kBAAkB;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAAsB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBAApE,QAAQ,EAAE,kBAAkB,EAAmB,qBAAqB,EAAE,MAAM,EAAE;IASpG,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAW7F,OAAO,CAAC,aAAa;IAMd,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGjC"}
1
+ {"version":3,"file":"otel_filter_metric_exporter.d.ts","sourceRoot":"","sources":["../src/otel_filter_metric_exporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAc,kBAAkB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElG,qBAAa,wBAAyB,YAAW,kBAAkB;IAE/D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBADrB,QAAQ,EAAE,kBAAkB,EAC5B,qBAAqB,EAAE,MAAM,EAAE;IAU3C,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAW7F,OAAO,CAAC,aAAa;IAMd,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGjC"}
@@ -6,7 +6,7 @@ type ValuesOf<T> = T extends Record<string, infer U> ? U : never;
6
6
  type AttributeNames = ValuesOf<typeof Attributes>;
7
7
  /**
8
8
  * This is a set of attributes that could lead to high cardinality in the metrics.
9
- * If you find youself wanting to capture this data in a metric consider if it makes sense to capture
9
+ * If you find yourself wanting to capture this data in a metric consider if it makes sense to capture
10
10
  * as the metric value instead of an attribute or consider logging instead.
11
11
  *
12
12
  * Think twice before removing an attribute from this list.
package/dest/telemetry.js CHANGED
@@ -27,7 +27,7 @@ export { SpanStatusCode, ValueType } from '@opentelemetry/api';
27
27
  // run originalMethod wrapped in an active span
28
28
  // "active" means the span will be alive for the duration of the function execution
29
29
  // and if any other spans are started during the execution of originalMethod, they will be children of this span
30
- // behind the scenes this uses AsyncLocalStorage https://nodejs.org/dist/latest-v18.x/docs/api/async_context.html
30
+ // behind the scenes this uses AsyncLocalStorage https://nodejs.org/dist/latest-v22.x/docs/api/async_context.html
31
31
  return this.tracer.startActiveSpan(name, async (span)=>{
32
32
  span.setAttributes(currentAttrs ?? {});
33
33
  try {
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { Writable } from 'stream';
3
2
  /**
4
3
  * Return a function that knows how to convert the "time" field value on a
@@ -1 +1 @@
1
- {"version":3,"file":"otel-pino-stream.d.ts","sourceRoot":"","sources":["../../src/vendor/otel-pino-stream.ts"],"names":[],"mappings":";AAoBA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AA8ElC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,WAI5C,MAAM,uBAIN,MAAM,aAOvB;AAED,UAAU,qBAAqB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,GAAG,CAAC;IACZ,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC;CAC/C;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAC;IAChB,OAAO,CAAC,sBAAsB,CAAC;gBAEnB,OAAO,EAAE,qBAAqB;IAmBjC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;CAqGjE;AAMD,MAAM,CAAC,OAAO,WAAW,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAMvE"}
1
+ {"version":3,"file":"otel-pino-stream.d.ts","sourceRoot":"","sources":["../../src/vendor/otel-pino-stream.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AA2ElC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,WAI5C,MAAM,uBAIN,MAAM,aAOvB;AAED,UAAU,qBAAqB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,GAAG,CAAC;IACZ,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC;CAC/C;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAC;IAChB,OAAO,CAAC,sBAAsB,CAAC;gBAEnB,OAAO,EAAE,qBAAqB;IAmBjC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;CAqGjE;AAMD,MAAM,CAAC,OAAO,WAAW,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAMvE"}
@@ -20,7 +20,7 @@ import { millisToHrTime } from '@opentelemetry/core';
20
20
  import { Writable } from 'stream';
21
21
  import { registerOtelLoggerProvider } from '../otel_logger_provider.js';
22
22
  import { getOtelResource } from '../otel_resource.js';
23
- /* eslint-disable @typescript-eslint/ban-types */ /* eslint-disable camelcase */ // This block is a copy (modulo code style and TypeScript types) of the Pino
23
+ // This block is a copy (modulo code style and TypeScript types) of the Pino
24
24
  // code that defines log level value and names. This file is part of
25
25
  // *instrumenting* Pino, so we want to avoid a dependency on the library.
26
26
  const DEFAULT_LEVELS = {
@@ -141,7 +141,7 @@ function severityNumberFromAztecPinoLevel(lvl) {
141
141
  /* istanbul ignore if */ if (!s) {
142
142
  return;
143
143
  }
144
- // Parse, and handle edge cases similar to how `pino-abtract-transport` does:
144
+ // Parse, and handle edge cases similar to how `pino-abstract-transport` does:
145
145
  // https://github.com/pinojs/pino-abstract-transport/blob/v1.2.0/index.js#L28-L45
146
146
  // - Emitting an 'unknown' event on parse error mimicks pino-abstract-transport.
147
147
  let recObj;
@@ -7,7 +7,7 @@ import type { Logger } from '@aztec/foundation/log';
7
7
  * @param log - Optional logger for logging attempts.
8
8
  * @returns A fetch function.
9
9
  */
10
- export declare function makeTracedFetch(retries: number[], defaultNoRetry: boolean, fetch?: typeof defaultFetch, log?: Logger): (host: string, rpcMethod: string, body: any, useApiEndpoints: boolean, extraHeaders?: Record<string, string>, noRetry?: boolean) => Promise<{
10
+ export declare function makeTracedFetch(retries: number[], defaultNoRetry: boolean, fetch?: typeof defaultFetch, log?: Logger): (host: string, body: unknown, extraHeaders?: Record<string, string>, noRetry?: boolean) => Promise<{
11
11
  response: any;
12
12
  headers: {
13
13
  get: (header: string) => string | null | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/wrappers/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAQpD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,sBAAe,EAAE,GAAG,CAAC,EAAE,MAAM,UAEpG,MAAM,aACD,MAAM,QACX,GAAG,mBACQ,OAAO,iBACV,OAAO,MAAM,EAAE,MAAM,CAAC,YAC1B,OAAO;;;;;GA4BpB"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/wrappers/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAQpD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,sBAAe,EAAE,GAAG,CAAC,EAAE,MAAM,IACpG,MAAM,MAAM,EAAE,MAAM,OAAO,EAAE,eAAc,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAAE,UAAU,OAAO;;;;;GA2BlG"}
@@ -10,21 +10,23 @@ import { ATTR_JSONRPC_METHOD, ATTR_JSONRPC_REQUEST_ID } from '../vendor/attribut
10
10
  * @param log - Optional logger for logging attempts.
11
11
  * @returns A fetch function.
12
12
  */ export function makeTracedFetch(retries, defaultNoRetry, fetch = defaultFetch, log) {
13
- return (host, rpcMethod, body, useApiEndpoints, extraHeaders = {}, noRetry)=>{
13
+ return (host, body, extraHeaders = {}, noRetry)=>{
14
14
  const telemetry = getTelemetryClient();
15
- return telemetry.getTracer('fetch').startActiveSpan(`JsonRpcClient.${rpcMethod}`, {
15
+ return telemetry.getTracer('fetch').startActiveSpan(`JsonRpcClient`, {
16
16
  kind: SpanKind.CLIENT
17
17
  }, async (span)=>{
18
18
  try {
19
- if (body && typeof body.id === 'number') {
19
+ if (body && typeof body === 'object' && 'id' in body && typeof body.id === 'number') {
20
20
  span.setAttribute(ATTR_JSONRPC_REQUEST_ID, body.id);
21
21
  }
22
- span.setAttribute(ATTR_JSONRPC_METHOD, rpcMethod);
22
+ if (body && typeof body === 'object' && 'method' in body && typeof body.method === 'string') {
23
+ span.setAttribute(ATTR_JSONRPC_METHOD, body.method);
24
+ }
23
25
  const headers = {
24
26
  ...extraHeaders
25
27
  };
26
28
  propagation.inject(context.active(), headers);
27
- return await retry(()=>fetch(host, rpcMethod, body, useApiEndpoints, headers, noRetry ?? defaultNoRetry), `JsonRpcClient request ${rpcMethod} to ${host}`, makeBackoff(retries), log, false);
29
+ return await retry(()=>fetch(host, body, headers, noRetry ?? defaultNoRetry), `JsonRpcClient request to ${host}`, makeBackoff(retries), log, false);
28
30
  } catch (err) {
29
31
  span.setStatus({
30
32
  code: SpanStatusCode.ERROR,
package/package.json CHANGED
@@ -16,7 +16,7 @@
16
16
  "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
17
17
  },
18
18
  "engines": {
19
- "node": ">=18"
19
+ "node": ">=20.10"
20
20
  },
21
21
  "files": [
22
22
  "dest",
@@ -24,8 +24,8 @@
24
24
  "!*.test.*"
25
25
  ],
26
26
  "dependencies": {
27
- "@aztec/foundation": "0.86.0",
28
- "@aztec/stdlib": "0.86.0",
27
+ "@aztec/foundation": "0.87.0",
28
+ "@aztec/stdlib": "0.87.0",
29
29
  "@opentelemetry/api": "^1.9.0",
30
30
  "@opentelemetry/api-logs": "^0.55.0",
31
31
  "@opentelemetry/core": "^1.28.0",
@@ -49,7 +49,7 @@
49
49
  "@types/koa": "^2.15.0",
50
50
  "jest": "^29.5.0",
51
51
  "ts-node": "^10.9.1",
52
- "typescript": "^5.0.4"
52
+ "typescript": "^5.3.3"
53
53
  },
54
54
  "jest": {
55
55
  "extensionsToTreatAsEsm": [
@@ -84,5 +84,5 @@
84
84
  "../../foundation/src/jest/setup.mjs"
85
85
  ]
86
86
  },
87
- "version": "0.86.0"
87
+ "version": "0.87.0"
88
88
  }
package/src/bench.ts CHANGED
@@ -76,23 +76,23 @@ class InMemoryPlainMeter implements Meter {
76
76
  this.metrics.forEach(metric => metric.clear());
77
77
  }
78
78
 
79
- createGauge(name: MetricsType, options?: MetricOptions | undefined): Gauge {
79
+ createGauge(name: MetricsType, options?: MetricOptions): Gauge {
80
80
  return this.createMetric('gauge', name, options);
81
81
  }
82
82
 
83
- createObservableGauge(name: MetricsType, options?: MetricOptions | undefined): ObservableGauge {
83
+ createObservableGauge(name: MetricsType, options?: MetricOptions): ObservableGauge {
84
84
  return this.createMetric('gauge', name, options);
85
85
  }
86
86
 
87
- createHistogram(name: MetricsType, options?: MetricOptions | undefined): Histogram {
87
+ createHistogram(name: MetricsType, options?: MetricOptions): Histogram {
88
88
  return this.createMetric('histogram', name, options);
89
89
  }
90
90
 
91
- createUpDownCounter(name: MetricsType, options?: MetricOptions | undefined): UpDownCounter {
91
+ createUpDownCounter(name: MetricsType, options?: MetricOptions): UpDownCounter {
92
92
  return this.createMetric('counter', name, options);
93
93
  }
94
94
 
95
- createObservableUpDownCounter(name: MetricsType, options?: MetricOptions | undefined): ObservableUpDownCounter {
95
+ createObservableUpDownCounter(name: MetricsType, options?: MetricOptions): ObservableUpDownCounter {
96
96
  return this.createMetric('counter', name, options);
97
97
  }
98
98
 
@@ -7,19 +7,34 @@ import {
7
7
  ValueType,
8
8
  } from './telemetry.js';
9
9
 
10
- export type LmdbStatsCallback = () => Promise<{ mappingSize: number; numItems: number; actualSize: number }>;
10
+ export type LmdbStatsCallback = () => Promise<{
11
+ mappingSize: number;
12
+ physicalFileSize: number;
13
+ numItems: number;
14
+ actualSize: number;
15
+ }>;
11
16
 
12
17
  export class LmdbMetrics {
13
18
  private dbMapSize: ObservableGauge;
19
+ private dbPhysicalFileSize: ObservableGauge;
14
20
  private dbUsedSize: ObservableGauge;
15
21
  private dbNumItems: ObservableGauge;
16
22
 
17
- constructor(meter: Meter, private attributes?: AttributesType, private getStats?: LmdbStatsCallback) {
23
+ constructor(
24
+ meter: Meter,
25
+ private attributes?: AttributesType,
26
+ private getStats?: LmdbStatsCallback,
27
+ ) {
18
28
  this.dbMapSize = meter.createObservableGauge(Metrics.DB_MAP_SIZE, {
19
29
  description: 'LMDB Map Size',
20
30
  valueType: ValueType.INT,
21
31
  unit: 'By',
22
32
  });
33
+ this.dbPhysicalFileSize = meter.createObservableGauge(Metrics.DB_PHYSICAL_FILE_SIZE, {
34
+ description: 'LMDB Physical File Size',
35
+ valueType: ValueType.INT,
36
+ unit: 'By',
37
+ });
23
38
  this.dbUsedSize = meter.createObservableGauge(Metrics.DB_USED_SIZE, {
24
39
  description: 'LMDB Used Size',
25
40
  valueType: ValueType.INT,
@@ -30,7 +45,12 @@ export class LmdbMetrics {
30
45
  valueType: ValueType.INT,
31
46
  });
32
47
 
33
- meter.addBatchObservableCallback(this.recordDBMetrics, [this.dbMapSize, this.dbUsedSize, this.dbNumItems]);
48
+ meter.addBatchObservableCallback(this.recordDBMetrics, [
49
+ this.dbMapSize,
50
+ this.dbPhysicalFileSize,
51
+ this.dbUsedSize,
52
+ this.dbNumItems,
53
+ ]);
34
54
  }
35
55
 
36
56
  private recordDBMetrics = async (observable: BatchObservableResult) => {
@@ -39,6 +59,7 @@ export class LmdbMetrics {
39
59
  }
40
60
  const metrics = await this.getStats();
41
61
  observable.observe(this.dbMapSize, metrics.mappingSize, this.attributes);
62
+ observable.observe(this.dbPhysicalFileSize, metrics.physicalFileSize, this.attributes);
42
63
  observable.observe(this.dbNumItems, metrics.numItems, this.attributes);
43
64
  observable.observe(this.dbUsedSize, metrics.actualSize, this.attributes);
44
65
  };
package/src/metrics.ts CHANGED
@@ -36,6 +36,7 @@ export const MEMPOOL_TX_COUNT = 'aztec.mempool.tx_count';
36
36
  export const MEMPOOL_TX_SIZE = 'aztec.mempool.tx_size';
37
37
  export const DB_NUM_ITEMS = 'aztec.db.num_items';
38
38
  export const DB_MAP_SIZE = 'aztec.db.map_size';
39
+ export const DB_PHYSICAL_FILE_SIZE = 'aztec.db.physical_file_size';
39
40
  export const DB_USED_SIZE = 'aztec.db.used_size';
40
41
 
41
42
  export const MEMPOOL_ATTESTATIONS_COUNT = 'aztec.mempool.attestations_count';
@@ -177,3 +178,8 @@ export const NODEJS_EVENT_LOOP_DELAY_P99 = 'nodejs.eventloop.delay.p99';
177
178
 
178
179
  export const NODEJS_EVENT_LOOP_UTILIZATION = 'nodejs.eventloop.utilization';
179
180
  export const NODEJS_EVENT_LOOP_TIME = 'nodejs.eventloop.time';
181
+
182
+ export const NODEJS_MEMORY_HEAP_USAGE = 'nodejs.memory.v8_heap.usage';
183
+ export const NODEJS_MEMORY_HEAP_TOTAL = 'nodejs.memory.v8_heap.total';
184
+ export const NODEJS_MEMORY_NATIVE_USAGE = 'nodejs.memory.native.usage';
185
+ export const NODEJS_MEMORY_BUFFER_USAGE = 'nodejs.memory.array_buffer.usage';
@@ -13,7 +13,7 @@ import {
13
13
  /**
14
14
  * Detector for custom Aztec attributes
15
15
  */
16
- export class EventLoopMonitor {
16
+ export class NodejsMetricsMonitor {
17
17
  private eventLoopDelayGauges: {
18
18
  min: ObservableGauge;
19
19
  max: ObservableGauge;
@@ -24,6 +24,10 @@ export class EventLoopMonitor {
24
24
  p99: ObservableGauge;
25
25
  };
26
26
 
27
+ // skip `rss` because that's already tracked by @opentelemetry/host-metrics
28
+ // description of each field here https://nodejs.org/api/process.html#processmemoryusage
29
+ private memoryGauges: Record<Exclude<keyof NodeJS.MemoryUsage, 'rss'>, ObservableGauge>;
30
+
27
31
  private eventLoopUilization: ObservableGauge;
28
32
  private eventLoopTime: UpDownCounter;
29
33
 
@@ -62,6 +66,25 @@ export class EventLoopMonitor {
62
66
  });
63
67
 
64
68
  this.eventLoopDelay = monitorEventLoopDelay();
69
+
70
+ this.memoryGauges = {
71
+ heapUsed: meter.createObservableGauge(Metrics.NODEJS_MEMORY_HEAP_USAGE, {
72
+ unit: 'By',
73
+ description: 'Memory used by the V8 heap',
74
+ }),
75
+ heapTotal: meter.createObservableGauge(Metrics.NODEJS_MEMORY_HEAP_TOTAL, {
76
+ unit: 'By',
77
+ description: 'The max size the V8 heap can grow to',
78
+ }),
79
+ arrayBuffers: meter.createObservableGauge(Metrics.NODEJS_MEMORY_BUFFER_USAGE, {
80
+ unit: 'By',
81
+ description: 'Memory allocated for buffers (includes native memory used)',
82
+ }),
83
+ external: meter.createObservableGauge(Metrics.NODEJS_MEMORY_NATIVE_USAGE, {
84
+ unit: 'By',
85
+ description: 'Memory allocated for native C++ objects',
86
+ }),
87
+ };
65
88
  }
66
89
 
67
90
  start(): void {
@@ -74,6 +97,7 @@ export class EventLoopMonitor {
74
97
  this.meter.addBatchObservableCallback(this.measure, [
75
98
  this.eventLoopUilization,
76
99
  ...Object.values(this.eventLoopDelayGauges),
100
+ ...Object.values(this.memoryGauges),
77
101
  ]);
78
102
  }
79
103
 
@@ -84,6 +108,7 @@ export class EventLoopMonitor {
84
108
  this.meter.removeBatchObservableCallback(this.measure, [
85
109
  this.eventLoopUilization,
86
110
  ...Object.values(this.eventLoopDelayGauges),
111
+ ...Object.values(this.memoryGauges),
87
112
  ]);
88
113
  this.eventLoopDelay.disable();
89
114
  this.eventLoopDelay.reset();
@@ -91,6 +116,20 @@ export class EventLoopMonitor {
91
116
  }
92
117
 
93
118
  private measure = (obs: BatchObservableResult): void => {
119
+ this.measureMemoryUsage(obs);
120
+ this.measureEventLoopDelay(obs);
121
+ };
122
+
123
+ private measureMemoryUsage = (observer: BatchObservableResult) => {
124
+ const mem = process.memoryUsage();
125
+
126
+ observer.observe(this.memoryGauges.heapUsed, mem.heapUsed);
127
+ observer.observe(this.memoryGauges.heapTotal, mem.heapTotal);
128
+ observer.observe(this.memoryGauges.arrayBuffers, mem.arrayBuffers);
129
+ observer.observe(this.memoryGauges.external, mem.external);
130
+ };
131
+
132
+ private measureEventLoopDelay = (obs: BatchObservableResult): void => {
94
133
  const newELU = performance.eventLoopUtilization();
95
134
  const delta = performance.eventLoopUtilization(newELU, this.lastELU);
96
135
  this.lastELU = newELU;
package/src/noop.ts CHANGED
@@ -32,7 +32,7 @@ export class NoopTracer implements Tracer {
32
32
  return new NoopSpan();
33
33
  }
34
34
 
35
- startActiveSpan<F extends (...args: any[]) => any>(_name: string, ...args: (unknown | F)[]): ReturnType<F> {
35
+ startActiveSpan<F extends (...args: any[]) => any>(_name: string, ...args: unknown[]): ReturnType<F> {
36
36
  // there are three different signatures for startActiveSpan, grab the function, we don't care about the rest
37
37
  const fn = args.find(arg => typeof arg === 'function') as F;
38
38
  return fn(new NoopSpan());
package/src/otel.ts CHANGED
@@ -28,7 +28,7 @@ import { BatchSpanProcessor, NodeTracerProvider } from '@opentelemetry/sdk-trace
28
28
  import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
29
29
 
30
30
  import type { TelemetryClientConfig } from './config.js';
31
- import { EventLoopMonitor } from './event_loop_monitor.js';
31
+ import { NodejsMetricsMonitor } from './nodejs_metrics_monitor.js';
32
32
  import { OtelFilterMetricExporter } from './otel_filter_metric_exporter.js';
33
33
  import { registerOtelLoggerProvider } from './otel_logger_provider.js';
34
34
  import { getOtelResource } from './otel_resource.js';
@@ -38,7 +38,7 @@ export type OpenTelemetryClientFactory = (resource: IResource, log: Logger) => O
38
38
 
39
39
  export class OpenTelemetryClient implements TelemetryClient {
40
40
  hostMetrics: HostMetrics | undefined;
41
- eventLoopMonitor: EventLoopMonitor | undefined;
41
+ nodejsMetricsMonitor: NodejsMetricsMonitor | undefined;
42
42
  private meters: Map<string, Meter> = new Map<string, Meter>();
43
43
  private tracers: Map<string, Tracer> = new Map<string, Tracer>();
44
44
 
@@ -91,12 +91,12 @@ export class OpenTelemetryClient implements TelemetryClient {
91
91
  meterProvider: this.meterProvider,
92
92
  });
93
93
 
94
- this.eventLoopMonitor = new EventLoopMonitor(
94
+ this.nodejsMetricsMonitor = new NodejsMetricsMonitor(
95
95
  this.meterProvider.getMeter(this.resource.attributes[ATTR_SERVICE_NAME] as string),
96
96
  );
97
97
 
98
98
  this.hostMetrics.start();
99
- this.eventLoopMonitor.start();
99
+ this.nodejsMetricsMonitor.start();
100
100
  }
101
101
 
102
102
  public isEnabled() {
@@ -112,7 +112,7 @@ export class OpenTelemetryClient implements TelemetryClient {
112
112
  }
113
113
 
114
114
  public async stop() {
115
- this.eventLoopMonitor?.stop();
115
+ this.nodejsMetricsMonitor?.stop();
116
116
 
117
117
  const flushAndShutdown = async (provider?: { forceFlush: () => Promise<void>; shutdown: () => Promise<void> }) => {
118
118
  if (!provider) {
@@ -2,7 +2,10 @@ import type { ExportResult } from '@opentelemetry/core';
2
2
  import type { MetricData, PushMetricExporter, ResourceMetrics } from '@opentelemetry/sdk-metrics';
3
3
 
4
4
  export class OtelFilterMetricExporter implements PushMetricExporter {
5
- constructor(private readonly exporter: PushMetricExporter, private readonly excludeMetricPrefixes: string[]) {
5
+ constructor(
6
+ private readonly exporter: PushMetricExporter,
7
+ private readonly excludeMetricPrefixes: string[],
8
+ ) {
6
9
  if (exporter.selectAggregation) {
7
10
  (this as PushMetricExporter).selectAggregation = exporter.selectAggregation.bind(exporter);
8
11
  }
package/src/telemetry.ts CHANGED
@@ -28,7 +28,7 @@ type AttributeNames = ValuesOf<typeof Attributes>;
28
28
 
29
29
  /**
30
30
  * This is a set of attributes that could lead to high cardinality in the metrics.
31
- * If you find youself wanting to capture this data in a metric consider if it makes sense to capture
31
+ * If you find yourself wanting to capture this data in a metric consider if it makes sense to capture
32
32
  * as the metric value instead of an attribute or consider logging instead.
33
33
  *
34
34
  * Think twice before removing an attribute from this list.
@@ -193,7 +193,7 @@ export function trackSpan<T extends Traceable, F extends (...args: any[]) => any
193
193
  // run originalMethod wrapped in an active span
194
194
  // "active" means the span will be alive for the duration of the function execution
195
195
  // and if any other spans are started during the execution of originalMethod, they will be children of this span
196
- // behind the scenes this uses AsyncLocalStorage https://nodejs.org/dist/latest-v18.x/docs/api/async_context.html
196
+ // behind the scenes this uses AsyncLocalStorage https://nodejs.org/dist/latest-v22.x/docs/api/async_context.html
197
197
  return this.tracer.startActiveSpan(name, async (span: Span) => {
198
198
  span.setAttributes(currentAttrs ?? {});
199
199
 
@@ -23,9 +23,6 @@ import { Writable } from 'stream';
23
23
  import { registerOtelLoggerProvider } from '../otel_logger_provider.js';
24
24
  import { getOtelResource } from '../otel_resource.js';
25
25
 
26
- /* eslint-disable @typescript-eslint/ban-types */
27
- /* eslint-disable camelcase */
28
-
29
26
  // This block is a copy (modulo code style and TypeScript types) of the Pino
30
27
  // code that defines log level value and names. This file is part of
31
28
  // *instrumenting* Pino, so we want to avoid a dependency on the library.
@@ -173,7 +170,7 @@ export class OTelPinoStream extends Writable {
173
170
  return;
174
171
  }
175
172
 
176
- // Parse, and handle edge cases similar to how `pino-abtract-transport` does:
173
+ // Parse, and handle edge cases similar to how `pino-abstract-transport` does:
177
174
  // https://github.com/pinojs/pino-abstract-transport/blob/v1.2.0/index.js#L28-L45
178
175
  // - Emitting an 'unknown' event on parse error mimicks pino-abstract-transport.
179
176
  let recObj;
@@ -15,38 +15,31 @@ import { ATTR_JSONRPC_METHOD, ATTR_JSONRPC_REQUEST_ID } from '../vendor/attribut
15
15
  * @returns A fetch function.
16
16
  */
17
17
  export function makeTracedFetch(retries: number[], defaultNoRetry: boolean, fetch = defaultFetch, log?: Logger) {
18
- return (
19
- host: string,
20
- rpcMethod: string,
21
- body: any,
22
- useApiEndpoints: boolean,
23
- extraHeaders: Record<string, string> = {},
24
- noRetry?: boolean,
25
- ) => {
18
+ return (host: string, body: unknown, extraHeaders: Record<string, string> = {}, noRetry?: boolean) => {
26
19
  const telemetry = getTelemetryClient();
27
- return telemetry
28
- .getTracer('fetch')
29
- .startActiveSpan(`JsonRpcClient.${rpcMethod}`, { kind: SpanKind.CLIENT }, async span => {
30
- try {
31
- if (body && typeof body.id === 'number') {
32
- span.setAttribute(ATTR_JSONRPC_REQUEST_ID, body.id);
33
- }
34
- span.setAttribute(ATTR_JSONRPC_METHOD, rpcMethod);
35
- const headers = { ...extraHeaders };
36
- propagation.inject(context.active(), headers);
37
- return await retry(
38
- () => fetch(host, rpcMethod, body, useApiEndpoints, headers, noRetry ?? defaultNoRetry),
39
- `JsonRpcClient request ${rpcMethod} to ${host}`,
40
- makeBackoff(retries),
41
- log,
42
- false,
43
- );
44
- } catch (err: any) {
45
- span.setStatus({ code: SpanStatusCode.ERROR, message: err?.message ?? String(err) });
46
- throw err;
47
- } finally {
48
- span.end();
20
+ return telemetry.getTracer('fetch').startActiveSpan(`JsonRpcClient`, { kind: SpanKind.CLIENT }, async span => {
21
+ try {
22
+ if (body && typeof body === 'object' && 'id' in body && typeof body.id === 'number') {
23
+ span.setAttribute(ATTR_JSONRPC_REQUEST_ID, body.id);
49
24
  }
50
- });
25
+ if (body && typeof body === 'object' && 'method' in body && typeof body.method === 'string') {
26
+ span.setAttribute(ATTR_JSONRPC_METHOD, body.method);
27
+ }
28
+ const headers = { ...extraHeaders };
29
+ propagation.inject(context.active(), headers);
30
+ return await retry(
31
+ () => fetch(host, body, headers, noRetry ?? defaultNoRetry),
32
+ `JsonRpcClient request to ${host}`,
33
+ makeBackoff(retries),
34
+ log,
35
+ false,
36
+ );
37
+ } catch (err: any) {
38
+ span.setStatus({ code: SpanStatusCode.ERROR, message: err?.message ?? String(err) });
39
+ throw err;
40
+ } finally {
41
+ span.end();
42
+ }
43
+ });
51
44
  };
52
45
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"event_loop_monitor.d.ts","sourceRoot":"","sources":["../src/event_loop_monitor.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,KAAK,EAIX,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,qBAAa,gBAAgB;IAmBf,OAAO,CAAC,KAAK;IAlBzB,OAAO,CAAC,oBAAoB,CAQ1B;IAEF,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,cAAc,CAAoB;gBAEtB,KAAK,EAAE,KAAK;IAgChC,KAAK,IAAI,IAAI;IAab,IAAI,IAAI,IAAI;IAaZ,OAAO,CAAC,OAAO,CAyBb;CACH"}