@aztec-labs/telemetry-client 6.0.0-nightly.20260829
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/attributes.d.ts +143 -0
- package/dest/attributes.d.ts.map +1 -0
- package/dest/attributes.js +91 -0
- package/dest/bench.d.ts +34 -0
- package/dest/bench.d.ts.map +1 -0
- package/dest/bench.js +115 -0
- package/dest/config.d.ts +21 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +85 -0
- package/dest/index.d.ts +12 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +11 -0
- package/dest/json_rpc_server_metrics.d.ts +27 -0
- package/dest/json_rpc_server_metrics.d.ts.map +1 -0
- package/dest/json_rpc_server_metrics.js +154 -0
- package/dest/l1_metrics.d.ts +17 -0
- package/dest/l1_metrics.d.ts.map +1 -0
- package/dest/l1_metrics.js +54 -0
- package/dest/lmdb_metrics.d.ts +18 -0
- package/dest/lmdb_metrics.d.ts.map +1 -0
- package/dest/lmdb_metrics.js +34 -0
- package/dest/metric-utils.d.ts +24 -0
- package/dest/metric-utils.d.ts.map +1 -0
- package/dest/metric-utils.js +59 -0
- package/dest/metrics.d.ts +338 -0
- package/dest/metrics.d.ts.map +1 -0
- package/dest/metrics.js +1702 -0
- package/dest/monitored_batch_span_processor.d.ts +33 -0
- package/dest/monitored_batch_span_processor.d.ts.map +1 -0
- package/dest/monitored_batch_span_processor.js +111 -0
- package/dest/nodejs_metrics_monitor.d.ts +19 -0
- package/dest/nodejs_metrics_monitor.d.ts.map +1 -0
- package/dest/nodejs_metrics_monitor.js +115 -0
- package/dest/noop.d.ts +19 -0
- package/dest/noop.d.ts.map +1 -0
- package/dest/noop.js +104 -0
- package/dest/otel.d.ts +43 -0
- package/dest/otel.d.ts.map +1 -0
- package/dest/otel.js +537 -0
- package/dest/otel_filter_metric_exporter.d.ts +20 -0
- package/dest/otel_filter_metric_exporter.d.ts.map +1 -0
- package/dest/otel_filter_metric_exporter.js +67 -0
- package/dest/otel_logger_provider.d.ts +4 -0
- package/dest/otel_logger_provider.d.ts.map +1 -0
- package/dest/otel_logger_provider.js +25 -0
- package/dest/otel_propagation.d.ts +6 -0
- package/dest/otel_propagation.d.ts.map +1 -0
- package/dest/otel_propagation.js +102 -0
- package/dest/otel_resource.d.ts +3 -0
- package/dest/otel_resource.d.ts.map +1 -0
- package/dest/otel_resource.js +53 -0
- package/dest/prom_otel_adapter.d.ts +176 -0
- package/dest/prom_otel_adapter.d.ts.map +1 -0
- package/dest/prom_otel_adapter.js +292 -0
- package/dest/start.d.ts +7 -0
- package/dest/start.d.ts.map +1 -0
- package/dest/start.js +25 -0
- package/dest/telemetry.d.ts +149 -0
- package/dest/telemetry.d.ts.map +1 -0
- package/dest/telemetry.js +139 -0
- package/dest/vendor/attributes.d.ts +6 -0
- package/dest/vendor/attributes.d.ts.map +1 -0
- package/dest/vendor/attributes.js +6 -0
- package/dest/vendor/otel-pino-stream.d.ts +40 -0
- package/dest/vendor/otel-pino-stream.d.ts.map +1 -0
- package/dest/vendor/otel-pino-stream.js +229 -0
- package/dest/with_tracer.d.ts +33 -0
- package/dest/with_tracer.d.ts.map +1 -0
- package/dest/with_tracer.js +32 -0
- package/dest/wrappers/fetch.d.ts +16 -0
- package/dest/wrappers/fetch.d.ts.map +1 -0
- package/dest/wrappers/fetch.js +42 -0
- package/dest/wrappers/index.d.ts +3 -0
- package/dest/wrappers/index.d.ts.map +1 -0
- package/dest/wrappers/index.js +2 -0
- package/dest/wrappers/json_rpc_server.d.ts +4 -0
- package/dest/wrappers/json_rpc_server.d.ts.map +1 -0
- package/dest/wrappers/json_rpc_server.js +16 -0
- package/package.json +95 -0
- package/src/attributes.ts +174 -0
- package/src/bench.ts +168 -0
- package/src/config.ts +135 -0
- package/src/index.ts +11 -0
- package/src/json_rpc_server_metrics.ts +150 -0
- package/src/l1_metrics.ts +64 -0
- package/src/lmdb_metrics.ts +45 -0
- package/src/metric-utils.ts +75 -0
- package/src/metrics.ts +1802 -0
- package/src/monitored_batch_span_processor.ts +147 -0
- package/src/nodejs_metrics_monitor.ts +135 -0
- package/src/noop.ts +152 -0
- package/src/otel.ts +482 -0
- package/src/otel_filter_metric_exporter.ts +80 -0
- package/src/otel_logger_provider.ts +31 -0
- package/src/otel_propagation.ts +107 -0
- package/src/otel_resource.ts +71 -0
- package/src/prom_otel_adapter.ts +450 -0
- package/src/start.ts +42 -0
- package/src/telemetry.ts +348 -0
- package/src/vendor/attributes.ts +6 -0
- package/src/vendor/otel-pino-stream.ts +279 -0
- package/src/with_tracer.ts +35 -0
- package/src/wrappers/fetch.ts +50 -0
- package/src/wrappers/index.ts +2 -0
- package/src/wrappers/json_rpc_server.ts +26 -0
package/dest/otel.js
ADDED
|
@@ -0,0 +1,537 @@
|
|
|
1
|
+
import { addLogDataHandler } from '@aztec-labs/foundation/log';
|
|
2
|
+
import { DiagConsoleLogger, DiagLogLevel, ROOT_CONTEXT, context, diag, isSpanContextValid, propagation, trace } from '@opentelemetry/api';
|
|
3
|
+
import { W3CTraceContextPropagator } from '@opentelemetry/core';
|
|
4
|
+
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
|
|
5
|
+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
|
6
|
+
import { HostMetrics } from '@opentelemetry/host-metrics';
|
|
7
|
+
import { ExplicitBucketHistogramAggregation, InstrumentType, MeterProvider, PeriodicExportingMetricReader, View } from '@opentelemetry/sdk-metrics';
|
|
8
|
+
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
|
|
9
|
+
import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
|
|
10
|
+
import { toMetricOptions } from './metric-utils.js';
|
|
11
|
+
import { MonitoredBatchSpanProcessor } from './monitored_batch_span_processor.js';
|
|
12
|
+
import { NodejsMetricsMonitor } from './nodejs_metrics_monitor.js';
|
|
13
|
+
import { OtelFilterMetricExporter, PublicOtelFilterMetricExporter } from './otel_filter_metric_exporter.js';
|
|
14
|
+
import { registerOtelLoggerProvider } from './otel_logger_provider.js';
|
|
15
|
+
import { getOtelResource } from './otel_resource.js';
|
|
16
|
+
/** Wraps an OpenTelemetry Meter to implement our custom Meter interface */ class WrappedMeter {
|
|
17
|
+
otelMeter;
|
|
18
|
+
constructor(otelMeter){
|
|
19
|
+
this.otelMeter = otelMeter;
|
|
20
|
+
}
|
|
21
|
+
createGauge(metric) {
|
|
22
|
+
return this.otelMeter.createGauge(metric.name, toMetricOptions(metric));
|
|
23
|
+
}
|
|
24
|
+
createObservableGauge(metric) {
|
|
25
|
+
return this.otelMeter.createObservableGauge(metric.name, toMetricOptions(metric));
|
|
26
|
+
}
|
|
27
|
+
createHistogram(metric, extraOptions) {
|
|
28
|
+
return this.otelMeter.createHistogram(metric.name, {
|
|
29
|
+
...toMetricOptions(metric),
|
|
30
|
+
...extraOptions
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
createUpDownCounter(metric) {
|
|
34
|
+
return this.otelMeter.createUpDownCounter(metric.name, toMetricOptions(metric));
|
|
35
|
+
}
|
|
36
|
+
createObservableUpDownCounter(metric) {
|
|
37
|
+
return this.otelMeter.createObservableUpDownCounter(metric.name, toMetricOptions(metric));
|
|
38
|
+
}
|
|
39
|
+
addBatchObservableCallback(callback, observables) {
|
|
40
|
+
this.otelMeter.addBatchObservableCallback(callback, observables);
|
|
41
|
+
}
|
|
42
|
+
removeBatchObservableCallback(callback, observables) {
|
|
43
|
+
this.otelMeter.removeBatchObservableCallback(callback, observables);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export class OpenTelemetryClient {
|
|
47
|
+
resource;
|
|
48
|
+
meterProvider;
|
|
49
|
+
traceProvider;
|
|
50
|
+
loggerProvider;
|
|
51
|
+
publicMetricExporter;
|
|
52
|
+
log;
|
|
53
|
+
hostMetrics;
|
|
54
|
+
nodejsMetricsMonitor;
|
|
55
|
+
meters;
|
|
56
|
+
tracers;
|
|
57
|
+
/** Memoized shutdown promise. The telemetry client is shared between the aztec-node and an embedded prover-node,
|
|
58
|
+
* so stop() can be invoked more than once; the providers throw "shutdown may only be called once" and
|
|
59
|
+
* "invalid attempt to force flush after shutdown" if that happens. Guarding here makes stop()/flush() idempotent. */ stopPromise;
|
|
60
|
+
constructor(resource, meterProvider, traceProvider, loggerProvider, publicMetricExporter, log){
|
|
61
|
+
this.resource = resource;
|
|
62
|
+
this.meterProvider = meterProvider;
|
|
63
|
+
this.traceProvider = traceProvider;
|
|
64
|
+
this.loggerProvider = loggerProvider;
|
|
65
|
+
this.publicMetricExporter = publicMetricExporter;
|
|
66
|
+
this.log = log;
|
|
67
|
+
this.meters = new Map();
|
|
68
|
+
this.tracers = new Map();
|
|
69
|
+
}
|
|
70
|
+
setExportedPublicTelemetry(metrics) {
|
|
71
|
+
this.publicMetricExporter?.setMetricPrefixes(metrics);
|
|
72
|
+
}
|
|
73
|
+
setPublicTelemetryCollectFrom(roles) {
|
|
74
|
+
this.publicMetricExporter?.setAllowedRoles(roles);
|
|
75
|
+
}
|
|
76
|
+
getMeter(name) {
|
|
77
|
+
let meter = this.meters.get(name);
|
|
78
|
+
if (!meter) {
|
|
79
|
+
const otelMeter = this.meterProvider.getMeter(name, this.resource.attributes[ATTR_SERVICE_VERSION]);
|
|
80
|
+
meter = new WrappedMeter(otelMeter);
|
|
81
|
+
this.meters.set(name, meter);
|
|
82
|
+
}
|
|
83
|
+
return meter;
|
|
84
|
+
}
|
|
85
|
+
getTracer(name) {
|
|
86
|
+
let tracer = this.tracers.get(name);
|
|
87
|
+
if (!tracer) {
|
|
88
|
+
tracer = this.traceProvider.getTracer(name, this.resource.attributes[ATTR_SERVICE_VERSION]);
|
|
89
|
+
this.tracers.set(name, tracer);
|
|
90
|
+
}
|
|
91
|
+
return tracer;
|
|
92
|
+
}
|
|
93
|
+
start() {
|
|
94
|
+
this.log.info('Starting OpenTelemetry client');
|
|
95
|
+
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO);
|
|
96
|
+
// Add a callback to the logger to set context data from current trace
|
|
97
|
+
// Adapted from open-telemetry/opentelemetry-js-contrib PinoInstrumentation._getMixinFunction
|
|
98
|
+
addLogDataHandler((data)=>{
|
|
99
|
+
const spanContext = trace.getSpan(context.active())?.spanContext();
|
|
100
|
+
return spanContext && isSpanContextValid(spanContext) ? {
|
|
101
|
+
...data,
|
|
102
|
+
['trace_id']: spanContext.traceId,
|
|
103
|
+
['span_id']: spanContext.spanId,
|
|
104
|
+
['trace_flags']: `0${spanContext.traceFlags.toString(16)}`
|
|
105
|
+
} : data;
|
|
106
|
+
});
|
|
107
|
+
this.hostMetrics = new HostMetrics({
|
|
108
|
+
name: this.resource.attributes[ATTR_SERVICE_NAME],
|
|
109
|
+
meterProvider: this.meterProvider
|
|
110
|
+
});
|
|
111
|
+
const nodejsMeter = new WrappedMeter(this.meterProvider.getMeter(this.resource.attributes[ATTR_SERVICE_NAME]));
|
|
112
|
+
this.nodejsMetricsMonitor = new NodejsMetricsMonitor(nodejsMeter);
|
|
113
|
+
this.hostMetrics.start();
|
|
114
|
+
this.nodejsMetricsMonitor.start();
|
|
115
|
+
}
|
|
116
|
+
isEnabled() {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
async flush() {
|
|
120
|
+
// Flushing after the providers have been shut down throws "invalid attempt to force flush after shutdown".
|
|
121
|
+
if (this.stopPromise) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
await Promise.all([
|
|
125
|
+
this.meterProvider.forceFlush(),
|
|
126
|
+
this.loggerProvider?.forceFlush(),
|
|
127
|
+
this.traceProvider instanceof NodeTracerProvider ? this.traceProvider.forceFlush() : Promise.resolve()
|
|
128
|
+
]);
|
|
129
|
+
}
|
|
130
|
+
stop() {
|
|
131
|
+
return this.stopPromise ??= this.doStop();
|
|
132
|
+
}
|
|
133
|
+
async doStop() {
|
|
134
|
+
this.nodejsMetricsMonitor?.stop();
|
|
135
|
+
const flushAndShutdown = async (provider)=>{
|
|
136
|
+
if (!provider) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
await provider.forceFlush();
|
|
140
|
+
await provider.shutdown();
|
|
141
|
+
};
|
|
142
|
+
await Promise.all([
|
|
143
|
+
flushAndShutdown(this.meterProvider),
|
|
144
|
+
flushAndShutdown(this.loggerProvider),
|
|
145
|
+
this.traceProvider instanceof NodeTracerProvider ? flushAndShutdown(this.traceProvider) : Promise.resolve()
|
|
146
|
+
]);
|
|
147
|
+
}
|
|
148
|
+
getTraceContext() {
|
|
149
|
+
const carrier = {};
|
|
150
|
+
propagation.inject(context.active(), carrier);
|
|
151
|
+
return carrier['traceparent'];
|
|
152
|
+
}
|
|
153
|
+
extractPropagatedContext(traceContext) {
|
|
154
|
+
const extractedContext = propagation.extract(ROOT_CONTEXT, {
|
|
155
|
+
traceparent: traceContext
|
|
156
|
+
});
|
|
157
|
+
return extractedContext;
|
|
158
|
+
}
|
|
159
|
+
static createMeterProvider(resource, exporters) {
|
|
160
|
+
return new MeterProvider({
|
|
161
|
+
resource,
|
|
162
|
+
readers: exporters.map((options)=>new PeriodicExportingMetricReader(options)),
|
|
163
|
+
views: [
|
|
164
|
+
// Every histogram matching the selector (type + unit) gets these custom buckets assigned
|
|
165
|
+
new View({
|
|
166
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
167
|
+
instrumentUnit: 'Mmana',
|
|
168
|
+
aggregation: new ExplicitBucketHistogramAggregation([
|
|
169
|
+
0.1,
|
|
170
|
+
0.5,
|
|
171
|
+
1,
|
|
172
|
+
2,
|
|
173
|
+
4,
|
|
174
|
+
8,
|
|
175
|
+
10,
|
|
176
|
+
25,
|
|
177
|
+
50,
|
|
178
|
+
100,
|
|
179
|
+
500,
|
|
180
|
+
1000,
|
|
181
|
+
5000,
|
|
182
|
+
10000
|
|
183
|
+
], true)
|
|
184
|
+
}),
|
|
185
|
+
new View({
|
|
186
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
187
|
+
instrumentUnit: 'tx',
|
|
188
|
+
aggregation: new ExplicitBucketHistogramAggregation(// TPS
|
|
189
|
+
[
|
|
190
|
+
0.1 * 36,
|
|
191
|
+
0.2 * 36,
|
|
192
|
+
0.5 * 36,
|
|
193
|
+
1 * 36,
|
|
194
|
+
2 * 36,
|
|
195
|
+
5 * 36,
|
|
196
|
+
10 * 36,
|
|
197
|
+
15 * 36
|
|
198
|
+
].map(Math.ceil), true)
|
|
199
|
+
}),
|
|
200
|
+
new View({
|
|
201
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
202
|
+
instrumentUnit: 's',
|
|
203
|
+
aggregation: new ExplicitBucketHistogramAggregation([
|
|
204
|
+
1,
|
|
205
|
+
2,
|
|
206
|
+
4,
|
|
207
|
+
6,
|
|
208
|
+
10,
|
|
209
|
+
15,
|
|
210
|
+
30,
|
|
211
|
+
60,
|
|
212
|
+
90,
|
|
213
|
+
120,
|
|
214
|
+
180,
|
|
215
|
+
240,
|
|
216
|
+
300,
|
|
217
|
+
480,
|
|
218
|
+
600,
|
|
219
|
+
900,
|
|
220
|
+
1200
|
|
221
|
+
], true)
|
|
222
|
+
}),
|
|
223
|
+
// Pending-to-mined delay routinely exceeds the 1-minute ceiling of the generic `ms`
|
|
224
|
+
// view below under load, so it would saturate at 60s. Give this one metric wider
|
|
225
|
+
// buckets (1s to 10min). This must precede the generic `ms` view: when multiple views
|
|
226
|
+
// match an instrument, the SDK keeps the first-registered compatible storage, so the
|
|
227
|
+
// first view in this list wins the bucket boundaries.
|
|
228
|
+
new View({
|
|
229
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
230
|
+
instrumentName: 'aztec.mempool.tx_mined_delay',
|
|
231
|
+
instrumentUnit: 'ms',
|
|
232
|
+
aggregation: new ExplicitBucketHistogramAggregation([
|
|
233
|
+
1_000,
|
|
234
|
+
2_500,
|
|
235
|
+
5_000,
|
|
236
|
+
7_500,
|
|
237
|
+
10_000,
|
|
238
|
+
15_000,
|
|
239
|
+
30_000,
|
|
240
|
+
45_000,
|
|
241
|
+
60_000,
|
|
242
|
+
90_000,
|
|
243
|
+
120_000,
|
|
244
|
+
180_000,
|
|
245
|
+
300_000,
|
|
246
|
+
600_000
|
|
247
|
+
], true)
|
|
248
|
+
}),
|
|
249
|
+
new View({
|
|
250
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
251
|
+
instrumentUnit: 'ms',
|
|
252
|
+
aggregation: new ExplicitBucketHistogramAggregation(// 10ms to 1 minute
|
|
253
|
+
[
|
|
254
|
+
10,
|
|
255
|
+
20,
|
|
256
|
+
35,
|
|
257
|
+
50,
|
|
258
|
+
75,
|
|
259
|
+
100,
|
|
260
|
+
250,
|
|
261
|
+
500,
|
|
262
|
+
750,
|
|
263
|
+
1_000,
|
|
264
|
+
2_500,
|
|
265
|
+
5_000,
|
|
266
|
+
7_500,
|
|
267
|
+
10_000,
|
|
268
|
+
15_000,
|
|
269
|
+
30_000,
|
|
270
|
+
60_000
|
|
271
|
+
], true)
|
|
272
|
+
}),
|
|
273
|
+
new View({
|
|
274
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
275
|
+
instrumentUnit: 'us',
|
|
276
|
+
aggregation: new ExplicitBucketHistogramAggregation(// 1us to 1s
|
|
277
|
+
[
|
|
278
|
+
5,
|
|
279
|
+
10,
|
|
280
|
+
25,
|
|
281
|
+
50,
|
|
282
|
+
75,
|
|
283
|
+
100,
|
|
284
|
+
250,
|
|
285
|
+
500,
|
|
286
|
+
750,
|
|
287
|
+
1_000,
|
|
288
|
+
2_500,
|
|
289
|
+
5_000,
|
|
290
|
+
7_500,
|
|
291
|
+
10_000,
|
|
292
|
+
25_000,
|
|
293
|
+
50_000,
|
|
294
|
+
100_000,
|
|
295
|
+
250_000,
|
|
296
|
+
500_000,
|
|
297
|
+
1_000_000
|
|
298
|
+
], true)
|
|
299
|
+
}),
|
|
300
|
+
new View({
|
|
301
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
302
|
+
instrumentUnit: 'By',
|
|
303
|
+
aggregation: new ExplicitBucketHistogramAggregation(// from 32 bytes to 2MB
|
|
304
|
+
[
|
|
305
|
+
32,
|
|
306
|
+
64,
|
|
307
|
+
128,
|
|
308
|
+
256,
|
|
309
|
+
512,
|
|
310
|
+
1024,
|
|
311
|
+
2048,
|
|
312
|
+
4096,
|
|
313
|
+
8192,
|
|
314
|
+
16384,
|
|
315
|
+
32768,
|
|
316
|
+
65536,
|
|
317
|
+
131072,
|
|
318
|
+
262144,
|
|
319
|
+
524288,
|
|
320
|
+
1048576,
|
|
321
|
+
1572864,
|
|
322
|
+
2097152
|
|
323
|
+
], true)
|
|
324
|
+
}),
|
|
325
|
+
new View({
|
|
326
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
327
|
+
instrumentUnit: 'gas/s',
|
|
328
|
+
aggregation: new ExplicitBucketHistogramAggregation([
|
|
329
|
+
1_000,
|
|
330
|
+
5_000,
|
|
331
|
+
10_000,
|
|
332
|
+
25_000,
|
|
333
|
+
50_000,
|
|
334
|
+
100_000,
|
|
335
|
+
250_000,
|
|
336
|
+
500_000,
|
|
337
|
+
750_000,
|
|
338
|
+
1_000_000,
|
|
339
|
+
2_000_000,
|
|
340
|
+
4_000_000,
|
|
341
|
+
8_000_000,
|
|
342
|
+
10_000_000,
|
|
343
|
+
15_000_000,
|
|
344
|
+
30_000_000
|
|
345
|
+
], true)
|
|
346
|
+
}),
|
|
347
|
+
new View({
|
|
348
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
349
|
+
instrumentUnit: 'mana/s',
|
|
350
|
+
aggregation: new ExplicitBucketHistogramAggregation([
|
|
351
|
+
1_000,
|
|
352
|
+
5_000,
|
|
353
|
+
10_000,
|
|
354
|
+
25_000,
|
|
355
|
+
50_000,
|
|
356
|
+
100_000,
|
|
357
|
+
250_000,
|
|
358
|
+
500_000,
|
|
359
|
+
750_000,
|
|
360
|
+
1_000_000,
|
|
361
|
+
2_000_000,
|
|
362
|
+
4_000_000,
|
|
363
|
+
8_000_000,
|
|
364
|
+
10_000_000,
|
|
365
|
+
15_000_000,
|
|
366
|
+
30_000_000
|
|
367
|
+
], true)
|
|
368
|
+
}),
|
|
369
|
+
new View({
|
|
370
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
371
|
+
instrumentUnit: 'gas/block',
|
|
372
|
+
aggregation: new ExplicitBucketHistogramAggregation([
|
|
373
|
+
1_000,
|
|
374
|
+
5_000,
|
|
375
|
+
10_000,
|
|
376
|
+
25_000,
|
|
377
|
+
50_000,
|
|
378
|
+
100_000,
|
|
379
|
+
250_000,
|
|
380
|
+
500_000,
|
|
381
|
+
750_000,
|
|
382
|
+
1_000_000,
|
|
383
|
+
2_000_000,
|
|
384
|
+
4_000_000,
|
|
385
|
+
8_000_000,
|
|
386
|
+
10_000_000,
|
|
387
|
+
15_000_000,
|
|
388
|
+
30_000_000
|
|
389
|
+
], true)
|
|
390
|
+
}),
|
|
391
|
+
new View({
|
|
392
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
393
|
+
instrumentUnit: 'gas/tx',
|
|
394
|
+
aggregation: new ExplicitBucketHistogramAggregation([
|
|
395
|
+
25_000,
|
|
396
|
+
50_000,
|
|
397
|
+
100_000,
|
|
398
|
+
250_000,
|
|
399
|
+
500_000,
|
|
400
|
+
750_000,
|
|
401
|
+
1_000_000,
|
|
402
|
+
2_000_000,
|
|
403
|
+
4_000_000,
|
|
404
|
+
8_000_000,
|
|
405
|
+
10_000_000,
|
|
406
|
+
15_000_000,
|
|
407
|
+
30_000_000
|
|
408
|
+
], true)
|
|
409
|
+
}),
|
|
410
|
+
// L1 gas prices in gwei: priority fees ~0.01-10, base fees ~1-500, spikes to 1000+
|
|
411
|
+
new View({
|
|
412
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
413
|
+
instrumentUnit: 'gwei',
|
|
414
|
+
aggregation: new ExplicitBucketHistogramAggregation([
|
|
415
|
+
0.1,
|
|
416
|
+
0.5,
|
|
417
|
+
1,
|
|
418
|
+
2,
|
|
419
|
+
5,
|
|
420
|
+
10,
|
|
421
|
+
20,
|
|
422
|
+
50,
|
|
423
|
+
100,
|
|
424
|
+
200,
|
|
425
|
+
500,
|
|
426
|
+
1_000
|
|
427
|
+
], true)
|
|
428
|
+
}),
|
|
429
|
+
// L1 gas consumption: tx gas 100k-30M, calldata/blob gas varies
|
|
430
|
+
new View({
|
|
431
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
432
|
+
instrumentUnit: 'gas',
|
|
433
|
+
aggregation: new ExplicitBucketHistogramAggregation([
|
|
434
|
+
10_000,
|
|
435
|
+
50_000,
|
|
436
|
+
100_000,
|
|
437
|
+
250_000,
|
|
438
|
+
500_000,
|
|
439
|
+
1_000_000,
|
|
440
|
+
2_000_000,
|
|
441
|
+
5_000_000,
|
|
442
|
+
10_000_000,
|
|
443
|
+
15_000_000,
|
|
444
|
+
30_000_000
|
|
445
|
+
], true)
|
|
446
|
+
}),
|
|
447
|
+
// L1 tx total fee in ETH: typically 0.001 - 1 ETH
|
|
448
|
+
new View({
|
|
449
|
+
instrumentType: InstrumentType.HISTOGRAM,
|
|
450
|
+
instrumentUnit: 'eth',
|
|
451
|
+
aggregation: new ExplicitBucketHistogramAggregation([
|
|
452
|
+
0.0001,
|
|
453
|
+
0.0005,
|
|
454
|
+
0.001,
|
|
455
|
+
0.005,
|
|
456
|
+
0.01,
|
|
457
|
+
0.05,
|
|
458
|
+
0.1,
|
|
459
|
+
0.5,
|
|
460
|
+
1,
|
|
461
|
+
5,
|
|
462
|
+
10
|
|
463
|
+
], true)
|
|
464
|
+
})
|
|
465
|
+
]
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
static getCustomClientFactory(config) {
|
|
469
|
+
return (resource, log)=>{
|
|
470
|
+
const tracerProvider = new NodeTracerProvider({
|
|
471
|
+
resource,
|
|
472
|
+
spanProcessors: config.tracesCollectorUrl ? [
|
|
473
|
+
new MonitoredBatchSpanProcessor(new OTLPTraceExporter({
|
|
474
|
+
url: config.tracesCollectorUrl.href
|
|
475
|
+
}), log, {
|
|
476
|
+
maxQueueSize: config.otelBspMaxQueueSize,
|
|
477
|
+
maxExportBatchSize: config.otelBspMaxExportBatchSize,
|
|
478
|
+
scheduledDelayMillis: config.otelBspScheduleDelayMs,
|
|
479
|
+
minTraceDurationMs: config.otelMinTraceDurationMs
|
|
480
|
+
})
|
|
481
|
+
] : []
|
|
482
|
+
});
|
|
483
|
+
tracerProvider.register({
|
|
484
|
+
propagator: new W3CTraceContextPropagator()
|
|
485
|
+
});
|
|
486
|
+
const exporters = [];
|
|
487
|
+
if (config.metricsCollectorUrl) {
|
|
488
|
+
// Default to a blacklist that is empty (allow all metrics)
|
|
489
|
+
let filter = [];
|
|
490
|
+
let mode = 'deny';
|
|
491
|
+
if (config.otelExcludeMetrics.length > 0) {
|
|
492
|
+
// Implement a blacklist as specified in config
|
|
493
|
+
log.info(`Excluding metrics from export: ${config.otelExcludeMetrics}`);
|
|
494
|
+
filter = config.otelExcludeMetrics;
|
|
495
|
+
mode = 'deny';
|
|
496
|
+
} else if (config.otelIncludeMetrics.length > 0) {
|
|
497
|
+
// Implement a whitelist as specified in config
|
|
498
|
+
log.info(`Including only specified metrics for export: ${config.otelIncludeMetrics}`);
|
|
499
|
+
filter = config.otelIncludeMetrics;
|
|
500
|
+
mode = 'allow';
|
|
501
|
+
}
|
|
502
|
+
exporters.push({
|
|
503
|
+
exporter: new OtelFilterMetricExporter(new OTLPMetricExporter({
|
|
504
|
+
url: config.metricsCollectorUrl.href
|
|
505
|
+
}), filter, mode),
|
|
506
|
+
exportTimeoutMillis: config.otelExportTimeoutMs,
|
|
507
|
+
exportIntervalMillis: config.otelCollectIntervalMs
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
let publicExporter;
|
|
511
|
+
if (config.publicMetricsCollectorUrl && !config.publicMetricsOptOut) {
|
|
512
|
+
log.info(`Exporting public metrics: ${config.publicIncludeMetrics}`, {
|
|
513
|
+
publicMetrics: config.publicIncludeMetrics,
|
|
514
|
+
collectorUrl: config.publicMetricsCollectorUrl
|
|
515
|
+
});
|
|
516
|
+
publicExporter = new PublicOtelFilterMetricExporter(config.publicMetricsCollectFrom, new OTLPMetricExporter({
|
|
517
|
+
url: config.publicMetricsCollectorUrl.href
|
|
518
|
+
}), config.publicIncludeMetrics);
|
|
519
|
+
exporters.push({
|
|
520
|
+
exporter: publicExporter,
|
|
521
|
+
exportTimeoutMillis: config.otelExportTimeoutMs,
|
|
522
|
+
exportIntervalMillis: config.otelCollectIntervalMs
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
const meterProvider = OpenTelemetryClient.createMeterProvider(resource, exporters);
|
|
526
|
+
const loggerProvider = registerOtelLoggerProvider(resource, config.logsCollectorUrl);
|
|
527
|
+
return new OpenTelemetryClient(resource, meterProvider, tracerProvider, loggerProvider, publicExporter, log);
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
static createAndStart(config, log) {
|
|
531
|
+
const resource = getOtelResource();
|
|
532
|
+
const factory = OpenTelemetryClient.getCustomClientFactory(config);
|
|
533
|
+
const service = factory(resource, log);
|
|
534
|
+
service.start();
|
|
535
|
+
return service;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ExportResult } from '@opentelemetry/core';
|
|
2
|
+
import type { PushMetricExporter, ResourceMetrics } from '@opentelemetry/sdk-metrics';
|
|
3
|
+
export declare class OtelFilterMetricExporter implements PushMetricExporter {
|
|
4
|
+
private readonly exporter;
|
|
5
|
+
private metricPrefix;
|
|
6
|
+
private readonly filter;
|
|
7
|
+
constructor(exporter: PushMetricExporter, metricPrefix: string[], filter?: 'allow' | 'deny');
|
|
8
|
+
export(metrics: ResourceMetrics, resultCallback: (result: ExportResult) => void): void;
|
|
9
|
+
private filterMetrics;
|
|
10
|
+
forceFlush(): Promise<void>;
|
|
11
|
+
shutdown(): Promise<void>;
|
|
12
|
+
setMetricPrefixes(metrics: string[]): void;
|
|
13
|
+
}
|
|
14
|
+
export declare class PublicOtelFilterMetricExporter extends OtelFilterMetricExporter {
|
|
15
|
+
private allowedRoles;
|
|
16
|
+
constructor(allowedRoles: string[], exporter: PushMetricExporter, metricPrefix: string[]);
|
|
17
|
+
export(metrics: ResourceMetrics, resultCallback: (result: ExportResult) => void): void;
|
|
18
|
+
setAllowedRoles(roles: string[]): void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbF9maWx0ZXJfbWV0cmljX2V4cG9ydGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvb3RlbF9maWx0ZXJfbWV0cmljX2V4cG9ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEtBQUssRUFBYyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUlsRyxxQkFBYSx3QkFBeUIsWUFBVyxrQkFBa0I7SUFFL0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRO0lBQ3pCLE9BQU8sQ0FBQyxZQUFZO0lBQ3BCLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUh6QixZQUNtQixRQUFRLEVBQUUsa0JBQWtCLEVBQ3JDLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFDYixNQUFNLEdBQUUsT0FBTyxHQUFHLE1BQWUsRUFRbkQ7SUFFTSxNQUFNLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxLQUFLLElBQUksR0FBRyxJQUFJLENBUzVGO0lBRUQsT0FBTyxDQUFDLGFBQWE7SUFjZCxVQUFVLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUVqQztJQUVNLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBRS9CO0lBRU0saUJBQWlCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUV6QztDQUNGO0FBRUQscUJBQWEsOEJBQStCLFNBQVEsd0JBQXdCO0lBRXhFLE9BQU8sQ0FBQyxZQUFZO0lBRHRCLFlBQ1UsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUM5QixRQUFRLEVBQUUsa0JBQWtCLEVBQzVCLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFHdkI7SUFFZSxNQUFNLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxLQUFLLElBQUksR0FBRyxJQUFJLENBUXJHO0lBRU0sZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFFckM7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel_filter_metric_exporter.d.ts","sourceRoot":"","sources":["../src/otel_filter_metric_exporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAc,kBAAkB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAIlG,qBAAa,wBAAyB,YAAW,kBAAkB;IAE/D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,YACmB,QAAQ,EAAE,kBAAkB,EACrC,YAAY,EAAE,MAAM,EAAE,EACb,MAAM,GAAE,OAAO,GAAG,MAAe,EAQnD;IAEM,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI,CAS5F;IAED,OAAO,CAAC,aAAa;IAcd,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjC;IAEM,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAE/B;IAEM,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAEzC;CACF;AAED,qBAAa,8BAA+B,SAAQ,wBAAwB;IAExE,OAAO,CAAC,YAAY;IADtB,YACU,YAAY,EAAE,MAAM,EAAE,EAC9B,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,EAAE,MAAM,EAAE,EAGvB;IAEe,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI,CAQrG;IAEM,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAErC;CACF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ExportResultCode } from '@opentelemetry/core';
|
|
2
|
+
import { AZTEC_NODE_ROLE } from './attributes.js';
|
|
3
|
+
export class OtelFilterMetricExporter {
|
|
4
|
+
exporter;
|
|
5
|
+
metricPrefix;
|
|
6
|
+
filter;
|
|
7
|
+
constructor(exporter, metricPrefix, filter = 'deny'){
|
|
8
|
+
this.exporter = exporter;
|
|
9
|
+
this.metricPrefix = metricPrefix;
|
|
10
|
+
this.filter = filter;
|
|
11
|
+
if (exporter.selectAggregation) {
|
|
12
|
+
this.selectAggregation = exporter.selectAggregation.bind(exporter);
|
|
13
|
+
}
|
|
14
|
+
if (exporter.selectAggregationTemporality) {
|
|
15
|
+
this.selectAggregationTemporality = exporter.selectAggregationTemporality.bind(exporter);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export(metrics, resultCallback) {
|
|
19
|
+
const filteredMetrics = {
|
|
20
|
+
resource: metrics.resource,
|
|
21
|
+
scopeMetrics: metrics.scopeMetrics.map(({ scope, metrics })=>({
|
|
22
|
+
scope,
|
|
23
|
+
metrics: this.filterMetrics(metrics)
|
|
24
|
+
})).filter(({ metrics })=>metrics.length > 0)
|
|
25
|
+
};
|
|
26
|
+
this.exporter.export(filteredMetrics, resultCallback);
|
|
27
|
+
}
|
|
28
|
+
filterMetrics(metrics) {
|
|
29
|
+
return metrics.filter((metric)=>{
|
|
30
|
+
const matched = this.metricPrefix.some((prefix)=>metric.descriptor.name.startsWith(prefix));
|
|
31
|
+
if (this.filter === 'deny') {
|
|
32
|
+
return !matched;
|
|
33
|
+
}
|
|
34
|
+
if (this.filter === 'allow') {
|
|
35
|
+
return matched;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
forceFlush() {
|
|
40
|
+
return this.exporter.forceFlush();
|
|
41
|
+
}
|
|
42
|
+
shutdown() {
|
|
43
|
+
return this.exporter.shutdown();
|
|
44
|
+
}
|
|
45
|
+
setMetricPrefixes(metrics) {
|
|
46
|
+
this.metricPrefix = metrics;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export class PublicOtelFilterMetricExporter extends OtelFilterMetricExporter {
|
|
50
|
+
allowedRoles;
|
|
51
|
+
constructor(allowedRoles, exporter, metricPrefix){
|
|
52
|
+
super(exporter, metricPrefix, 'allow'), this.allowedRoles = allowedRoles;
|
|
53
|
+
}
|
|
54
|
+
export(metrics, resultCallback) {
|
|
55
|
+
const role = String(metrics.resource.attributes[AZTEC_NODE_ROLE] ?? '');
|
|
56
|
+
if (!role || !this.allowedRoles.includes(role)) {
|
|
57
|
+
// noop
|
|
58
|
+
return resultCallback({
|
|
59
|
+
code: ExportResultCode.SUCCESS
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
super.export(metrics, resultCallback);
|
|
63
|
+
}
|
|
64
|
+
setAllowedRoles(roles) {
|
|
65
|
+
this.allowedRoles = roles;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IResource } from '@opentelemetry/resources';
|
|
2
|
+
import { LoggerProvider } from '@opentelemetry/sdk-logs';
|
|
3
|
+
export declare function registerOtelLoggerProvider(resource: IResource, otelLogsUrl?: URL): LoggerProvider;
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbF9sb2dnZXJfcHJvdmlkZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vdGVsX2xvZ2dlcl9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQTJCLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWxGLHdCQUFnQiwwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEdBQUcsa0JBd0JoRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel_logger_provider.d.ts","sourceRoot":"","sources":["../src/otel_logger_provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAA2B,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAElF,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,GAAG,kBAwBhF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { logs as otelLogs } from '@opentelemetry/api-logs';
|
|
2
|
+
import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
|
|
3
|
+
import { CompressionAlgorithm } from '@opentelemetry/otlp-exporter-base';
|
|
4
|
+
import { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';
|
|
5
|
+
export function registerOtelLoggerProvider(resource, otelLogsUrl) {
|
|
6
|
+
const loggerProvider = new LoggerProvider({
|
|
7
|
+
resource
|
|
8
|
+
});
|
|
9
|
+
if (!otelLogsUrl) {
|
|
10
|
+
// If no URL provided, return it disconnected.
|
|
11
|
+
return loggerProvider;
|
|
12
|
+
}
|
|
13
|
+
const logExporter = new OTLPLogExporter({
|
|
14
|
+
compression: CompressionAlgorithm.GZIP,
|
|
15
|
+
url: otelLogsUrl.href
|
|
16
|
+
});
|
|
17
|
+
// Add a processor to the logger provider
|
|
18
|
+
loggerProvider.addLogRecordProcessor(new BatchLogRecordProcessor(logExporter, {
|
|
19
|
+
/** The maximum batch size of every export. It must be smaller or equal to
|
|
20
|
+
* maxQueueSize. */ maxExportBatchSize: 1024,
|
|
21
|
+
/** The maximum queue size. After the size is reached log records are dropped. */ maxQueueSize: 4096
|
|
22
|
+
}));
|
|
23
|
+
otelLogs.setGlobalLoggerProvider(loggerProvider);
|
|
24
|
+
return loggerProvider;
|
|
25
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DiagnosticsMiddleware } from '@aztec-labs/foundation/json-rpc/server';
|
|
2
|
+
import type Koa from 'koa';
|
|
3
|
+
import { getJsonRpcServerMetrics } from './json_rpc_server_metrics.js';
|
|
4
|
+
export declare function getOtelJsonRpcPropagationMiddleware(scope?: string): (ctx: Koa.Context, next: () => Promise<void>) => Promise<void>;
|
|
5
|
+
export declare function getOtelJsonRpcDiagnosticsMiddleware(metricsProvider?: typeof getJsonRpcServerMetrics): DiagnosticsMiddleware;
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbF9wcm9wYWdhdGlvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL290ZWxfcHJvcGFnYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUdwRixPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQztBQUUzQixPQUFPLEVBQUUsdUJBQXVCLEVBQXNCLE1BQU0sOEJBQThCLENBQUM7QUFVM0Ysd0JBQWdCLG1DQUFtQyxDQUNqRCxLQUFLLFNBQWtCLEdBQ3RCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FtRGhFO0FBRUQsd0JBQWdCLG1DQUFtQyxDQUFDLGVBQWUsaUNBQTBCLEdBQUcscUJBQXFCLENBb0NwSCJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel_propagation.d.ts","sourceRoot":"","sources":["../src/otel_propagation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAGpF,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B,OAAO,EAAE,uBAAuB,EAAsB,MAAM,8BAA8B,CAAC;AAU3F,wBAAgB,mCAAmC,CACjD,KAAK,SAAkB,GACtB,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAmDhE;AAED,wBAAgB,mCAAmC,CAAC,eAAe,iCAA0B,GAAG,qBAAqB,CAoCpH"}
|