@aztec/telemetry-client 4.0.0-nightly.20260107 → 4.0.0-nightly.20260110
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/bench.d.ts +3 -1
- package/dest/bench.d.ts.map +1 -1
- package/dest/bench.js +24 -14
- package/dest/l1_metrics.d.ts +2 -2
- package/dest/l1_metrics.d.ts.map +1 -1
- package/dest/l1_metrics.js +4 -20
- package/dest/lmdb_metrics.d.ts +2 -2
- package/dest/lmdb_metrics.d.ts.map +1 -1
- package/dest/lmdb_metrics.js +4 -20
- package/dest/metric-utils.d.ts +5 -0
- package/dest/metric-utils.d.ts.map +1 -0
- package/dest/metric-utils.js +7 -0
- package/dest/metrics.d.ts +246 -224
- package/dest/metrics.d.ts.map +1 -1
- package/dest/metrics.js +1237 -222
- package/dest/nodejs_metrics_monitor.d.ts +3 -5
- package/dest/nodejs_metrics_monitor.d.ts.map +1 -1
- package/dest/nodejs_metrics_monitor.js +14 -41
- package/dest/noop.d.ts +6 -3
- package/dest/noop.d.ts.map +1 -1
- package/dest/noop.js +32 -1
- package/dest/otel.d.ts +5 -3
- package/dest/otel.d.ts.map +1 -1
- package/dest/otel.js +51 -4
- package/dest/prom_otel_adapter.d.ts +1 -1
- package/dest/prom_otel_adapter.d.ts.map +1 -1
- package/dest/prom_otel_adapter.js +15 -7
- package/dest/telemetry.d.ts +35 -24
- package/dest/telemetry.d.ts.map +1 -1
- package/dest/telemetry.js +37 -21
- package/package.json +3 -3
- package/src/bench.ts +27 -15
- package/src/l1_metrics.ts +5 -20
- package/src/lmdb_metrics.ts +5 -26
- package/src/metric-utils.ts +12 -0
- package/src/metrics.ts +1289 -250
- package/src/nodejs_metrics_monitor.ts +16 -52
- package/src/noop.ts +61 -3
- package/src/otel.ts +76 -6
- package/src/prom_otel_adapter.ts +12 -18
- package/src/telemetry.ts +72 -47
package/dest/telemetry.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SpanStatusCode } from '@opentelemetry/api';
|
|
2
|
-
import { isPromise } from 'node:util/types';
|
|
3
2
|
import { getTelemetryClient } from './start.js';
|
|
3
|
+
export { toMetricOptions } from './metric-utils.js';
|
|
4
4
|
export { SpanStatusCode, ValueType } from '@opentelemetry/api';
|
|
5
5
|
/**
|
|
6
6
|
* Starts a new span whenever the decorated method is called.
|
|
@@ -89,35 +89,51 @@ export { SpanStatusCode, ValueType } from '@opentelemetry/api';
|
|
|
89
89
|
export function runInSpan(tracer, spanName, callback) {
|
|
90
90
|
return (...args)=>{
|
|
91
91
|
const actualTracer = typeof tracer === 'string' ? getTelemetryClient().getTracer(tracer) : tracer;
|
|
92
|
-
return actualTracer.startActiveSpan(spanName, (span)=>{
|
|
93
|
-
let deferSpanEnd = false;
|
|
92
|
+
return actualTracer.startActiveSpan(spanName, async (span)=>{
|
|
94
93
|
try {
|
|
95
|
-
const res = callback(span, ...args);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
code: SpanStatusCode.ERROR,
|
|
101
|
-
message: String(err)
|
|
102
|
-
});
|
|
103
|
-
throw err;
|
|
104
|
-
}).finally(()=>{
|
|
105
|
-
span.end();
|
|
106
|
-
});
|
|
107
|
-
} else {
|
|
108
|
-
return res;
|
|
109
|
-
}
|
|
94
|
+
const res = await callback(span, ...args);
|
|
95
|
+
span.setStatus({
|
|
96
|
+
code: SpanStatusCode.OK
|
|
97
|
+
});
|
|
98
|
+
return res;
|
|
110
99
|
} catch (err) {
|
|
111
100
|
span.setStatus({
|
|
112
101
|
code: SpanStatusCode.ERROR,
|
|
113
102
|
message: String(err)
|
|
114
103
|
});
|
|
104
|
+
if (typeof err === 'string' || err && err instanceof Error) {
|
|
105
|
+
span.recordException(err);
|
|
106
|
+
}
|
|
115
107
|
throw err;
|
|
116
108
|
} finally{
|
|
117
|
-
|
|
118
|
-
span.end();
|
|
119
|
-
}
|
|
109
|
+
span.end();
|
|
120
110
|
}
|
|
121
111
|
});
|
|
122
112
|
};
|
|
123
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Execute a callback within a span immediately (for one-off traced calls).
|
|
116
|
+
* Unlike runInSpan which returns a reusable function, this executes right away.
|
|
117
|
+
*/ export function execInSpan(tracer, spanName, callback) {
|
|
118
|
+
const actualTracer = typeof tracer === 'string' ? getTelemetryClient().getTracer(tracer) : tracer;
|
|
119
|
+
return actualTracer.startActiveSpan(spanName, async (span)=>{
|
|
120
|
+
try {
|
|
121
|
+
const res = await callback(span);
|
|
122
|
+
span.setStatus({
|
|
123
|
+
code: SpanStatusCode.OK
|
|
124
|
+
});
|
|
125
|
+
return res;
|
|
126
|
+
} catch (err) {
|
|
127
|
+
span.setStatus({
|
|
128
|
+
code: SpanStatusCode.ERROR,
|
|
129
|
+
message: String(err)
|
|
130
|
+
});
|
|
131
|
+
if (typeof err === 'string' || err && err instanceof Error) {
|
|
132
|
+
span.recordException(err);
|
|
133
|
+
}
|
|
134
|
+
throw err;
|
|
135
|
+
} finally{
|
|
136
|
+
span.end();
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/telemetry-client",
|
|
3
|
-
"version": "4.0.0-nightly.
|
|
3
|
+
"version": "4.0.0-nightly.20260110",
|
|
4
4
|
"inherits": [
|
|
5
5
|
"../package.common.json"
|
|
6
6
|
],
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"!*.test.*"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@aztec/foundation": "4.0.0-nightly.
|
|
31
|
-
"@aztec/stdlib": "4.0.0-nightly.
|
|
30
|
+
"@aztec/foundation": "4.0.0-nightly.20260110",
|
|
31
|
+
"@aztec/stdlib": "4.0.0-nightly.20260110",
|
|
32
32
|
"@opentelemetry/api": "^1.9.0",
|
|
33
33
|
"@opentelemetry/api-logs": "^0.55.0",
|
|
34
34
|
"@opentelemetry/core": "^1.28.0",
|
package/src/bench.ts
CHANGED
|
@@ -2,13 +2,13 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
2
2
|
|
|
3
3
|
import type { BatchObservableCallback, Context, MetricOptions, Observable, ValueType } from '@opentelemetry/api';
|
|
4
4
|
|
|
5
|
+
import type { MetricDefinition } from './metrics.js';
|
|
5
6
|
import { NoopTracer } from './noop.js';
|
|
6
7
|
import type {
|
|
7
8
|
AttributesType,
|
|
8
9
|
Gauge,
|
|
9
10
|
Histogram,
|
|
10
11
|
Meter,
|
|
11
|
-
MetricsType,
|
|
12
12
|
ObservableGauge,
|
|
13
13
|
ObservableUpDownCounter,
|
|
14
14
|
TelemetryClient,
|
|
@@ -61,6 +61,14 @@ export class BenchmarkTelemetryClient implements TelemetryClient {
|
|
|
61
61
|
return true;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
getTraceContext(): string | undefined {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
extractPropagatedContext() {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
|
|
64
72
|
getMeters(): BenchmarkMetricsType {
|
|
65
73
|
return this.meters;
|
|
66
74
|
}
|
|
@@ -79,30 +87,34 @@ class InMemoryPlainMeter implements Meter {
|
|
|
79
87
|
this.metrics.forEach(metric => metric.clear());
|
|
80
88
|
}
|
|
81
89
|
|
|
82
|
-
createGauge(
|
|
83
|
-
return this.createMetric('gauge',
|
|
90
|
+
createGauge(metric: MetricDefinition): Gauge {
|
|
91
|
+
return this.createMetric('gauge', metric);
|
|
84
92
|
}
|
|
85
93
|
|
|
86
|
-
createObservableGauge(
|
|
87
|
-
return this.createMetric('gauge',
|
|
94
|
+
createObservableGauge(metric: MetricDefinition): ObservableGauge {
|
|
95
|
+
return this.createMetric('gauge', metric);
|
|
88
96
|
}
|
|
89
97
|
|
|
90
|
-
createHistogram(
|
|
91
|
-
return this.createMetric('histogram',
|
|
98
|
+
createHistogram(metric: MetricDefinition, _extraOptions?: Partial<MetricOptions>): Histogram {
|
|
99
|
+
return this.createMetric('histogram', metric);
|
|
92
100
|
}
|
|
93
101
|
|
|
94
|
-
createUpDownCounter(
|
|
95
|
-
return this.createMetric('counter',
|
|
102
|
+
createUpDownCounter(metric: MetricDefinition): UpDownCounter {
|
|
103
|
+
return this.createMetric('counter', metric);
|
|
96
104
|
}
|
|
97
105
|
|
|
98
|
-
createObservableUpDownCounter(
|
|
99
|
-
return this.createMetric('counter',
|
|
106
|
+
createObservableUpDownCounter(metric: MetricDefinition): ObservableUpDownCounter {
|
|
107
|
+
return this.createMetric('counter', metric);
|
|
100
108
|
}
|
|
101
109
|
|
|
102
|
-
private createMetric(type: 'gauge' | 'counter' | 'histogram',
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
110
|
+
private createMetric(type: 'gauge' | 'counter' | 'histogram', metric: MetricDefinition) {
|
|
111
|
+
const m = new InMemoryPlainMetric(type, metric.name, {
|
|
112
|
+
description: metric.description,
|
|
113
|
+
unit: metric.unit,
|
|
114
|
+
valueType: metric.valueType,
|
|
115
|
+
});
|
|
116
|
+
this.metrics.push(m);
|
|
117
|
+
return m;
|
|
106
118
|
}
|
|
107
119
|
|
|
108
120
|
addBatchObservableCallback(
|
package/src/l1_metrics.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { type Chain, type FallbackTransport, type Hex, type HttpTransport, type
|
|
|
4
4
|
|
|
5
5
|
import { L1_SENDER } from './attributes.js';
|
|
6
6
|
import { L1_BALANCE_ETH, L1_BLOB_BASE_FEE_WEI, L1_BLOCK_HEIGHT, L1_GAS_PRICE_WEI } from './metrics.js';
|
|
7
|
-
import {
|
|
7
|
+
import type { BatchObservableResult, Meter, ObservableGauge } from './telemetry.js';
|
|
8
8
|
|
|
9
9
|
export class L1Metrics {
|
|
10
10
|
private l1BlockHeight: ObservableGauge;
|
|
@@ -18,25 +18,10 @@ export class L1Metrics {
|
|
|
18
18
|
private client: PublicClient<FallbackTransport<HttpTransport[]>, Chain>,
|
|
19
19
|
addresses: EthAddress[],
|
|
20
20
|
) {
|
|
21
|
-
this.l1BlockHeight = meter.createObservableGauge(L1_BLOCK_HEIGHT
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
this.l1BalanceEth = meter.createObservableGauge(L1_BALANCE_ETH, {
|
|
26
|
-
description: 'Eth balance of an address',
|
|
27
|
-
unit: 'eth',
|
|
28
|
-
valueType: ValueType.DOUBLE,
|
|
29
|
-
});
|
|
30
|
-
this.gasPriceWei = meter.createObservableGauge(L1_GAS_PRICE_WEI, {
|
|
31
|
-
description: 'L1 gas price',
|
|
32
|
-
unit: 'wei',
|
|
33
|
-
valueType: ValueType.DOUBLE,
|
|
34
|
-
});
|
|
35
|
-
this.blobBaseFeeWei = meter.createObservableGauge(L1_BLOB_BASE_FEE_WEI, {
|
|
36
|
-
description: 'L1 blob fee',
|
|
37
|
-
unit: 'wei',
|
|
38
|
-
valueType: ValueType.DOUBLE,
|
|
39
|
-
});
|
|
21
|
+
this.l1BlockHeight = meter.createObservableGauge(L1_BLOCK_HEIGHT);
|
|
22
|
+
this.l1BalanceEth = meter.createObservableGauge(L1_BALANCE_ETH);
|
|
23
|
+
this.gasPriceWei = meter.createObservableGauge(L1_GAS_PRICE_WEI);
|
|
24
|
+
this.blobBaseFeeWei = meter.createObservableGauge(L1_BLOB_BASE_FEE_WEI);
|
|
40
25
|
|
|
41
26
|
this.addresses = addresses.map(addr => addr.toString());
|
|
42
27
|
}
|
package/src/lmdb_metrics.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import * as Metrics from './metrics.js';
|
|
2
|
-
import {
|
|
3
|
-
type AttributesType,
|
|
4
|
-
type BatchObservableResult,
|
|
5
|
-
type Meter,
|
|
6
|
-
type ObservableGauge,
|
|
7
|
-
ValueType,
|
|
8
|
-
} from './telemetry.js';
|
|
2
|
+
import type { AttributesType, BatchObservableResult, Meter, ObservableGauge } from './telemetry.js';
|
|
9
3
|
|
|
10
4
|
export type LmdbStatsCallback = () => Promise<{
|
|
11
5
|
mappingSize: number;
|
|
@@ -25,25 +19,10 @@ export class LmdbMetrics {
|
|
|
25
19
|
private attributes?: AttributesType,
|
|
26
20
|
private getStats?: LmdbStatsCallback,
|
|
27
21
|
) {
|
|
28
|
-
this.dbMapSize = meter.createObservableGauge(Metrics.DB_MAP_SIZE
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
});
|
|
38
|
-
this.dbUsedSize = meter.createObservableGauge(Metrics.DB_USED_SIZE, {
|
|
39
|
-
description: 'LMDB Used Size',
|
|
40
|
-
valueType: ValueType.INT,
|
|
41
|
-
unit: 'By',
|
|
42
|
-
});
|
|
43
|
-
this.dbNumItems = meter.createObservableGauge(Metrics.DB_NUM_ITEMS, {
|
|
44
|
-
description: 'LMDB Num Items',
|
|
45
|
-
valueType: ValueType.INT,
|
|
46
|
-
});
|
|
22
|
+
this.dbMapSize = meter.createObservableGauge(Metrics.DB_MAP_SIZE);
|
|
23
|
+
this.dbPhysicalFileSize = meter.createObservableGauge(Metrics.DB_PHYSICAL_FILE_SIZE);
|
|
24
|
+
this.dbUsedSize = meter.createObservableGauge(Metrics.DB_USED_SIZE);
|
|
25
|
+
this.dbNumItems = meter.createObservableGauge(Metrics.DB_NUM_ITEMS);
|
|
47
26
|
|
|
48
27
|
meter.addBatchObservableCallback(this.recordDBMetrics, [
|
|
49
28
|
this.dbMapSize,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MetricOptions } from '@opentelemetry/api';
|
|
2
|
+
|
|
3
|
+
import type { MetricDefinition } from './metrics.js';
|
|
4
|
+
|
|
5
|
+
/** Extracts OpenTelemetry MetricOptions from a MetricDefinition */
|
|
6
|
+
export function toMetricOptions(def: MetricDefinition): MetricOptions {
|
|
7
|
+
return {
|
|
8
|
+
description: def.description,
|
|
9
|
+
unit: def.unit,
|
|
10
|
+
valueType: def.valueType,
|
|
11
|
+
};
|
|
12
|
+
}
|