@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.
- package/dest/lmdb_metrics.d.ts +4 -2
- package/dest/lmdb_metrics.d.ts.map +1 -1
- package/dest/lmdb_metrics.js +8 -0
- package/dest/metrics.d.ts +5 -0
- package/dest/metrics.d.ts.map +1 -1
- package/dest/metrics.js +5 -0
- package/dest/{event_loop_monitor.d.ts → nodejs_metrics_monitor.d.ts} +5 -2
- package/dest/nodejs_metrics_monitor.d.ts.map +1 -0
- package/dest/{event_loop_monitor.js → nodejs_metrics_monitor.js} +39 -3
- package/dest/noop.d.ts +1 -1
- package/dest/noop.d.ts.map +1 -1
- package/dest/otel.d.ts +2 -2
- package/dest/otel.d.ts.map +1 -1
- package/dest/otel.js +5 -5
- package/dest/otel_filter_metric_exporter.d.ts.map +1 -1
- package/dest/telemetry.d.ts +1 -1
- package/dest/telemetry.js +1 -1
- package/dest/vendor/otel-pino-stream.d.ts +0 -1
- package/dest/vendor/otel-pino-stream.d.ts.map +1 -1
- package/dest/vendor/otel-pino-stream.js +2 -2
- package/dest/wrappers/fetch.d.ts +1 -1
- package/dest/wrappers/fetch.d.ts.map +1 -1
- package/dest/wrappers/fetch.js +7 -5
- package/package.json +5 -5
- package/src/bench.ts +5 -5
- package/src/lmdb_metrics.ts +24 -3
- package/src/metrics.ts +6 -0
- package/src/{event_loop_monitor.ts → nodejs_metrics_monitor.ts} +40 -1
- package/src/noop.ts +1 -1
- package/src/otel.ts +5 -5
- package/src/otel_filter_metric_exporter.ts +4 -1
- package/src/telemetry.ts +2 -2
- package/src/vendor/otel-pino-stream.ts +1 -4
- package/src/wrappers/fetch.ts +24 -31
- package/dest/event_loop_monitor.d.ts.map +0 -1
package/dest/lmdb_metrics.d.ts
CHANGED
|
@@ -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?:
|
|
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,
|
|
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"}
|
package/dest/lmdb_metrics.js
CHANGED
|
@@ -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
|
package/dest/metrics.d.ts.map
CHANGED
|
@@ -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":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,wBAAwB,wCAAwC,CAAC;AAC9E,eAAO,MAAM,2BAA2B,2CAA2C,CAAC;AACpF,eAAO,MAAM,+BAA+B,0CAA0C,CAAC;AACvF,eAAO,MAAM,mBAAmB,8BAA8B,CAAC;AAE/D,eAAO,MAAM,oCAAoC,gDAAgD,CAAC;AAClG,eAAO,MAAM,qCAAqC,+CAA+C,CAAC;AAClG,eAAO,MAAM,4BAA4B,uCAAuC,CAAC;AAEjF,8CAA8C;AAC9C,eAAO,MAAM,2BAA2B,sCAAsC,CAAC;AAC/E,eAAO,MAAM,6BAA6B,wCAAwC,CAAC;AACnF,eAAO,MAAM,8BAA8B,yCAAyC,CAAC;AAErF,eAAO,MAAM,4BAA4B,8CAA8C,CAAC;AACxF,eAAO,MAAM,8BAA8B,gDAAgD,CAAC;AAC5F,eAAO,MAAM,+BAA+B,iDAAiD,CAAC;AAE9F,eAAO,MAAM,wBAAwB,mCAAmC,CAAC;AACzE,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAC7E,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAE7E,eAAO,MAAM,2BAA2B,sCAAsC,CAAC;AAC/E,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAC7D,eAAO,MAAM,YAAY,uBAAuB,CAAC;AAEjD,eAAO,MAAM,gBAAgB,2BAA2B,CAAC;AACzD,eAAO,MAAM,eAAe,0BAA0B,CAAC;AACvD,eAAO,MAAM,YAAY,uBAAuB,CAAC;AACjD,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAC/C,eAAO,MAAM,qBAAqB,gCAAgC,CAAC;AACnE,eAAO,MAAM,YAAY,uBAAuB,CAAC;AAEjD,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAC7E,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAE3E,eAAO,MAAM,sBAAsB,iCAAiC,CAAC;AACrE,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAC3E,eAAO,MAAM,wBAAwB,mCAAmC,CAAC;AACzE,eAAO,MAAM,qBAAqB,gCAAgC,CAAC;AACnE,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAC3D,eAAO,MAAM,2BAA2B,sCAAsC,CAAC;AAC/E,eAAO,MAAM,2BAA2B,sCAAsC,CAAC;AAC/E,eAAO,MAAM,oBAAoB,+BAA+B,CAAC;AAEjE,eAAO,MAAM,wBAAwB,mCAAmC,CAAC;AACzE,eAAO,MAAM,qBAAqB,gCAAgC,CAAC;AAEnE,eAAO,MAAM,0CAA0C,qDAAqD,CAAC;AAC7G,eAAO,MAAM,8BAA8B,yCAAyC,CAAC;AACrF,eAAO,MAAM,qCAAqC,gDAAgD,CAAC;AACnG,eAAO,MAAM,qBAAqB,gCAAgC,CAAC;AACnE,eAAO,MAAM,uBAAuB,kCAAkC,CAAC;AACvE,eAAO,MAAM,8BAA8B,yCAAyC,CAAC;AACrF,eAAO,MAAM,4BAA4B,uCAAuC,CAAC;AACjF,eAAO,MAAM,sCAAsC,iDAAiD,CAAC;AACrG,eAAO,MAAM,oCAAoC,0DAA0D,CAAC;AAC5G,eAAO,MAAM,+BAA+B,0CAA0C,CAAC;AACvF,eAAO,MAAM,oBAAoB,qCAAqC,CAAC;AACvE,eAAO,MAAM,2BAA2B,sCAAsC,CAAC;AAC/E,eAAO,MAAM,2BAA2B,sCAAsC,CAAC;AAE/E,eAAO,MAAM,sBAAsB,iCAAiC,CAAC;AACrE,eAAO,MAAM,qBAAqB,gCAAgC,CAAC;AACnE,eAAO,MAAM,wBAAwB,mCAAmC,CAAC;AACzE,eAAO,MAAM,mBAAmB,8BAA8B,CAAC;AAC/D,eAAO,MAAM,6BAA6B,wCAAwC,CAAC;AACnF,eAAO,MAAM,4BAA4B,uCAAuC,CAAC;AACjF,eAAO,MAAM,iCAAiC,4CAA4C,CAAC;AAC3F,eAAO,MAAM,iCAAiC,4CAA4C,CAAC;AAC3F,eAAO,MAAM,uBAAuB,kCAAkC,CAAC;AACvE,eAAO,MAAM,kCAAkC,6CAA6C,CAAC;AAC7F,eAAO,MAAM,4BAA4B,uCAAuC,CAAC;AACjF,eAAO,MAAM,4BAA4B,uCAAuC,CAAC;AACjF,eAAO,MAAM,oBAAoB,+BAA+B,CAAC;AACjE,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAE3E,eAAO,MAAM,eAAe,0BAA0B,CAAC;AACvD,eAAO,MAAM,cAAc,qBAAqB,CAAC;AACjD,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AACrD,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAC7E,eAAO,MAAM,8BAA8B,yCAAyC,CAAC;AACrF,eAAO,MAAM,uBAAuB,kCAAkC,CAAC;AAEvE,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAC7E,eAAO,MAAM,8BAA8B,yCAAyC,CAAC;AACrF,eAAO,MAAM,qCAAqC,gDAAgD,CAAC;AACnG,eAAO,MAAM,oCAAoC,+CAA+C,CAAC;AAEjG,eAAO,MAAM,4BAA4B,uCAAuC,CAAC;AACjF,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAC3E,eAAO,MAAM,+BAA+B,0CAA0C,CAAC;AACvF,eAAO,MAAM,uBAAuB,kCAAkC,CAAC;AACvE,eAAO,MAAM,+BAA+B,0CAA0C,CAAC;AACvF,eAAO,MAAM,4BAA4B,uCAAuC,CAAC;AACjF,eAAO,MAAM,qCAAqC,gDAAgD,CAAC;AACnG,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAC7E,eAAO,MAAM,oCAAoC,+CAA+C,CAAC;AACjG,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAC3E,eAAO,MAAM,+BAA+B,0CAA0C,CAAC;AAEvF,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,eAAO,MAAM,gCAAgC,2CAA2C,CAAC;AACzF,eAAO,MAAM,mCAAmC,8CAA8C,CAAC;AAC/F,eAAO,MAAM,0CAA0C,qDAAqD,CAAC;AAC7G,eAAO,MAAM,oCAAoC,+CAA+C,CAAC;AACjG,eAAO,MAAM,6CAA6C,wDAAwD,CAAC;AACnH,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAC7E,eAAO,MAAM,yCAAyC,oDAAoD,CAAC;AAC3G,eAAO,MAAM,wCAAwC,mDAAmD,CAAC;AAEzG,eAAO,MAAM,gDAAgD,2DACH,CAAC;AAE3D,eAAO,MAAM,sBAAsB,iCAAiC,CAAC;AACrE,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAC7D,eAAO,MAAM,wBAAwB,4CAA4C,CAAC;AAClF,eAAO,MAAM,yBAAyB,0CAA0C,CAAC;AACjF,eAAO,MAAM,yBAAyB,0CAA0C,CAAC;AACjF,eAAO,MAAM,2BAA2B,4CAA4C,CAAC;AACrF,eAAO,MAAM,2BAA2B,4CAA4C,CAAC;AACrF,eAAO,MAAM,0BAA0B,2CAA2C,CAAC;AACnF,eAAO,MAAM,4BAA4B,6CAA6C,CAAC;AACvF,eAAO,MAAM,sBAAsB,iCAAiC,CAAC;AACrE,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAC7E,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAC7E,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAC3E,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAE7E,eAAO,MAAM,kBAAkB,mCAAmC,CAAC;AAEnE,eAAO,MAAM,8BAA8B,yCAAyC,CAAC;AACrF,eAAO,MAAM,wBAAwB,mCAAmC,CAAC;AACzE,eAAO,MAAM,sBAAsB,iCAAiC,CAAC;AACrE,eAAO,MAAM,4BAA4B,uCAAuC,CAAC;AACjF,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAC3E,eAAO,MAAM,6BAA6B,wCAAwC,CAAC;AAEnF,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAC3E,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAC3E,eAAO,MAAM,4BAA4B,uCAAuC,CAAC;AACjF,eAAO,MAAM,mBAAmB,8BAA8B,CAAC;AAC/D,eAAO,MAAM,uBAAuB,kCAAkC,CAAC;AACvE,eAAO,MAAM,4BAA4B,uCAAuC,CAAC;AACjF,eAAO,MAAM,qBAAqB,gCAAgC,CAAC;AACnE,eAAO,MAAM,8BAA8B,yCAAyC,CAAC;AACrF,eAAO,MAAM,4BAA4B,uCAAuC,CAAC;AACjF,eAAO,MAAM,wBAAwB,mCAAmC,CAAC;AACzE,eAAO,MAAM,wBAAwB,mCAAmC,CAAC;AACzE,eAAO,MAAM,wBAAwB,mCAAmC,CAAC;AACzE,eAAO,MAAM,wBAAwB,mCAAmC,CAAC;AACzE,eAAO,MAAM,gCAAgC,2CAA2C,CAAC;AAEzF,eAAO,MAAM,oBAAoB,+BAA+B,CAAC;AAEjE,eAAO,MAAM,2BAA2B,sCAAsC,CAAC;AAC/E,eAAO,MAAM,kCAAkC,6CAA6C,CAAC;AAC7F,eAAO,MAAM,2BAA2B,sCAAsC,CAAC;AAC/E,eAAO,MAAM,kCAAkC,6CAA6C,CAAC;AAE7F,eAAO,MAAM,2BAA2B,+BAA+B,CAAC;AACxE,eAAO,MAAM,4BAA4B,gCAAgC,CAAC;AAC1E,eAAO,MAAM,2BAA2B,+BAA+B,CAAC;AACxE,eAAO,MAAM,8BAA8B,kCAAkC,CAAC;AAC9E,eAAO,MAAM,2BAA2B,+BAA+B,CAAC;AACxE,eAAO,MAAM,2BAA2B,+BAA+B,CAAC;AACxE,eAAO,MAAM,2BAA2B,+BAA+B,CAAC;AAExE,eAAO,MAAM,6BAA6B,iCAAiC,CAAC;AAC5E,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAE9D,eAAO,MAAM,wBAAwB,gCAAgC,CAAC;AACtE,eAAO,MAAM,wBAAwB,gCAAgC,CAAC;AACtE,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AACvE,eAAO,MAAM,0BAA0B,qCAAqC,CAAC"}
|
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
|
|
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=
|
|
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
|
|
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:
|
|
12
|
+
startActiveSpan<F extends (...args: any[]) => any>(_name: string, ...args: unknown[]): ReturnType<F>;
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=noop.d.ts.map
|
package/dest/noop.d.ts.map
CHANGED
|
@@ -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,
|
|
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 {
|
|
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
|
-
|
|
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);
|
package/dest/otel.d.ts.map
CHANGED
|
@@ -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,
|
|
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 {
|
|
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
|
-
|
|
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.
|
|
66
|
+
this.nodejsMetricsMonitor = new NodejsMetricsMonitor(this.meterProvider.getMeter(this.resource.attributes[ATTR_SERVICE_NAME]));
|
|
67
67
|
this.hostMetrics.start();
|
|
68
|
-
this.
|
|
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.
|
|
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;
|
|
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"}
|
package/dest/telemetry.d.ts
CHANGED
|
@@ -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
|
|
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-
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otel-pino-stream.d.ts","sourceRoot":"","sources":["../../src/vendor/otel-pino-stream.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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-
|
|
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;
|
package/dest/wrappers/fetch.d.ts
CHANGED
|
@@ -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,
|
|
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,
|
|
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"}
|
package/dest/wrappers/fetch.js
CHANGED
|
@@ -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,
|
|
13
|
+
return (host, body, extraHeaders = {}, noRetry)=>{
|
|
14
14
|
const telemetry = getTelemetryClient();
|
|
15
|
-
return telemetry.getTracer('fetch').startActiveSpan(`JsonRpcClient
|
|
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
|
-
|
|
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,
|
|
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": ">=
|
|
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.
|
|
28
|
-
"@aztec/stdlib": "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.
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
95
|
+
createObservableUpDownCounter(name: MetricsType, options?: MetricOptions): ObservableUpDownCounter {
|
|
96
96
|
return this.createMetric('counter', name, options);
|
|
97
97
|
}
|
|
98
98
|
|
package/src/lmdb_metrics.ts
CHANGED
|
@@ -7,19 +7,34 @@ import {
|
|
|
7
7
|
ValueType,
|
|
8
8
|
} from './telemetry.js';
|
|
9
9
|
|
|
10
|
-
export type LmdbStatsCallback = () => Promise<{
|
|
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(
|
|
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, [
|
|
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
|
|
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:
|
|
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 {
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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(
|
|
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
|
|
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-
|
|
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-
|
|
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;
|
package/src/wrappers/fetch.ts
CHANGED
|
@@ -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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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"}
|