@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.
Files changed (105) hide show
  1. package/dest/attributes.d.ts +143 -0
  2. package/dest/attributes.d.ts.map +1 -0
  3. package/dest/attributes.js +91 -0
  4. package/dest/bench.d.ts +34 -0
  5. package/dest/bench.d.ts.map +1 -0
  6. package/dest/bench.js +115 -0
  7. package/dest/config.d.ts +21 -0
  8. package/dest/config.d.ts.map +1 -0
  9. package/dest/config.js +85 -0
  10. package/dest/index.d.ts +12 -0
  11. package/dest/index.d.ts.map +1 -0
  12. package/dest/index.js +11 -0
  13. package/dest/json_rpc_server_metrics.d.ts +27 -0
  14. package/dest/json_rpc_server_metrics.d.ts.map +1 -0
  15. package/dest/json_rpc_server_metrics.js +154 -0
  16. package/dest/l1_metrics.d.ts +17 -0
  17. package/dest/l1_metrics.d.ts.map +1 -0
  18. package/dest/l1_metrics.js +54 -0
  19. package/dest/lmdb_metrics.d.ts +18 -0
  20. package/dest/lmdb_metrics.d.ts.map +1 -0
  21. package/dest/lmdb_metrics.js +34 -0
  22. package/dest/metric-utils.d.ts +24 -0
  23. package/dest/metric-utils.d.ts.map +1 -0
  24. package/dest/metric-utils.js +59 -0
  25. package/dest/metrics.d.ts +338 -0
  26. package/dest/metrics.d.ts.map +1 -0
  27. package/dest/metrics.js +1702 -0
  28. package/dest/monitored_batch_span_processor.d.ts +33 -0
  29. package/dest/monitored_batch_span_processor.d.ts.map +1 -0
  30. package/dest/monitored_batch_span_processor.js +111 -0
  31. package/dest/nodejs_metrics_monitor.d.ts +19 -0
  32. package/dest/nodejs_metrics_monitor.d.ts.map +1 -0
  33. package/dest/nodejs_metrics_monitor.js +115 -0
  34. package/dest/noop.d.ts +19 -0
  35. package/dest/noop.d.ts.map +1 -0
  36. package/dest/noop.js +104 -0
  37. package/dest/otel.d.ts +43 -0
  38. package/dest/otel.d.ts.map +1 -0
  39. package/dest/otel.js +537 -0
  40. package/dest/otel_filter_metric_exporter.d.ts +20 -0
  41. package/dest/otel_filter_metric_exporter.d.ts.map +1 -0
  42. package/dest/otel_filter_metric_exporter.js +67 -0
  43. package/dest/otel_logger_provider.d.ts +4 -0
  44. package/dest/otel_logger_provider.d.ts.map +1 -0
  45. package/dest/otel_logger_provider.js +25 -0
  46. package/dest/otel_propagation.d.ts +6 -0
  47. package/dest/otel_propagation.d.ts.map +1 -0
  48. package/dest/otel_propagation.js +102 -0
  49. package/dest/otel_resource.d.ts +3 -0
  50. package/dest/otel_resource.d.ts.map +1 -0
  51. package/dest/otel_resource.js +53 -0
  52. package/dest/prom_otel_adapter.d.ts +176 -0
  53. package/dest/prom_otel_adapter.d.ts.map +1 -0
  54. package/dest/prom_otel_adapter.js +292 -0
  55. package/dest/start.d.ts +7 -0
  56. package/dest/start.d.ts.map +1 -0
  57. package/dest/start.js +25 -0
  58. package/dest/telemetry.d.ts +149 -0
  59. package/dest/telemetry.d.ts.map +1 -0
  60. package/dest/telemetry.js +139 -0
  61. package/dest/vendor/attributes.d.ts +6 -0
  62. package/dest/vendor/attributes.d.ts.map +1 -0
  63. package/dest/vendor/attributes.js +6 -0
  64. package/dest/vendor/otel-pino-stream.d.ts +40 -0
  65. package/dest/vendor/otel-pino-stream.d.ts.map +1 -0
  66. package/dest/vendor/otel-pino-stream.js +229 -0
  67. package/dest/with_tracer.d.ts +33 -0
  68. package/dest/with_tracer.d.ts.map +1 -0
  69. package/dest/with_tracer.js +32 -0
  70. package/dest/wrappers/fetch.d.ts +16 -0
  71. package/dest/wrappers/fetch.d.ts.map +1 -0
  72. package/dest/wrappers/fetch.js +42 -0
  73. package/dest/wrappers/index.d.ts +3 -0
  74. package/dest/wrappers/index.d.ts.map +1 -0
  75. package/dest/wrappers/index.js +2 -0
  76. package/dest/wrappers/json_rpc_server.d.ts +4 -0
  77. package/dest/wrappers/json_rpc_server.d.ts.map +1 -0
  78. package/dest/wrappers/json_rpc_server.js +16 -0
  79. package/package.json +95 -0
  80. package/src/attributes.ts +174 -0
  81. package/src/bench.ts +168 -0
  82. package/src/config.ts +135 -0
  83. package/src/index.ts +11 -0
  84. package/src/json_rpc_server_metrics.ts +150 -0
  85. package/src/l1_metrics.ts +64 -0
  86. package/src/lmdb_metrics.ts +45 -0
  87. package/src/metric-utils.ts +75 -0
  88. package/src/metrics.ts +1802 -0
  89. package/src/monitored_batch_span_processor.ts +147 -0
  90. package/src/nodejs_metrics_monitor.ts +135 -0
  91. package/src/noop.ts +152 -0
  92. package/src/otel.ts +482 -0
  93. package/src/otel_filter_metric_exporter.ts +80 -0
  94. package/src/otel_logger_provider.ts +31 -0
  95. package/src/otel_propagation.ts +107 -0
  96. package/src/otel_resource.ts +71 -0
  97. package/src/prom_otel_adapter.ts +450 -0
  98. package/src/start.ts +42 -0
  99. package/src/telemetry.ts +348 -0
  100. package/src/vendor/attributes.ts +6 -0
  101. package/src/vendor/otel-pino-stream.ts +279 -0
  102. package/src/with_tracer.ts +35 -0
  103. package/src/wrappers/fetch.ts +50 -0
  104. package/src/wrappers/index.ts +2 -0
  105. package/src/wrappers/json_rpc_server.ts +26 -0
@@ -0,0 +1,102 @@
1
+ import { Timer } from '@aztec-labs/foundation/timer';
2
+ import { ROOT_CONTEXT, SpanKind, SpanStatusCode, propagation } from '@opentelemetry/api';
3
+ import { getJsonRpcServerMetrics, splitJsonRpcMethod } from './json_rpc_server_metrics.js';
4
+ import { getTelemetryClient } from './start.js';
5
+ import { ATTR_JSONRPC_ERROR_CODE, ATTR_JSONRPC_ERROR_MSG, ATTR_JSONRPC_METHOD, ATTR_JSONRPC_REQUEST_ID, ATTR_JSONRPC_SERVICE } from './vendor/attributes.js';
6
+ export function getOtelJsonRpcPropagationMiddleware(scope = 'JsonRpcServer') {
7
+ return function otelJsonRpcPropagation(ctx, next) {
8
+ const tracer = getTelemetryClient().getTracer(scope);
9
+ const context = propagation.extract(ROOT_CONTEXT, ctx.request.headers);
10
+ return tracer.startActiveSpan(`JsonRpcServer`, {
11
+ kind: SpanKind.SERVER
12
+ }, context, async (span)=>{
13
+ if (ctx.id) {
14
+ span.setAttribute(ATTR_JSONRPC_REQUEST_ID, ctx.id);
15
+ }
16
+ try {
17
+ await next();
18
+ const requestBody = ctx.request.body;
19
+ if (requestBody && typeof requestBody === 'object' && !Array.isArray(requestBody) && 'method' in requestBody) {
20
+ const fullMethod = requestBody.method;
21
+ if (typeof fullMethod === 'string') {
22
+ const [service, method] = splitJsonRpcMethod(fullMethod);
23
+ span.updateName(`JsonRpcServer.${service ? `${service}.` : ''}${method}`);
24
+ span.setAttribute(ATTR_JSONRPC_METHOD, method);
25
+ if (service) {
26
+ span.setAttribute(ATTR_JSONRPC_SERVICE, service);
27
+ }
28
+ }
29
+ } else if (Array.isArray(requestBody)) {
30
+ span.updateName(`JsonRpcServer.batch`);
31
+ }
32
+ const err = ctx.body.error?.message;
33
+ const code = ctx.body.error?.code;
34
+ if (err) {
35
+ span.setStatus({
36
+ code: SpanStatusCode.ERROR,
37
+ message: err
38
+ });
39
+ span.setAttribute(ATTR_JSONRPC_ERROR_CODE, code);
40
+ span.setAttribute(ATTR_JSONRPC_ERROR_MSG, err);
41
+ } else {
42
+ span.setStatus({
43
+ code: SpanStatusCode.OK
44
+ });
45
+ }
46
+ } catch (err) {
47
+ span.setStatus({
48
+ code: SpanStatusCode.ERROR,
49
+ message: String(err)
50
+ });
51
+ } finally{
52
+ span.end();
53
+ }
54
+ });
55
+ };
56
+ }
57
+ export function getOtelJsonRpcDiagnosticsMiddleware(metricsProvider = getJsonRpcServerMetrics) {
58
+ return function otelJsonRpcDiagnostics(ctx, next) {
59
+ const [service, method] = splitJsonRpcMethod(ctx.method);
60
+ const scope = service ?? 'UnknownHandler';
61
+ const tracer = getTelemetryClient().getTracer(scope);
62
+ const attributes = {
63
+ ...service === undefined ? {} : {
64
+ [ATTR_JSONRPC_SERVICE]: service
65
+ },
66
+ [ATTR_JSONRPC_METHOD]: method
67
+ };
68
+ return tracer.startActiveSpan(`${scope}.${method}`, {
69
+ kind: SpanKind.INTERNAL,
70
+ attributes
71
+ }, async (span)=>{
72
+ const timer = new Timer();
73
+ let ok = false;
74
+ if (ctx.id !== null) {
75
+ span.setAttribute(ATTR_JSONRPC_REQUEST_ID, ctx.id);
76
+ }
77
+ try {
78
+ await next();
79
+ ok = true;
80
+ span.setStatus({
81
+ code: SpanStatusCode.OK
82
+ });
83
+ } catch (err) {
84
+ span.setStatus({
85
+ code: SpanStatusCode.ERROR,
86
+ message: err instanceof Error ? err.message : String(err)
87
+ });
88
+ if (typeof err === 'string' || err instanceof Error) {
89
+ span.recordException(err);
90
+ }
91
+ throw err;
92
+ } finally{
93
+ const metrics = metricsProvider();
94
+ metrics.recordRequest(ctx.method, timer.ms(), ok);
95
+ if (ctx.requestValidationDurationMs !== undefined && ctx.requestValidationSucceeded !== undefined) {
96
+ metrics.recordRequestValidation(ctx.method, ctx.requestValidationDurationMs, ctx.requestValidationSucceeded);
97
+ }
98
+ span.end();
99
+ }
100
+ });
101
+ };
102
+ }
@@ -0,0 +1,3 @@
1
+ import { type IResource } from '@opentelemetry/resources';
2
+ export declare function getOtelResource(): IResource;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbF9yZXNvdXJjZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL290ZWxfcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLEtBQUssU0FBUyxFQU1mLE1BQU0sMEJBQTBCLENBQUM7QUFxQmxDLHdCQUFnQixlQUFlLElBQUksU0FBUyxDQWUzQyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel_resource.d.ts","sourceRoot":"","sources":["../src/otel_resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EAMf,MAAM,0BAA0B,CAAC;AAqBlC,wBAAgB,eAAe,IAAI,SAAS,CAe3C"}
@@ -0,0 +1,53 @@
1
+ import { Resource, detectResourcesSync, envDetectorSync, osDetectorSync, serviceInstanceIdDetectorSync } from '@opentelemetry/resources';
2
+ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
3
+ import { readFileSync } from 'fs';
4
+ import { dirname, resolve } from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ import { AZTEC_NODE_ROLE, AZTEC_REGISTRY_ADDRESS, AZTEC_ROLLUP_ADDRESS, AZTEC_ROLLUP_VERSION } from './attributes.js';
7
+ /** Reads the Aztec client version from the release manifest. */ function getAztecVersion() {
8
+ try {
9
+ const releasePleasePath = resolve(dirname(fileURLToPath(import.meta.url)), '../../../.release-please-manifest.json');
10
+ return JSON.parse(readFileSync(releasePleasePath, 'utf-8'))['.'];
11
+ } catch {
12
+ return undefined;
13
+ }
14
+ }
15
+ export function getOtelResource() {
16
+ const resource = detectResourcesSync({
17
+ detectors: [
18
+ aztecNetworkDetectorSync,
19
+ osDetectorSync,
20
+ envDetectorSync,
21
+ // this detector is disabled because:
22
+ // 1. our software runs in a docker container, a lot of the attributes detected would be identical across different machines (e.g. all run node v22, executing the same script, running PID 1, etc)
23
+ // 2. it catures process.argv which could contain sensitive values in plain text (e.g. validator private keys)
24
+ // processDetectorSync,
25
+ serviceInstanceIdDetectorSync
26
+ ]
27
+ });
28
+ return resource;
29
+ }
30
+ const aztecNetworkDetectorSync = {
31
+ detect () {
32
+ let role;
33
+ if (process.argv.includes('--sequencer')) {
34
+ role = 'sequencer';
35
+ } else if (process.argv.includes('--prover-node')) {
36
+ role = 'prover-node';
37
+ } else if (process.argv.includes('--node')) {
38
+ role = 'node';
39
+ } else if (process.argv.includes('--p2p-bootstrap')) {
40
+ role = 'bootnode';
41
+ }
42
+ const aztecAttributes = {
43
+ // this gets overwritten by OTEL_RESOURCE_ATTRIBUTES (if set)
44
+ [ATTR_SERVICE_NAME]: role ? `aztec-${role}` : undefined,
45
+ [ATTR_SERVICE_VERSION]: getAztecVersion(),
46
+ [AZTEC_NODE_ROLE]: role,
47
+ [AZTEC_ROLLUP_VERSION]: process.env.ROLLUP_VERSION ?? 'canonical',
48
+ [AZTEC_ROLLUP_ADDRESS]: process.env.ROLLUP_CONTRACT_ADDRESS,
49
+ [AZTEC_REGISTRY_ADDRESS]: process.env.REGISTRY_CONTRACT_ADDRESS
50
+ };
51
+ return new Resource(aztecAttributes);
52
+ }
53
+ };
@@ -0,0 +1,176 @@
1
+ import { type Logger, type LoggerBindings } from '@aztec-labs/foundation/log';
2
+ import { Registry } from 'prom-client';
3
+ import type { Meter, TelemetryClient } from './telemetry.js';
4
+ /**
5
+ * Types matching the gossipsub and libp2p services
6
+ */
7
+ type TopicStr = string;
8
+ export type TopicLabel = string;
9
+ export type TopicStrToLabel = Map<TopicStr, TopicLabel>;
10
+ export declare enum MessageSource {
11
+ forward = "forward",
12
+ publish = "publish"
13
+ }
14
+ type NoLabels = Record<string, never>;
15
+ type LabelsGeneric = Record<string, string | number>;
16
+ type LabelKeys<Labels extends LabelsGeneric> = Extract<keyof Labels, string>;
17
+ interface CollectFn<Labels extends LabelsGeneric> {
18
+ (metric: IGauge<Labels>): void;
19
+ }
20
+ interface IGauge<Labels extends LabelsGeneric = NoLabels> {
21
+ inc: NoLabels extends Labels ? (value?: number) => void : (labels: Labels, value?: number) => void;
22
+ set: NoLabels extends Labels ? (value: number) => void : (labels: Labels, value: number) => void;
23
+ collect?(): void;
24
+ addCollect(collectFn: CollectFn<Labels>): void;
25
+ }
26
+ interface IHistogram<Labels extends LabelsGeneric = NoLabels> {
27
+ startTimer(): () => void;
28
+ observe: NoLabels extends Labels ? (value: number) => void : (labels: Labels, value: number) => void;
29
+ reset(): void;
30
+ }
31
+ interface IAvgMinMax<Labels extends LabelsGeneric = NoLabels> {
32
+ set: NoLabels extends Labels ? (values: number[]) => void : (labels: Labels, values: number[]) => void;
33
+ }
34
+ export type GaugeConfig<Labels extends LabelsGeneric> = {
35
+ name: string;
36
+ help: string;
37
+ } & (NoLabels extends Labels ? {
38
+ labelNames?: never;
39
+ } : {
40
+ labelNames: [LabelKeys<Labels>, ...Array<LabelKeys<Labels>>];
41
+ });
42
+ export type HistogramConfig<Labels extends LabelsGeneric> = GaugeConfig<Labels> & {
43
+ buckets?: number[];
44
+ };
45
+ export type AvgMinMaxConfig<Labels extends LabelsGeneric> = GaugeConfig<Labels>;
46
+ export interface MetricsRegister {
47
+ gauge<Labels extends LabelsGeneric = NoLabels>(config: GaugeConfig<Labels>): IGauge<Labels>;
48
+ histogram<Labels extends LabelsGeneric = NoLabels>(config: HistogramConfig<Labels>): IHistogram<Labels>;
49
+ avgMinMax<Labels extends LabelsGeneric = NoLabels>(config: AvgMinMaxConfig<Labels>): IAvgMinMax<Labels>;
50
+ }
51
+ /**Otel MetricsType Adapters
52
+ *
53
+ * Some dependencies we use export metrics directly in a Prometheus format
54
+ * This adapter is used to convert those metrics to a format that we can use with OpenTelemetry
55
+ *
56
+ * Affected services include:
57
+ * - chainsafe/gossipsub
58
+ * - libp2p
59
+ */
60
+ export declare class OtelGauge<Labels extends LabelsGeneric = NoLabels> implements IGauge<Labels> {
61
+ private logger;
62
+ private labelNames;
63
+ private gauge;
64
+ private currentValue;
65
+ private labeledValues;
66
+ private collectFns;
67
+ private _collect;
68
+ get collect(): () => void;
69
+ set collect(fn: () => void);
70
+ constructor(logger: Logger, meter: Meter, name: string, help: string, labelNames?: Array<keyof Labels>);
71
+ /**
72
+ * Add a collect callback
73
+ * @param collectFn - Callback function
74
+ */
75
+ addCollect(collectFn: CollectFn<Labels>): void;
76
+ handleObservation(result: any): void;
77
+ /**
78
+ * Increments the gauge value
79
+ * @param labelsOrValue - Labels object or numeric value
80
+ * @param value - Value to increment by (defaults to 1)
81
+ */
82
+ inc(value?: number): void;
83
+ inc(labels: Labels, value?: number): void;
84
+ /**
85
+ * Sets the gauge value
86
+ * @param labelsOrValue - Labels object or numeric value
87
+ * @param value - Value to set
88
+ */
89
+ set(value: number): void;
90
+ set(labels: Labels, value: number): void;
91
+ /**
92
+ * Decrements the gauge value
93
+ * @param labels - Optional labels object
94
+ */
95
+ dec(labels?: Labels): void;
96
+ /**
97
+ * Resets the gauge to initial state
98
+ */
99
+ reset(): void;
100
+ }
101
+ /**
102
+ * Implementation of a Histogram collector
103
+ */
104
+ export declare class OtelHistogram<Labels extends LabelsGeneric = NoLabels> implements IHistogram<Labels> {
105
+ private logger;
106
+ private labelNames;
107
+ private histogram;
108
+ constructor(logger: Logger, meter: Meter, name: string, help: string, buckets?: number[], labelNames?: Array<keyof Labels>);
109
+ /**
110
+ * Starts a timer and returns a function that when called will record the time elapsed
111
+ * @param labels - Optional labels for the observation
112
+ */
113
+ startTimer(labels?: Labels): () => void;
114
+ /**
115
+ * Observes a value
116
+ * @param value - Value to observe
117
+ */
118
+ observe(value: number): void;
119
+ /**
120
+ * Observes a value with labels
121
+ * @param labels - Labels object
122
+ * @param value - Value to observe
123
+ */
124
+ observe(labels: Labels, value: number): void;
125
+ reset(): void;
126
+ }
127
+ /**
128
+ * Implementation of an AvgMinMax collector
129
+ */
130
+ export declare class OtelAvgMinMax<Labels extends LabelsGeneric = NoLabels> implements IAvgMinMax<Labels> {
131
+ private logger;
132
+ private labelNames;
133
+ private gauges;
134
+ private currentValues;
135
+ private labeledValues;
136
+ constructor(logger: Logger, meter: Meter, name: string, help: string, labelNames?: Array<keyof Labels>);
137
+ /**
138
+ * Sets the values for calculating avg, min, max
139
+ * @param values - Array of values
140
+ */
141
+ set(values: number[]): void;
142
+ /**
143
+ * Sets the values for calculating avg, min, max with labels
144
+ * @param labels - Labels object
145
+ * @param values - Array of values
146
+ */
147
+ set(labels: Labels, values: number[]): void;
148
+ /**
149
+ * Resets all stored values
150
+ */
151
+ reset(): void;
152
+ /**
153
+ * General function to observe an aggregation
154
+ * @param result - Observer result
155
+ * @param aggregateFn - Function that calculates the aggregation
156
+ */
157
+ private observeAggregation;
158
+ private observeAvg;
159
+ private observeMin;
160
+ private observeMax;
161
+ }
162
+ /**
163
+ * Otel metrics Adapter
164
+ *
165
+ * Maps the PromClient based MetricsRegister from gossipsub and discv5 services to the Otel MetricsRegister
166
+ */
167
+ export declare class OtelMetricsAdapter extends Registry implements MetricsRegister {
168
+ private readonly meter;
169
+ private logger;
170
+ constructor(telemetryClient: TelemetryClient, bindings?: LoggerBindings);
171
+ gauge<Labels extends LabelsGeneric = NoLabels>(configuration: GaugeConfig<Labels>): IGauge<Labels>;
172
+ histogram<Labels extends LabelsGeneric = NoLabels>(configuration: HistogramConfig<Labels>): IHistogram<Labels>;
173
+ avgMinMax<Labels extends LabelsGeneric = NoLabels>(configuration: AvgMinMaxConfig<Labels>): IAvgMinMax<Labels>;
174
+ }
175
+ export {};
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbV9vdGVsX2FkYXB0ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9tX290ZWxfYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sNEJBQTRCLENBQUM7QUFFNUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd2QyxPQUFPLEtBQUssRUFBYSxLQUFLLEVBQW1CLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpGOztHQUVHO0FBQ0gsS0FBSyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLE1BQU0sTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ2hDLE1BQU0sTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUV4RCxvQkFBWSxhQUFhO0lBQ3ZCLE9BQU8sWUFBWTtJQUNuQixPQUFPLFlBQVk7Q0FDcEI7QUFFRCxLQUFLLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLEtBQUssYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELEtBQUssU0FBUyxDQUFDLE1BQU0sU0FBUyxhQUFhLElBQUksT0FBTyxDQUFDLE1BQU0sTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzdFLFVBQVUsU0FBUyxDQUFDLE1BQU0sU0FBUyxhQUFhO0lBQzlDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDaEM7QUFFRCxVQUFVLE1BQU0sQ0FBQyxNQUFNLFNBQVMsYUFBYSxHQUFHLFFBQVE7SUFDdEQsR0FBRyxFQUFFLFFBQVEsU0FBUyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEtBQUssSUFBSSxH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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prom_otel_adapter.d.ts","sourceRoot":"","sources":["../src/prom_otel_adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,292 @@
1
+ import { createLogger } from '@aztec-labs/foundation/log';
2
+ import { Timer } from '@aztec-labs/foundation/timer';
3
+ import { Registry } from 'prom-client';
4
+ export var MessageSource = /*#__PURE__*/ function(MessageSource) {
5
+ MessageSource["forward"] = "forward";
6
+ MessageSource["publish"] = "publish";
7
+ return MessageSource;
8
+ }({});
9
+ /**Otel MetricsType Adapters
10
+ *
11
+ * Some dependencies we use export metrics directly in a Prometheus format
12
+ * This adapter is used to convert those metrics to a format that we can use with OpenTelemetry
13
+ *
14
+ * Affected services include:
15
+ * - chainsafe/gossipsub
16
+ * - libp2p
17
+ */ export class OtelGauge {
18
+ logger;
19
+ labelNames;
20
+ gauge;
21
+ currentValue;
22
+ labeledValues;
23
+ collectFns;
24
+ _collect;
25
+ get collect() {
26
+ return this._collect;
27
+ }
28
+ set collect(fn) {
29
+ this._collect = fn;
30
+ }
31
+ constructor(logger, meter, name, help, labelNames = []){
32
+ this.logger = logger;
33
+ this.labelNames = labelNames;
34
+ this.currentValue = 0;
35
+ this.labeledValues = new Map();
36
+ this.collectFns = [];
37
+ this._collect = ()=>{};
38
+ const metricDef = {
39
+ name,
40
+ description: help
41
+ };
42
+ this.gauge = meter.createObservableGauge(metricDef);
43
+ // Only observe in the callback when collect() is called
44
+ this.gauge.addCallback(this.handleObservation.bind(this));
45
+ }
46
+ /**
47
+ * Add a collect callback
48
+ * @param collectFn - Callback function
49
+ */ addCollect(collectFn) {
50
+ this.collectFns.push(collectFn);
51
+ }
52
+ handleObservation(result) {
53
+ // Execute the main collect function if assigned
54
+ this._collect();
55
+ // Execute all the collect functions
56
+ for (const fn of this.collectFns){
57
+ fn(this);
58
+ }
59
+ // Report the current values
60
+ if (this.labelNames.length === 0) {
61
+ result.observe(this.currentValue);
62
+ return;
63
+ }
64
+ for (const [labelStr, value] of this.labeledValues.entries()){
65
+ const labels = parseLabelsSafely(labelStr, this.logger);
66
+ if (labels) {
67
+ result.observe(value, labels);
68
+ }
69
+ }
70
+ }
71
+ inc(labelsOrValue, value) {
72
+ if (typeof labelsOrValue === 'number') {
73
+ this.currentValue += labelsOrValue;
74
+ return;
75
+ }
76
+ if (labelsOrValue) {
77
+ validateLabels(labelsOrValue, this.labelNames, 'Gauge');
78
+ const labelKey = JSON.stringify(labelsOrValue);
79
+ const currentValue = this.labeledValues.get(labelKey) ?? 0;
80
+ this.labeledValues.set(labelKey, currentValue + (value ?? 1));
81
+ return;
82
+ }
83
+ this.currentValue += value ?? 1;
84
+ }
85
+ set(labelsOrValue, value) {
86
+ if (typeof labelsOrValue === 'number') {
87
+ this.currentValue = labelsOrValue;
88
+ return;
89
+ }
90
+ validateLabels(labelsOrValue, this.labelNames, 'Gauge');
91
+ const labelKey = JSON.stringify(labelsOrValue);
92
+ this.labeledValues.set(labelKey, value);
93
+ }
94
+ /**
95
+ * Decrements the gauge value
96
+ * @param labels - Optional labels object
97
+ */ dec(labels) {
98
+ if (labels) {
99
+ validateLabels(labels, this.labelNames, 'Gauge');
100
+ const labelKey = JSON.stringify(labels);
101
+ const currentValue = this.labeledValues.get(labelKey) ?? 0;
102
+ this.labeledValues.set(labelKey, currentValue - 1);
103
+ return;
104
+ }
105
+ this.currentValue -= 1;
106
+ }
107
+ /**
108
+ * Resets the gauge to initial state
109
+ */ reset() {
110
+ this.currentValue = 0;
111
+ this.labeledValues.clear();
112
+ }
113
+ }
114
+ /**
115
+ * Implementation of a Histogram collector
116
+ */ export class OtelHistogram {
117
+ logger;
118
+ labelNames;
119
+ histogram;
120
+ constructor(logger, meter, name, help, buckets = [], labelNames = []){
121
+ this.logger = logger;
122
+ this.labelNames = labelNames;
123
+ const metricDef = {
124
+ name,
125
+ description: help
126
+ };
127
+ this.histogram = meter.createHistogram(metricDef, {
128
+ advice: buckets.length ? {
129
+ explicitBucketBoundaries: buckets
130
+ } : undefined
131
+ });
132
+ }
133
+ /**
134
+ * Starts a timer and returns a function that when called will record the time elapsed
135
+ * @param labels - Optional labels for the observation
136
+ */ startTimer(labels) {
137
+ if (labels) {
138
+ validateLabels(labels, this.labelNames, 'Histogram');
139
+ }
140
+ const timer = new Timer();
141
+ return ()=>{
142
+ // Use timer.s() here to get the duration in seconds since this is only currently used by gossipsub_heartbeat_duration_seconds
143
+ const duration = timer.s();
144
+ if (labels) {
145
+ this.observe(labels, duration);
146
+ } else {
147
+ this.observe(duration);
148
+ }
149
+ };
150
+ }
151
+ observe(labelsOrValue, value) {
152
+ if (typeof labelsOrValue === 'number') {
153
+ this.histogram.record(labelsOrValue);
154
+ } else {
155
+ validateLabels(labelsOrValue, this.labelNames, 'Histogram');
156
+ this.histogram.record(value, labelsOrValue);
157
+ }
158
+ }
159
+ reset() {
160
+ // OpenTelemetry histograms cannot be reset, but we implement the interface
161
+ this.logger.silent('OpenTelemetry histograms cannot be fully reset');
162
+ }
163
+ }
164
+ /**
165
+ * Implementation of an AvgMinMax collector
166
+ */ export class OtelAvgMinMax {
167
+ logger;
168
+ labelNames;
169
+ gauges;
170
+ currentValues;
171
+ labeledValues;
172
+ constructor(logger, meter, name, help, labelNames = []){
173
+ this.logger = logger;
174
+ this.labelNames = labelNames;
175
+ this.currentValues = [];
176
+ this.labeledValues = new Map();
177
+ // Create three separate gauges for avg, min, and max
178
+ this.gauges = {
179
+ avg: meter.createObservableGauge({
180
+ name: `${name}_avg`,
181
+ description: `${help} (average)`
182
+ }),
183
+ min: meter.createObservableGauge({
184
+ name: `${name}_min`,
185
+ description: `${help} (minimum)`
186
+ }),
187
+ max: meter.createObservableGauge({
188
+ name: `${name}_max`,
189
+ description: `${help} (maximum)`
190
+ })
191
+ };
192
+ // Register callbacks for each gauge
193
+ this.gauges.avg.addCallback(this.observeAvg.bind(this));
194
+ this.gauges.min.addCallback(this.observeMin.bind(this));
195
+ this.gauges.max.addCallback(this.observeMax.bind(this));
196
+ }
197
+ set(labelsOrValues, values) {
198
+ if (Array.isArray(labelsOrValues)) {
199
+ this.currentValues = labelsOrValues;
200
+ return;
201
+ } else {
202
+ validateLabels(labelsOrValues, this.labelNames, 'AvgMinMax');
203
+ const labelKey = JSON.stringify(labelsOrValues);
204
+ this.labeledValues.set(labelKey, values || []);
205
+ }
206
+ }
207
+ /**
208
+ * Resets all stored values
209
+ */ reset() {
210
+ this.currentValues = [];
211
+ this.labeledValues.clear();
212
+ }
213
+ /**
214
+ * General function to observe an aggregation
215
+ * @param result - Observer result
216
+ * @param aggregateFn - Function that calculates the aggregation
217
+ */ observeAggregation(result, aggregateFn) {
218
+ // Observe unlabeled values
219
+ if (this.currentValues.length > 0) {
220
+ result.observe(aggregateFn(this.currentValues));
221
+ }
222
+ // Observe labeled values
223
+ for (const [labelStr, values] of this.labeledValues.entries()){
224
+ if (values.length > 0) {
225
+ const labels = parseLabelsSafely(labelStr, this.logger);
226
+ if (labels) {
227
+ result.observe(aggregateFn(values), labels);
228
+ }
229
+ }
230
+ }
231
+ }
232
+ observeAvg(result) {
233
+ this.observeAggregation(result, (arr)=>arr.reduce((sum, val)=>sum + val, 0) / arr.length);
234
+ }
235
+ observeMin(result) {
236
+ this.observeAggregation(result, (arr)=>Math.min.apply(null, arr));
237
+ }
238
+ observeMax(result) {
239
+ this.observeAggregation(result, (arr)=>Math.max.apply(null, arr));
240
+ }
241
+ }
242
+ /**
243
+ * Validates that provided labels match the expected schema
244
+ * @param labels - Labels object to validate
245
+ * @param labelNames - Array of allowed label names
246
+ * @param metricType - Type of metric for error message ('Gauge', 'Histogram', 'AvgMinMax')
247
+ * @throws Error if invalid labels are provided
248
+ */ function validateLabels(labels, labelNames, metricType) {
249
+ if (labelNames.length === 0) {
250
+ throw new Error(`${metricType} was initialized without labels support`);
251
+ }
252
+ for (const key of Object.keys(labels)){
253
+ if (!labelNames.includes(key)) {
254
+ throw new Error(`Invalid label key: ${key}`);
255
+ }
256
+ }
257
+ }
258
+ /**
259
+ * Safely parses label string back to object
260
+ * @param labelStr - Stringified labels object
261
+ * @param logger - Logger instance for error reporting
262
+ * @returns Labels object or null if parsing fails
263
+ */ function parseLabelsSafely(labelStr, logger) {
264
+ try {
265
+ return JSON.parse(labelStr);
266
+ } catch {
267
+ logger.error(`Failed to parse label string: ${labelStr}`);
268
+ return null;
269
+ }
270
+ }
271
+ /**
272
+ * Otel metrics Adapter
273
+ *
274
+ * Maps the PromClient based MetricsRegister from gossipsub and discv5 services to the Otel MetricsRegister
275
+ */ export class OtelMetricsAdapter extends Registry {
276
+ meter;
277
+ logger;
278
+ constructor(telemetryClient, bindings){
279
+ super();
280
+ this.logger = createLogger('telemetry:otel-metrics-adapter', bindings);
281
+ this.meter = telemetryClient.getMeter('metrics-adapter');
282
+ }
283
+ gauge(configuration) {
284
+ return new OtelGauge(this.logger, this.meter, configuration.name, configuration.help, configuration.labelNames);
285
+ }
286
+ histogram(configuration) {
287
+ return new OtelHistogram(this.logger, this.meter, configuration.name, configuration.help, configuration.buckets, configuration.labelNames);
288
+ }
289
+ avgMinMax(configuration) {
290
+ return new OtelAvgMinMax(this.logger, this.meter, configuration.name, configuration.help, configuration.labelNames);
291
+ }
292
+ }
@@ -0,0 +1,7 @@
1
+ import { type LoggerBindings } from '@aztec-labs/foundation/log';
2
+ import type { TelemetryClientConfig } from './config.js';
3
+ import type { TelemetryClient } from './telemetry.js';
4
+ export * from './config.js';
5
+ export declare function initTelemetryClient(config: TelemetryClientConfig, bindings?: LoggerBindings): Promise<TelemetryClient>;
6
+ export declare function getTelemetryClient(): TelemetryClient;
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sNEJBQTRCLENBQUM7QUFFL0UsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFekQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsY0FBYyxhQUFhLENBQUM7QUFLNUIsd0JBQXNCLG1CQUFtQixDQUN2QyxNQUFNLEVBQUUscUJBQXFCLEVBQzdCLFFBQVEsQ0FBQyxFQUFFLGNBQWMsR0FDeEIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQXVCMUI7QUFFRCx3QkFBZ0Isa0JBQWtCLElBQUksZUFBZSxDQUVwRCJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAgB,MAAM,4BAA4B,CAAC;AAE/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,cAAc,aAAa,CAAC;AAK5B,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,eAAe,CAAC,CAuB1B;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD"}