@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
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Logger } from '@aztec-labs/foundation/log';
|
|
2
|
+
import { type Context } from '@opentelemetry/api';
|
|
3
|
+
import type { SpanExporter } from '@opentelemetry/sdk-trace-base';
|
|
4
|
+
import { BatchSpanProcessor, type BufferConfig, type ReadableSpan, type Span } from '@opentelemetry/sdk-trace-node';
|
|
5
|
+
export type MonitoredBatchSpanProcessorConfig = BufferConfig & {
|
|
6
|
+
minTraceDurationMs?: number;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Wraps BatchSpanProcessor to emit warnings when spans are dropped due to a full queue.
|
|
10
|
+
* The standard BatchSpanProcessor silently discards spans when its internal queue reaches
|
|
11
|
+
* maxQueueSize, making telemetry data loss invisible to operators.
|
|
12
|
+
*/
|
|
13
|
+
export declare class MonitoredBatchSpanProcessor extends BatchSpanProcessor {
|
|
14
|
+
private readonly maxQueueSize;
|
|
15
|
+
private readonly maxExportBatchSize;
|
|
16
|
+
private readonly minTraceDurationMs;
|
|
17
|
+
private readonly log;
|
|
18
|
+
private readonly queue;
|
|
19
|
+
private droppedSinceLastWarning;
|
|
20
|
+
private totalDropped;
|
|
21
|
+
private lastWarningTime;
|
|
22
|
+
private shuttingDown;
|
|
23
|
+
constructor(exporter: SpanExporter, log: Logger, config?: MonitoredBatchSpanProcessorConfig);
|
|
24
|
+
onStart(span: Span, parentContext: Context): void;
|
|
25
|
+
onEnd(span: ReadableSpan): void;
|
|
26
|
+
shutdown(): Promise<void>;
|
|
27
|
+
private shouldDropShortSpan;
|
|
28
|
+
/** Mirrors the guards the SDK applies before buffering a span. Spans it discards outright never reach the
|
|
29
|
+
* queue and never reach the exporter, so counting them would leak the estimate upwards forever. */
|
|
30
|
+
private isQueued;
|
|
31
|
+
private maybeLogDropWarning;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmVkX2JhdGNoX3NwYW5fcHJvY2Vzc29yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbW9uaXRvcmVkX2JhdGNoX3NwYW5fcHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBOEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxJQUFJLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQWFwSCxNQUFNLE1BQU0saUNBQWlDLEdBQUcsWUFBWSxHQUFHO0lBQzdELGtCQUFrQixDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQzdCLENBQUM7QUFrQ0Y7Ozs7R0FJRztBQUNILHFCQUFhLDJCQUE0QixTQUFRLGtCQUFrQjtJQUNqRSxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBUztJQUN0QyxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFTO0lBQzVDLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQVM7SUFDNUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQVM7SUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQWE7SUFFbkMsT0FBTyxDQUFDLHVCQUF1QixDQUFLO0lBQ3BDLE9BQU8sQ0FBQyxZQUFZLENBQUs7SUFDekIsT0FBTyxDQUFDLGVBQWUsQ0FBSztJQUM1QixPQUFPLENBQUMsWUFBWSxDQUFTO0lBRTdCLFlBQVksUUFBUSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLGlDQUFpQyxFQVUxRjtJQUVRLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLEdBQUcsSUFBSSxDQUV6RDtJQUVRLEtBQUssQ0FBQyxJQUFJLEVBQUUsWUFBWSxHQUFHLElBQUksQ0FnQnZDO0lBRWMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FRdkM7SUFFRCxPQUFPLENBQUMsbUJBQW1CO0lBUTNCO3VHQUNtRztJQUNuRyxPQUFPLENBQUMsUUFBUTtJQUloQixPQUFPLENBQUMsbUJBQW1CO0NBa0I1QiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitored_batch_span_processor.d.ts","sourceRoot":"","sources":["../src/monitored_batch_span_processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,KAAK,OAAO,EAA8B,MAAM,oBAAoB,CAAC;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAapH,MAAM,MAAM,iCAAiC,GAAG,YAAY,GAAG;IAC7D,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAkCF;;;;GAIG;AACH,qBAAa,2BAA4B,SAAQ,kBAAkB;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IAEnC,OAAO,CAAC,uBAAuB,CAAK;IACpC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,YAAY,CAAS;IAE7B,YAAY,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iCAAiC,EAU1F;IAEQ,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI,CAEzD;IAEQ,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAgBvC;IAEc,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAQvC;IAED,OAAO,CAAC,mBAAmB;IAQ3B;uGACmG;IACnG,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,mBAAmB;CAkB5B"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { SpanStatusCode, TraceFlags } from '@opentelemetry/api';
|
|
2
|
+
import { hrTimeToMilliseconds } from '@opentelemetry/core';
|
|
3
|
+
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-node';
|
|
4
|
+
/** Minimum interval between drop warnings to avoid log spam. */ const DROP_WARNING_INTERVAL_MS = 30_000;
|
|
5
|
+
const DEFAULT_MIN_TRACE_DURATION_MS = 10;
|
|
6
|
+
const DEFAULT_MAX_QUEUE_SIZE = 65536;
|
|
7
|
+
/** Cap on the per-export batch size, so a large queue can actually be drained instead of dribbling out
|
|
8
|
+
* at the SDK default of 512 spans per scheduled export. Kept <= maxQueueSize per the BatchSpanProcessor contract. */ const DEFAULT_MAX_EXPORT_BATCH_SIZE = 4096;
|
|
9
|
+
/**
|
|
10
|
+
* Delegating exporter that reports how many spans left the queue.
|
|
11
|
+
*
|
|
12
|
+
* `BatchSpanProcessor` removes a batch from its internal buffer and hands it straight to
|
|
13
|
+
* `exporter.export()` — exactly once per batch — so this is an exact drain signal. Spans in flight are
|
|
14
|
+
* already off the queue, which matches how the SDK evaluates its own `maxQueueSize` limit.
|
|
15
|
+
*/ class DrainCountingExporter {
|
|
16
|
+
inner;
|
|
17
|
+
queue;
|
|
18
|
+
constructor(inner, queue){
|
|
19
|
+
this.inner = inner;
|
|
20
|
+
this.queue = queue;
|
|
21
|
+
}
|
|
22
|
+
export(spans, resultCallback) {
|
|
23
|
+
this.queue.size = Math.max(0, this.queue.size - spans.length);
|
|
24
|
+
this.inner.export(spans, resultCallback);
|
|
25
|
+
}
|
|
26
|
+
shutdown() {
|
|
27
|
+
return this.inner.shutdown();
|
|
28
|
+
}
|
|
29
|
+
forceFlush() {
|
|
30
|
+
return this.inner.forceFlush?.() ?? Promise.resolve();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Wraps BatchSpanProcessor to emit warnings when spans are dropped due to a full queue.
|
|
35
|
+
* The standard BatchSpanProcessor silently discards spans when its internal queue reaches
|
|
36
|
+
* maxQueueSize, making telemetry data loss invisible to operators.
|
|
37
|
+
*/ export class MonitoredBatchSpanProcessor extends BatchSpanProcessor {
|
|
38
|
+
maxQueueSize;
|
|
39
|
+
maxExportBatchSize;
|
|
40
|
+
minTraceDurationMs;
|
|
41
|
+
log;
|
|
42
|
+
queue;
|
|
43
|
+
droppedSinceLastWarning = 0;
|
|
44
|
+
totalDropped = 0;
|
|
45
|
+
lastWarningTime = 0;
|
|
46
|
+
shuttingDown = false;
|
|
47
|
+
constructor(exporter, log, config){
|
|
48
|
+
const maxQueueSize = config?.maxQueueSize ?? DEFAULT_MAX_QUEUE_SIZE;
|
|
49
|
+
const maxExportBatchSize = Math.min(config?.maxExportBatchSize ?? DEFAULT_MAX_EXPORT_BATCH_SIZE, maxQueueSize);
|
|
50
|
+
const queue = {
|
|
51
|
+
size: 0
|
|
52
|
+
};
|
|
53
|
+
super(new DrainCountingExporter(exporter, queue), {
|
|
54
|
+
...config,
|
|
55
|
+
maxQueueSize,
|
|
56
|
+
maxExportBatchSize
|
|
57
|
+
});
|
|
58
|
+
this.queue = queue;
|
|
59
|
+
this.maxQueueSize = maxQueueSize;
|
|
60
|
+
this.maxExportBatchSize = maxExportBatchSize;
|
|
61
|
+
this.minTraceDurationMs = Math.max(0, config?.minTraceDurationMs ?? DEFAULT_MIN_TRACE_DURATION_MS);
|
|
62
|
+
this.log = log;
|
|
63
|
+
}
|
|
64
|
+
onStart(span, parentContext) {
|
|
65
|
+
super.onStart(span, parentContext);
|
|
66
|
+
}
|
|
67
|
+
onEnd(span) {
|
|
68
|
+
if (this.shouldDropShortSpan(span)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (this.isQueued(span)) {
|
|
72
|
+
if (this.queue.size >= this.maxQueueSize) {
|
|
73
|
+
this.droppedSinceLastWarning++;
|
|
74
|
+
this.totalDropped++;
|
|
75
|
+
this.maybeLogDropWarning();
|
|
76
|
+
} else {
|
|
77
|
+
this.queue.size++;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
super.onEnd(span);
|
|
81
|
+
}
|
|
82
|
+
async shutdown() {
|
|
83
|
+
this.shuttingDown = true;
|
|
84
|
+
if (this.totalDropped > 0) {
|
|
85
|
+
this.log.warn(`BatchSpanProcessor shutting down with ${this.totalDropped} total spans dropped`, {
|
|
86
|
+
totalDropped: this.totalDropped
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
await super.shutdown();
|
|
90
|
+
}
|
|
91
|
+
shouldDropShortSpan(span) {
|
|
92
|
+
return this.minTraceDurationMs > 0 && span.status.code !== SpanStatusCode.ERROR && hrTimeToMilliseconds(span.duration) < this.minTraceDurationMs;
|
|
93
|
+
}
|
|
94
|
+
/** Mirrors the guards the SDK applies before buffering a span. Spans it discards outright never reach the
|
|
95
|
+
* queue and never reach the exporter, so counting them would leak the estimate upwards forever. */ isQueued(span) {
|
|
96
|
+
return !this.shuttingDown && (span.spanContext().traceFlags & TraceFlags.SAMPLED) !== 0;
|
|
97
|
+
}
|
|
98
|
+
maybeLogDropWarning() {
|
|
99
|
+
const now = Date.now();
|
|
100
|
+
if (now - this.lastWarningTime >= DROP_WARNING_INTERVAL_MS) {
|
|
101
|
+
this.log.warn(`BatchSpanProcessor dropping spans: queue full (maxQueueSize=${this.maxQueueSize}, ` + `maxExportBatchSize=${this.maxExportBatchSize}). ` + `${this.droppedSinceLastWarning} dropped since last warning, ${this.totalDropped} total.`, {
|
|
102
|
+
droppedSinceLastWarning: this.droppedSinceLastWarning,
|
|
103
|
+
totalDropped: this.totalDropped,
|
|
104
|
+
maxQueueSize: this.maxQueueSize,
|
|
105
|
+
maxExportBatchSize: this.maxExportBatchSize
|
|
106
|
+
});
|
|
107
|
+
this.droppedSinceLastWarning = 0;
|
|
108
|
+
this.lastWarningTime = now;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Meter } from './telemetry.js';
|
|
2
|
+
/** Monitors Node.js runtime metrics */
|
|
3
|
+
export declare class NodejsMetricsMonitor {
|
|
4
|
+
private meter;
|
|
5
|
+
private eventLoopDelayGauges;
|
|
6
|
+
private memoryGauges;
|
|
7
|
+
private eventLoopUilization;
|
|
8
|
+
private eventLoopTime;
|
|
9
|
+
private started;
|
|
10
|
+
private lastELU;
|
|
11
|
+
private eventLoopDelay;
|
|
12
|
+
constructor(meter: Meter);
|
|
13
|
+
start(): void;
|
|
14
|
+
stop(): void;
|
|
15
|
+
private measure;
|
|
16
|
+
private measureMemoryUsage;
|
|
17
|
+
private measureEventLoopDelay;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzX21ldHJpY3NfbW9uaXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25vZGVqc19tZXRyaWNzX21vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxLQUFLLEVBQXlCLEtBQUssRUFBa0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRyx1Q0FBdUM7QUFDdkMscUJBQWEsb0JBQW9CO0lBdUJuQixPQUFPLENBQUMsS0FBSztJQXRCekIsT0FBTyxDQUFDLG9CQUFvQixDQVExQjtJQUlGLE9BQU8sQ0FBQyxZQUFZLENBQW9FO0lBRXhGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBa0I7SUFDN0MsT0FBTyxDQUFDLGFBQWEsQ0FBZ0I7SUFFckMsT0FBTyxDQUFDLE9BQU8sQ0FBUztJQUV4QixPQUFPLENBQUMsT0FBTyxDQUFtQztJQUNsRCxPQUFPLENBQUMsY0FBYyxDQUFvQjtJQUUxQyxZQUFvQixLQUFLLEVBQUUsS0FBSyxFQXVCL0I7SUFFRCxLQUFLLElBQUksSUFBSSxDQVlaO0lBRUQsSUFBSSxJQUFJLElBQUksQ0FZWDtJQUVELE9BQU8sQ0FBQyxPQUFPLENBR2I7SUFFRixPQUFPLENBQUMsa0JBQWtCLENBT3hCO0lBRUYsT0FBTyxDQUFDLHFCQUFxQixDQXlCM0I7Q0FDSCJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodejs_metrics_monitor.d.ts","sourceRoot":"","sources":["../src/nodejs_metrics_monitor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAyB,KAAK,EAAkC,MAAM,gBAAgB,CAAC;AAEnG,uCAAuC;AACvC,qBAAa,oBAAoB;IAuBnB,OAAO,CAAC,KAAK;IAtBzB,OAAO,CAAC,oBAAoB,CAQ1B;IAIF,OAAO,CAAC,YAAY,CAAoE;IAExF,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,cAAc,CAAoB;IAE1C,YAAoB,KAAK,EAAE,KAAK,EAuB/B;IAED,KAAK,IAAI,IAAI,CAYZ;IAED,IAAI,IAAI,IAAI,CAYX;IAED,OAAO,CAAC,OAAO,CAGb;IAEF,OAAO,CAAC,kBAAkB,CAOxB;IAEF,OAAO,CAAC,qBAAqB,CAyB3B;CACH"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { monitorEventLoopDelay, performance } from 'node:perf_hooks';
|
|
2
|
+
import * as Attributes from './attributes.js';
|
|
3
|
+
import { createUpDownCounterWithDefault } from './metric-utils.js';
|
|
4
|
+
import * as Metrics from './metrics.js';
|
|
5
|
+
/** Monitors Node.js runtime metrics */ export class NodejsMetricsMonitor {
|
|
6
|
+
meter;
|
|
7
|
+
eventLoopDelayGauges;
|
|
8
|
+
// skip `rss` because that's already tracked by @opentelemetry/host-metrics
|
|
9
|
+
// description of each field here https://nodejs.org/api/process.html#processmemoryusage
|
|
10
|
+
memoryGauges;
|
|
11
|
+
eventLoopUilization;
|
|
12
|
+
eventLoopTime;
|
|
13
|
+
started;
|
|
14
|
+
lastELU;
|
|
15
|
+
eventLoopDelay;
|
|
16
|
+
constructor(meter){
|
|
17
|
+
this.meter = meter;
|
|
18
|
+
this.started = false;
|
|
19
|
+
this.measure = (obs)=>{
|
|
20
|
+
this.measureMemoryUsage(obs);
|
|
21
|
+
this.measureEventLoopDelay(obs);
|
|
22
|
+
};
|
|
23
|
+
this.measureMemoryUsage = (observer)=>{
|
|
24
|
+
const mem = process.memoryUsage();
|
|
25
|
+
observer.observe(this.memoryGauges.heapUsed, mem.heapUsed);
|
|
26
|
+
observer.observe(this.memoryGauges.heapTotal, mem.heapTotal);
|
|
27
|
+
observer.observe(this.memoryGauges.arrayBuffers, mem.arrayBuffers);
|
|
28
|
+
observer.observe(this.memoryGauges.external, mem.external);
|
|
29
|
+
};
|
|
30
|
+
this.measureEventLoopDelay = (obs)=>{
|
|
31
|
+
const newELU = performance.eventLoopUtilization();
|
|
32
|
+
const delta = performance.eventLoopUtilization(newELU, this.lastELU);
|
|
33
|
+
this.lastELU = newELU;
|
|
34
|
+
// `utilization` [0,1] represents how much the event loop is busy vs waiting for new events to come in
|
|
35
|
+
// This should be corelated with CPU usage to gauge the performance characteristics of services
|
|
36
|
+
// 100% utilization leads to high latency because the event loop is _always_ busy, there's no breathing room for events to be processed quickly.
|
|
37
|
+
// Docs and examples:
|
|
38
|
+
// - https://nodesource.com/blog/event-loop-utilization-nodejs
|
|
39
|
+
// - https://youtu.be/WetXnEPraYM
|
|
40
|
+
obs.observe(this.eventLoopUilization, delta.utilization);
|
|
41
|
+
this.eventLoopTime.add(Math.trunc(delta.idle), {
|
|
42
|
+
[Attributes.NODEJS_EVENT_LOOP_STATE]: 'idle'
|
|
43
|
+
});
|
|
44
|
+
this.eventLoopTime.add(Math.trunc(delta.active), {
|
|
45
|
+
[Attributes.NODEJS_EVENT_LOOP_STATE]: 'active'
|
|
46
|
+
});
|
|
47
|
+
safeObserveInt(obs, this.eventLoopDelayGauges.min, this.eventLoopDelay.min);
|
|
48
|
+
safeObserveInt(obs, this.eventLoopDelayGauges.mean, this.eventLoopDelay.mean);
|
|
49
|
+
safeObserveInt(obs, this.eventLoopDelayGauges.max, this.eventLoopDelay.max);
|
|
50
|
+
safeObserveInt(obs, this.eventLoopDelayGauges.stddev, this.eventLoopDelay.stddev);
|
|
51
|
+
safeObserveInt(obs, this.eventLoopDelayGauges.p50, this.eventLoopDelay.percentile(50));
|
|
52
|
+
safeObserveInt(obs, this.eventLoopDelayGauges.p90, this.eventLoopDelay.percentile(90));
|
|
53
|
+
safeObserveInt(obs, this.eventLoopDelayGauges.p99, this.eventLoopDelay.percentile(99));
|
|
54
|
+
this.eventLoopDelay.reset();
|
|
55
|
+
};
|
|
56
|
+
this.eventLoopDelayGauges = {
|
|
57
|
+
min: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_MIN),
|
|
58
|
+
mean: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_MEAN),
|
|
59
|
+
max: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_MAX),
|
|
60
|
+
stddev: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_STDDEV),
|
|
61
|
+
p50: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_P50),
|
|
62
|
+
p90: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_P90),
|
|
63
|
+
p99: meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_DELAY_P99)
|
|
64
|
+
};
|
|
65
|
+
this.eventLoopUilization = meter.createObservableGauge(Metrics.NODEJS_EVENT_LOOP_UTILIZATION);
|
|
66
|
+
this.eventLoopTime = createUpDownCounterWithDefault(meter, Metrics.NODEJS_EVENT_LOOP_TIME, {
|
|
67
|
+
[Attributes.NODEJS_EVENT_LOOP_STATE]: [
|
|
68
|
+
'idle',
|
|
69
|
+
'active'
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
this.eventLoopDelay = monitorEventLoopDelay();
|
|
73
|
+
this.memoryGauges = {
|
|
74
|
+
heapUsed: meter.createObservableGauge(Metrics.NODEJS_MEMORY_HEAP_USAGE),
|
|
75
|
+
heapTotal: meter.createObservableGauge(Metrics.NODEJS_MEMORY_HEAP_TOTAL),
|
|
76
|
+
arrayBuffers: meter.createObservableGauge(Metrics.NODEJS_MEMORY_BUFFER_USAGE),
|
|
77
|
+
external: meter.createObservableGauge(Metrics.NODEJS_MEMORY_NATIVE_USAGE)
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
start() {
|
|
81
|
+
if (this.started) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
this.lastELU = performance.eventLoopUtilization();
|
|
85
|
+
this.eventLoopDelay.enable();
|
|
86
|
+
this.meter.addBatchObservableCallback(this.measure, [
|
|
87
|
+
this.eventLoopUilization,
|
|
88
|
+
...Object.values(this.eventLoopDelayGauges),
|
|
89
|
+
...Object.values(this.memoryGauges)
|
|
90
|
+
]);
|
|
91
|
+
}
|
|
92
|
+
stop() {
|
|
93
|
+
if (!this.started) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
this.meter.removeBatchObservableCallback(this.measure, [
|
|
97
|
+
this.eventLoopUilization,
|
|
98
|
+
...Object.values(this.eventLoopDelayGauges),
|
|
99
|
+
...Object.values(this.memoryGauges)
|
|
100
|
+
]);
|
|
101
|
+
this.eventLoopDelay.disable();
|
|
102
|
+
this.eventLoopDelay.reset();
|
|
103
|
+
this.lastELU = undefined;
|
|
104
|
+
}
|
|
105
|
+
measure;
|
|
106
|
+
measureMemoryUsage;
|
|
107
|
+
measureEventLoopDelay;
|
|
108
|
+
}
|
|
109
|
+
function safeObserveInt(observer, metric, value, attrs) {
|
|
110
|
+
// discard NaN, Infinity, -Infinity
|
|
111
|
+
if (!Number.isFinite(value)) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
observer.observe(metric, Math.trunc(value), attrs);
|
|
115
|
+
}
|
package/dest/noop.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Context, type Span, type Tracer } from '@opentelemetry/api';
|
|
2
|
+
import type { Meter, TelemetryClient } from './telemetry.js';
|
|
3
|
+
export declare class NoopTelemetryClient implements TelemetryClient {
|
|
4
|
+
private meter;
|
|
5
|
+
setExportedPublicTelemetry(_prefixes: string[]): void;
|
|
6
|
+
setPublicTelemetryCollectFrom(_roles: string[]): void;
|
|
7
|
+
getMeter(): Meter;
|
|
8
|
+
getTracer(): Tracer;
|
|
9
|
+
stop(): Promise<void>;
|
|
10
|
+
flush(): Promise<void>;
|
|
11
|
+
isEnabled(): boolean;
|
|
12
|
+
getTraceContext(): string | undefined;
|
|
13
|
+
extractPropagatedContext(_traceContext: string): Context | undefined;
|
|
14
|
+
}
|
|
15
|
+
export declare class NoopTracer implements Tracer {
|
|
16
|
+
startSpan(): Span;
|
|
17
|
+
startActiveSpan<F extends (...args: any[]) => any>(_name: string, ...args: unknown[]): ReturnType<F>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25vb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFvQixLQUFLLE1BQU0sRUFBbUIsTUFBTSxvQkFBb0IsQ0FBQztBQUc3RyxPQUFPLEtBQUssRUFHVixLQUFLLEVBR0wsZUFBZSxFQUVoQixNQUFNLGdCQUFnQixDQUFDO0FBeUN4QixxQkFBYSxtQkFBb0IsWUFBVyxlQUFlO0lBQ3pELE9BQU8sQ0FBQyxLQUFLLENBQW1CO0lBRWhDLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUc7SUFDeEQsNkJBQTZCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBRztJQUV4RCxRQUFRLElBQUksS0FBSyxDQUVoQjtJQUVELFNBQVMsSUFBSSxNQUFNLENBRWxCO0lBRUQsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFcEI7SUFFRCxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUVyQjtJQUVELFNBQVMsWUFFUjtJQUVELGVBQWUsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUVwQztJQUVELHdCQUF3QixDQUFDLGFBQWEsRUFBRSxNQUFNLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FFbkU7Q0FDRjtBQUtELHFCQUFhLFVBQVcsWUFBVyxNQUFNO0lBQ3ZDLFNBQVMsSUFBSSxJQUFJLENBRWhCO0lBRUQsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FJbkc7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noop.d.ts","sourceRoot":"","sources":["../src/noop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAoB,KAAK,MAAM,EAAmB,MAAM,oBAAoB,CAAC;AAG7G,OAAO,KAAK,EAGV,KAAK,EAGL,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AAyCxB,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,KAAK,CAAmB;IAEhC,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAG;IACxD,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAG;IAExD,QAAQ,IAAI,KAAK,CAEhB;IAED,SAAS,IAAI,MAAM,CAElB;IAED,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpB;IAED,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;IAED,SAAS,YAER;IAED,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEnE;CACF;AAKD,qBAAa,UAAW,YAAW,MAAM;IACvC,SAAS,IAAI,IAAI,CAEhB;IAED,eAAe,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAInG;CACF"}
|
package/dest/noop.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { createNoopMeter } from '@opentelemetry/api';
|
|
2
|
+
/** A no-op meter that implements our custom Meter interface */ class NoopMeter {
|
|
3
|
+
otelMeter = createNoopMeter();
|
|
4
|
+
createGauge(_metric) {
|
|
5
|
+
return this.otelMeter.createGauge('');
|
|
6
|
+
}
|
|
7
|
+
createObservableGauge(_metric) {
|
|
8
|
+
return this.otelMeter.createObservableGauge('');
|
|
9
|
+
}
|
|
10
|
+
createHistogram(_metric, _extraOptions) {
|
|
11
|
+
return this.otelMeter.createHistogram('');
|
|
12
|
+
}
|
|
13
|
+
createUpDownCounter(_metric) {
|
|
14
|
+
return this.otelMeter.createUpDownCounter('');
|
|
15
|
+
}
|
|
16
|
+
createObservableUpDownCounter(_metric) {
|
|
17
|
+
return this.otelMeter.createObservableUpDownCounter('');
|
|
18
|
+
}
|
|
19
|
+
addBatchObservableCallback(callback, observables) {
|
|
20
|
+
this.otelMeter.addBatchObservableCallback(callback, observables);
|
|
21
|
+
}
|
|
22
|
+
removeBatchObservableCallback(callback, observables) {
|
|
23
|
+
this.otelMeter.removeBatchObservableCallback(callback, observables);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class NoopTelemetryClient {
|
|
27
|
+
meter = new NoopMeter();
|
|
28
|
+
setExportedPublicTelemetry(_prefixes) {}
|
|
29
|
+
setPublicTelemetryCollectFrom(_roles) {}
|
|
30
|
+
getMeter() {
|
|
31
|
+
return this.meter;
|
|
32
|
+
}
|
|
33
|
+
getTracer() {
|
|
34
|
+
return new NoopTracer();
|
|
35
|
+
}
|
|
36
|
+
stop() {
|
|
37
|
+
return Promise.resolve();
|
|
38
|
+
}
|
|
39
|
+
flush() {
|
|
40
|
+
return Promise.resolve();
|
|
41
|
+
}
|
|
42
|
+
isEnabled() {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
getTraceContext() {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
extractPropagatedContext(_traceContext) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// @opentelemetry/api internally uses NoopTracer and NoopSpan but they're not exported
|
|
53
|
+
// make our own versions
|
|
54
|
+
// https://github.com/open-telemetry/opentelemetry-js/issues/4518#issuecomment-2179405444
|
|
55
|
+
export class NoopTracer {
|
|
56
|
+
startSpan() {
|
|
57
|
+
return new NoopSpan();
|
|
58
|
+
}
|
|
59
|
+
startActiveSpan(_name, ...args) {
|
|
60
|
+
// there are three different signatures for startActiveSpan, grab the function, we don't care about the rest
|
|
61
|
+
const fn = args.find((arg)=>typeof arg === 'function');
|
|
62
|
+
return fn(new NoopSpan());
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
class NoopSpan {
|
|
66
|
+
recording = true;
|
|
67
|
+
addEvent() {
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
addLink() {
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
addLinks() {
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
end() {
|
|
77
|
+
this.recording = false;
|
|
78
|
+
}
|
|
79
|
+
isRecording() {
|
|
80
|
+
return this.recording;
|
|
81
|
+
}
|
|
82
|
+
recordException() {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
setAttribute() {
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
setAttributes() {
|
|
89
|
+
return this;
|
|
90
|
+
}
|
|
91
|
+
setStatus() {
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
spanContext() {
|
|
95
|
+
return {
|
|
96
|
+
spanId: '',
|
|
97
|
+
traceId: '',
|
|
98
|
+
traceFlags: 0
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
updateName() {
|
|
102
|
+
return this;
|
|
103
|
+
}
|
|
104
|
+
}
|
package/dest/otel.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type Logger } from '@aztec-labs/foundation/log';
|
|
2
|
+
import { type Context, type Tracer, type TracerProvider } from '@opentelemetry/api';
|
|
3
|
+
import { HostMetrics } from '@opentelemetry/host-metrics';
|
|
4
|
+
import type { IResource } from '@opentelemetry/resources';
|
|
5
|
+
import type { LoggerProvider } from '@opentelemetry/sdk-logs';
|
|
6
|
+
import { MeterProvider, type PeriodicExportingMetricReaderOptions } from '@opentelemetry/sdk-metrics';
|
|
7
|
+
import type { TelemetryClientConfig } from './config.js';
|
|
8
|
+
import { NodejsMetricsMonitor } from './nodejs_metrics_monitor.js';
|
|
9
|
+
import { PublicOtelFilterMetricExporter } from './otel_filter_metric_exporter.js';
|
|
10
|
+
import type { Meter, TelemetryClient } from './telemetry.js';
|
|
11
|
+
export type OpenTelemetryClientFactory = (resource: IResource, log: Logger) => OpenTelemetryClient;
|
|
12
|
+
export declare class OpenTelemetryClient implements TelemetryClient {
|
|
13
|
+
private resource;
|
|
14
|
+
private meterProvider;
|
|
15
|
+
private traceProvider;
|
|
16
|
+
private loggerProvider;
|
|
17
|
+
private publicMetricExporter;
|
|
18
|
+
private log;
|
|
19
|
+
hostMetrics: HostMetrics | undefined;
|
|
20
|
+
nodejsMetricsMonitor: NodejsMetricsMonitor | undefined;
|
|
21
|
+
private meters;
|
|
22
|
+
private tracers;
|
|
23
|
+
/** Memoized shutdown promise. The telemetry client is shared between the aztec-node and an embedded prover-node,
|
|
24
|
+
* so stop() can be invoked more than once; the providers throw "shutdown may only be called once" and
|
|
25
|
+
* "invalid attempt to force flush after shutdown" if that happens. Guarding here makes stop()/flush() idempotent. */
|
|
26
|
+
private stopPromise;
|
|
27
|
+
protected constructor(resource: IResource, meterProvider: MeterProvider, traceProvider: TracerProvider, loggerProvider: LoggerProvider | undefined, publicMetricExporter: PublicOtelFilterMetricExporter | undefined, log: Logger);
|
|
28
|
+
setExportedPublicTelemetry(metrics: string[]): void;
|
|
29
|
+
setPublicTelemetryCollectFrom(roles: string[]): void;
|
|
30
|
+
getMeter(name: string): Meter;
|
|
31
|
+
getTracer(name: string): Tracer;
|
|
32
|
+
start(): void;
|
|
33
|
+
isEnabled(): boolean;
|
|
34
|
+
flush(): Promise<void>;
|
|
35
|
+
stop(): Promise<void>;
|
|
36
|
+
private doStop;
|
|
37
|
+
getTraceContext(): string | undefined;
|
|
38
|
+
extractPropagatedContext(traceContext: string): Context;
|
|
39
|
+
static createMeterProvider(resource: IResource, exporters: Array<PeriodicExportingMetricReaderOptions>): MeterProvider;
|
|
40
|
+
private static getCustomClientFactory;
|
|
41
|
+
static createAndStart(config: TelemetryClientConfig, log: Logger): OpenTelemetryClient;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL290ZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixLQUFLLE1BQU0sRUFBcUIsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRixPQUFPLEVBQ0wsS0FBSyxPQUFPLEVBS1osS0FBSyxNQUFNLEVBQ1gsS0FBSyxjQUFjLEVBTXBCLE1BQU0sb0JBQW9CLENBQUM7QUFJNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFHTCxhQUFhLEVBRWIsS0FBSyxvQ0FBb0MsRUFFMUMsTUFBTSw0QkFBNEIsQ0FBQztBQUlwQyxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQTRCLDhCQUE4QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHNUcsT0FBTyxLQUFLLEVBR1YsS0FBSyxFQUdMLGVBQWUsRUFFaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQXlDeEIsTUFBTSxNQUFNLDBCQUEwQixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLG1CQUFtQixDQUFDO0FBRW5HLHFCQUFhLG1CQUFvQixZQUFXLGVBQWU7SUFZdkQsT0FBTyxDQUFDLFFBQVE7SUFDaEIsT0FBTyxDQUFDLGFBQWE7SUFDckIsT0FBTyxDQUFDLGFBQWE7SUFDckIsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLG9CQUFvQjtJQUM1QixPQUFPLENBQUMsR0FBRztJQWhCYixXQUFXLEVBQUUsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUNyQyxvQkFBb0IsRUFBRSxvQkFBb0IsR0FBRyxTQUFTLENBQUM7SUFDdkQsT0FBTyxDQUFDLE1BQU0sQ0FBOEQ7SUFDNUUsT0FBTyxDQUFDLE9BQU8sQ0FBa0Q7SUFFakU7O3lIQUVxSDtJQUNySCxPQUFPLENBQUMsV0FBVyxDQUE0QjtJQUUvQyxTQUFTLGFBQ0MsUUFBUSxFQUFFLFNBQVMsRUFDbkIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGNBQWMsRUFDN0IsY0FBYyxFQUFFLGNBQWMsR0FBRyxTQUFTLEVBQzFDLG9CQUFvQixFQUFFLDhCQUE4QixHQUFHLFNBQVMsRUFDaEUsR0FBRyxFQUFFLE1BQU0sRUFDakI7SUFFSiwwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUVsRDtJQUVELDZCQUE2QixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBRW5EO0lBRUQsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsS0FBSyxDQVE1QjtJQUVELFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FPOUI7SUFFTSxLQUFLLFNBOEJYO0lBRU0sU0FBUyxZQUVmO0lBRVksS0FBSyxrQkFVakI7SUFFTSxJQUFJLGtCQUVWO1lBRWEsTUFBTTtJQWtCYixlQUFlLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FJM0M7SUFFTSx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FLN0Q7SUFFRCxPQUFjLG1CQUFtQixDQUMvQixRQUFRLEVBQUUsU0FBUyxFQUNuQixTQUFTLEVBQUUsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLEdBQ3JELGFBQWEsQ0E4S2Y7SUFFRCxPQUFPLENBQUMsTUFBTSxDQUFDLHNCQUFzQjtJQXdFckMsT0FBYyxjQUFjLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsbUJBQW1CLENBUTVGO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAqB,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EACL,KAAK,OAAO,EAKZ,KAAK,MAAM,EACX,KAAK,cAAc,EAMpB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAGL,aAAa,EAEb,KAAK,oCAAoC,EAE1C,MAAM,4BAA4B,CAAC;AAIpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAA4B,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAG5G,OAAO,KAAK,EAGV,KAAK,EAGL,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AAyCxB,MAAM,MAAM,0BAA0B,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,mBAAmB,CAAC;AAEnG,qBAAa,mBAAoB,YAAW,eAAe;IAYvD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,GAAG;IAhBb,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACvD,OAAO,CAAC,MAAM,CAA8D;IAC5E,OAAO,CAAC,OAAO,CAAkD;IAEjE;;yHAEqH;IACrH,OAAO,CAAC,WAAW,CAA4B;IAE/C,SAAS,aACC,QAAQ,EAAE,SAAS,EACnB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,cAAc,EAC7B,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,oBAAoB,EAAE,8BAA8B,GAAG,SAAS,EAChE,GAAG,EAAE,MAAM,EACjB;IAEJ,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAElD;IAED,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAEnD;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAQ5B;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9B;IAEM,KAAK,SA8BX;IAEM,SAAS,YAEf;IAEY,KAAK,kBAUjB;IAEM,IAAI,kBAEV;YAEa,MAAM;IAkBb,eAAe,IAAI,MAAM,GAAG,SAAS,CAI3C;IAEM,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAK7D;IAED,OAAc,mBAAmB,CAC/B,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,KAAK,CAAC,oCAAoC,CAAC,GACrD,aAAa,CA8Kf;IAED,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAwErC,OAAc,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAQ5F;CACF"}
|