@libp2p/opentelemetry-metrics 0.0.0-abe9bd154

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 (58) hide show
  1. package/README.md +77 -0
  2. package/dist/index.min.js +3 -0
  3. package/dist/src/counter-group.d.ts +12 -0
  4. package/dist/src/counter-group.d.ts.map +1 -0
  5. package/dist/src/counter-group.js +31 -0
  6. package/dist/src/counter-group.js.map +1 -0
  7. package/dist/src/counter.d.ts +9 -0
  8. package/dist/src/counter.d.ts.map +1 -0
  9. package/dist/src/counter.js +13 -0
  10. package/dist/src/counter.js.map +1 -0
  11. package/dist/src/histogram-group.d.ts +11 -0
  12. package/dist/src/histogram-group.d.ts.map +1 -0
  13. package/dist/src/histogram-group.js +27 -0
  14. package/dist/src/histogram-group.js.map +1 -0
  15. package/dist/src/histogram.d.ts +10 -0
  16. package/dist/src/histogram.d.ts.map +1 -0
  17. package/dist/src/histogram.js +19 -0
  18. package/dist/src/histogram.js.map +1 -0
  19. package/dist/src/index.d.ts +67 -0
  20. package/dist/src/index.d.ts.map +1 -0
  21. package/dist/src/index.js +416 -0
  22. package/dist/src/index.js.map +1 -0
  23. package/dist/src/metric-group.d.ts +14 -0
  24. package/dist/src/metric-group.d.ts.map +1 -0
  25. package/dist/src/metric-group.js +58 -0
  26. package/dist/src/metric-group.js.map +1 -0
  27. package/dist/src/metric.d.ts +13 -0
  28. package/dist/src/metric.d.ts.map +1 -0
  29. package/dist/src/metric.js +35 -0
  30. package/dist/src/metric.js.map +1 -0
  31. package/dist/src/summary-group.d.ts +12 -0
  32. package/dist/src/summary-group.d.ts.map +1 -0
  33. package/dist/src/summary-group.js +36 -0
  34. package/dist/src/summary-group.js.map +1 -0
  35. package/dist/src/summary.d.ts +10 -0
  36. package/dist/src/summary.d.ts.map +1 -0
  37. package/dist/src/summary.js +19 -0
  38. package/dist/src/summary.js.map +1 -0
  39. package/dist/src/system-metrics.browser.d.ts +2 -0
  40. package/dist/src/system-metrics.browser.d.ts.map +1 -0
  41. package/dist/src/system-metrics.browser.js +3 -0
  42. package/dist/src/system-metrics.browser.js.map +1 -0
  43. package/dist/src/system-metrics.d.ts +6 -0
  44. package/dist/src/system-metrics.d.ts.map +1 -0
  45. package/dist/src/system-metrics.js +439 -0
  46. package/dist/src/system-metrics.js.map +1 -0
  47. package/package.json +62 -0
  48. package/src/counter-group.ts +38 -0
  49. package/src/counter.ts +18 -0
  50. package/src/histogram-group.ts +34 -0
  51. package/src/histogram.ts +26 -0
  52. package/src/index.ts +557 -0
  53. package/src/metric-group.ts +69 -0
  54. package/src/metric.ts +44 -0
  55. package/src/summary-group.ts +43 -0
  56. package/src/summary.ts +26 -0
  57. package/src/system-metrics.browser.ts +3 -0
  58. package/src/system-metrics.ts +504 -0
@@ -0,0 +1,416 @@
1
+ /**
2
+ * @packageDocumentation
3
+ *
4
+ * Uses [OpenTelemetry](https://opentelemetry.io/) to store metrics and method
5
+ * traces in libp2p.
6
+ *
7
+ * @example Node.js
8
+ *
9
+ * Use with [OpenTelemetry Desktop Viewer](https://github.com/CtrlSpice/otel-desktop-viewer):
10
+ *
11
+ * ```ts
12
+ * import { createLibp2p } from 'libp2p'
13
+ * import { openTelemetryMetrics } from '@libp2p/opentelemetry-metrics'
14
+ * import { PrometheusExporter } from '@opentelemetry/exporter-prometheus'
15
+ * import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
16
+ * import { NodeSDK } from '@opentelemetry/sdk-node'
17
+ *
18
+ * const sdk = new NodeSDK({
19
+ * traceExporter: new OTLPTraceExporter({
20
+ * url: 'http://127.0.0.1:4318/v1/traces'
21
+ * }),
22
+ * metricReader: new PrometheusExporter({
23
+ * port: 9464
24
+ * }),
25
+ * serviceName: 'my-app'
26
+ * })
27
+ * sdk.start()
28
+ *
29
+ * const node = await createLibp2p({
30
+ * // ... other options
31
+ * metrics: openTelemetryMetrics()
32
+ * })
33
+ * ```
34
+ */
35
+ import { InvalidParametersError, serviceCapabilities } from '@libp2p/interface';
36
+ import { trace, metrics, context, SpanStatusCode } from '@opentelemetry/api';
37
+ import each from 'it-foreach';
38
+ import { OpenTelemetryCounterGroup } from './counter-group.js';
39
+ import { OpenTelemetryCounter } from './counter.js';
40
+ import { OpenTelemetryHistogramGroup } from './histogram-group.js';
41
+ import { OpenTelemetryHistogram } from './histogram.js';
42
+ import { OpenTelemetryMetricGroup } from './metric-group.js';
43
+ import { OpenTelemetryMetric } from './metric.js';
44
+ import { OpenTelemetrySummaryGroup } from './summary-group.js';
45
+ import { OpenTelemetrySummary } from './summary.js';
46
+ import { collectSystemMetrics } from './system-metrics.js';
47
+ class OpenTelemetryMetrics {
48
+ transferStats;
49
+ tracer;
50
+ meterName;
51
+ constructor(components, init) {
52
+ this.tracer = trace.getTracer(init?.appName ?? components.nodeInfo.name, init?.appVersion ?? components.nodeInfo.version);
53
+ // holds global and per-protocol sent/received stats
54
+ this.transferStats = new Map();
55
+ this.meterName = init?.meterName ?? components.nodeInfo.name;
56
+ this.registerCounterGroup('libp2p_data_transfer_bytes_total', {
57
+ label: 'protocol',
58
+ calculate: () => {
59
+ const output = {};
60
+ for (const [key, value] of this.transferStats.entries()) {
61
+ output[key] = value;
62
+ }
63
+ // reset counts for next time
64
+ this.transferStats = new Map();
65
+ return output;
66
+ }
67
+ });
68
+ collectSystemMetrics(this, init);
69
+ }
70
+ [Symbol.toStringTag] = '@libp2p/metrics-opentelemetry';
71
+ [serviceCapabilities] = [
72
+ '@libp2p/metrics'
73
+ ];
74
+ /**
75
+ * Increment the transfer stat for the passed key, making sure
76
+ * it exists first
77
+ */
78
+ _incrementValue(key, value) {
79
+ const existing = this.transferStats.get(key) ?? 0;
80
+ this.transferStats.set(key, existing + value);
81
+ }
82
+ /**
83
+ * Override the sink/source of the stream to count the bytes
84
+ * in and out
85
+ */
86
+ _track(stream, name) {
87
+ const self = this;
88
+ const sink = stream.sink;
89
+ stream.sink = async function trackedSink(source) {
90
+ await sink(each(source, buf => {
91
+ self._incrementValue(`${name} sent`, buf.byteLength);
92
+ }));
93
+ };
94
+ const source = stream.source;
95
+ stream.source = each(source, buf => {
96
+ self._incrementValue(`${name} received`, buf.byteLength);
97
+ });
98
+ }
99
+ trackMultiaddrConnection(maConn) {
100
+ this._track(maConn, 'global');
101
+ }
102
+ trackProtocolStream(stream, connection) {
103
+ if (stream.protocol == null) {
104
+ // protocol not negotiated yet, should not happen as the upgrader
105
+ // calls this handler after protocol negotiation
106
+ return;
107
+ }
108
+ this._track(stream, stream.protocol);
109
+ }
110
+ registerMetric(name, opts = {}) {
111
+ if (name == null || name.trim() === '') {
112
+ throw new InvalidParametersError('Metric name is required');
113
+ }
114
+ const meter = metrics.getMeterProvider().getMeter(this.meterName);
115
+ if (isCalculatedMetricOptions(opts)) {
116
+ const calculate = opts.calculate;
117
+ const counter = meter.createObservableGauge(name, {
118
+ description: opts?.help ?? name
119
+ });
120
+ counter.addCallback(async (result) => {
121
+ result.observe(await calculate());
122
+ });
123
+ return;
124
+ }
125
+ return new OpenTelemetryMetric(meter.createGauge(name, {
126
+ description: opts?.help ?? name
127
+ }));
128
+ }
129
+ registerMetricGroup(name, opts = {}) {
130
+ if (name == null || name.trim() === '') {
131
+ throw new InvalidParametersError('Metric name is required');
132
+ }
133
+ const meter = metrics.getMeterProvider().getMeter(this.meterName);
134
+ const label = opts?.label ?? name;
135
+ if (isCalculatedMetricOptions(opts)) {
136
+ const calculate = opts.calculate;
137
+ const gauge = meter.createObservableGauge(name, {
138
+ description: opts?.help ?? name
139
+ });
140
+ gauge.addCallback(async (observable) => {
141
+ const observed = await calculate();
142
+ for (const [key, value] of Object.entries(observed)) {
143
+ observable.observe(value, {
144
+ [label]: key
145
+ });
146
+ }
147
+ });
148
+ return;
149
+ }
150
+ return new OpenTelemetryMetricGroup(label, meter.createGauge(name, {
151
+ description: opts?.help ?? name
152
+ }));
153
+ }
154
+ registerCounter(name, opts = {}) {
155
+ if (name == null || name.trim() === '') {
156
+ throw new InvalidParametersError('Metric name is required');
157
+ }
158
+ const meter = metrics.getMeterProvider().getMeter(this.meterName);
159
+ if (isCalculatedMetricOptions(opts)) {
160
+ const calculate = opts.calculate;
161
+ const counter = meter.createObservableCounter(name, {
162
+ description: opts?.help ?? name
163
+ });
164
+ counter.addCallback(async (result) => {
165
+ result.observe(await calculate());
166
+ });
167
+ return;
168
+ }
169
+ return new OpenTelemetryCounter(meter.createCounter(name, {
170
+ description: opts?.help ?? name
171
+ }));
172
+ }
173
+ registerCounterGroup(name, opts = {}) {
174
+ if (name == null || name.trim() === '') {
175
+ throw new InvalidParametersError('Metric name is required');
176
+ }
177
+ const meter = metrics.getMeterProvider().getMeter(this.meterName);
178
+ const label = opts?.label ?? name;
179
+ if (isCalculatedMetricOptions(opts)) {
180
+ const values = {};
181
+ const calculate = opts.calculate;
182
+ const counter = meter.createObservableGauge(name, {
183
+ description: opts?.help ?? name
184
+ });
185
+ counter.addCallback(async (observable) => {
186
+ const observed = await calculate();
187
+ for (const [key, value] of Object.entries(observed)) {
188
+ if (values[key] == null) {
189
+ values[key] = 0;
190
+ }
191
+ values[key] += value;
192
+ observable.observe(values[key], {
193
+ [label]: key
194
+ });
195
+ }
196
+ });
197
+ return;
198
+ }
199
+ return new OpenTelemetryCounterGroup(label, meter.createCounter(name, {
200
+ description: opts?.help ?? name
201
+ }));
202
+ }
203
+ registerHistogram(name, opts = {}) {
204
+ if (name == null || name.trim() === '') {
205
+ throw new InvalidParametersError('Metric name is required');
206
+ }
207
+ const meter = metrics.getMeterProvider().getMeter(this.meterName);
208
+ if (isCalculatedMetricOptions(opts)) {
209
+ return;
210
+ }
211
+ return new OpenTelemetryHistogram(meter.createHistogram(name, {
212
+ advice: {
213
+ explicitBucketBoundaries: opts.buckets
214
+ },
215
+ description: opts?.help ?? name
216
+ }));
217
+ }
218
+ registerHistogramGroup(name, opts = {}) {
219
+ if (name == null || name.trim() === '') {
220
+ throw new InvalidParametersError('Metric name is required');
221
+ }
222
+ const meter = metrics.getMeterProvider().getMeter(this.meterName);
223
+ const label = opts?.label ?? name;
224
+ if (isCalculatedMetricOptions(opts)) {
225
+ return;
226
+ }
227
+ return new OpenTelemetryHistogramGroup(label, meter.createHistogram(name, {
228
+ advice: {
229
+ explicitBucketBoundaries: opts.buckets
230
+ },
231
+ description: opts?.help ?? name
232
+ }));
233
+ }
234
+ registerSummary(name, opts = {}) {
235
+ if (name == null || name.trim() === '') {
236
+ throw new InvalidParametersError('Metric name is required');
237
+ }
238
+ const meter = metrics.getMeterProvider().getMeter(this.meterName);
239
+ if (isCalculatedMetricOptions(opts)) {
240
+ return;
241
+ }
242
+ return new OpenTelemetrySummary(meter.createGauge(name, {
243
+ description: opts?.help ?? name
244
+ }));
245
+ }
246
+ registerSummaryGroup(name, opts = {}) {
247
+ if (name == null || name.trim() === '') {
248
+ throw new InvalidParametersError('Metric name is required');
249
+ }
250
+ const meter = metrics.getMeterProvider().getMeter(this.meterName);
251
+ const label = opts?.label ?? name;
252
+ if (isCalculatedMetricOptions(opts)) {
253
+ return;
254
+ }
255
+ return new OpenTelemetrySummaryGroup(label, meter.createGauge(name, {
256
+ description: opts?.help ?? name
257
+ }));
258
+ }
259
+ createTrace() {
260
+ return context.active();
261
+ }
262
+ traceFunction(name, fn, options) {
263
+ // @ts-expect-error returned function could be different to T
264
+ return (...args) => {
265
+ const optionsIndex = options?.optionsIndex ?? 0;
266
+ // make sure we have an options object
267
+ const opts = {
268
+ ...(args[optionsIndex] ?? {})
269
+ };
270
+ args[optionsIndex] = opts;
271
+ // skip tracing if no context is passed
272
+ if (opts.trace == null) {
273
+ return fn.apply(null, args);
274
+ }
275
+ const attributes = {};
276
+ // extract the parent context from the options object
277
+ const parentContext = opts.trace;
278
+ const span = this.tracer.startSpan(name, {
279
+ attributes: options?.getAttributesFromArgs?.(args, attributes)
280
+ }, parentContext);
281
+ const childContext = trace.setSpan(parentContext, span);
282
+ opts.trace = childContext;
283
+ let result;
284
+ try {
285
+ result = context.with(childContext, fn, undefined, ...args);
286
+ }
287
+ catch (err) {
288
+ span.recordException(err);
289
+ span.setStatus({ code: SpanStatusCode.ERROR, message: err.toString() });
290
+ span.end();
291
+ throw err;
292
+ }
293
+ if (isPromise(result)) {
294
+ return wrapPromise(result, span, attributes, options);
295
+ }
296
+ if (isGenerator(result)) {
297
+ return wrapGenerator(result, span, attributes, options);
298
+ }
299
+ if (isAsyncGenerator(result)) {
300
+ return wrapAsyncGenerator(result, span, attributes, options);
301
+ }
302
+ setAttributes(span, options?.getAttributesFromReturnValue?.(result, attributes));
303
+ span.setStatus({ code: SpanStatusCode.OK });
304
+ span.end();
305
+ return result;
306
+ };
307
+ }
308
+ }
309
+ export function openTelemetryMetrics(init = {}) {
310
+ return (components) => new OpenTelemetryMetrics(components, init);
311
+ }
312
+ function isPromise(obj) {
313
+ return typeof obj?.then === 'function';
314
+ }
315
+ async function wrapPromise(promise, span, attributes, options) {
316
+ return promise
317
+ .then(res => {
318
+ setAttributes(span, options?.getAttributesFromReturnValue?.(res, attributes));
319
+ span.setStatus({ code: SpanStatusCode.OK });
320
+ return res;
321
+ })
322
+ .catch(err => {
323
+ span.recordException(err);
324
+ span.setStatus({ code: SpanStatusCode.ERROR, message: err.toString() });
325
+ })
326
+ .finally(() => {
327
+ span.end();
328
+ });
329
+ }
330
+ function isGenerator(obj) {
331
+ return obj?.[Symbol.iterator] != null;
332
+ }
333
+ function wrapGenerator(gen, span, attributes, options) {
334
+ const iter = gen[Symbol.iterator]();
335
+ let index = 0;
336
+ const wrapped = {
337
+ next: () => {
338
+ try {
339
+ const res = iter.next();
340
+ if (res.done === true) {
341
+ setAttributes(span, options?.getAttributesFromReturnValue?.(res.value, attributes));
342
+ span.setStatus({ code: SpanStatusCode.OK });
343
+ span.end();
344
+ }
345
+ else {
346
+ setAttributes(span, options?.getAttributesFromYieldedValue?.(res.value, attributes, ++index));
347
+ }
348
+ return res;
349
+ }
350
+ catch (err) {
351
+ span.recordException(err);
352
+ span.setStatus({ code: SpanStatusCode.ERROR, message: err.toString() });
353
+ span.end();
354
+ throw err;
355
+ }
356
+ },
357
+ return: (value) => {
358
+ return iter.return(value);
359
+ },
360
+ throw: (err) => {
361
+ return iter.throw(err);
362
+ },
363
+ [Symbol.iterator]: () => {
364
+ return wrapped;
365
+ }
366
+ };
367
+ return wrapped;
368
+ }
369
+ function isAsyncGenerator(obj) {
370
+ return obj?.[Symbol.asyncIterator] != null;
371
+ }
372
+ function wrapAsyncGenerator(gen, span, attributes, options) {
373
+ const iter = gen[Symbol.asyncIterator]();
374
+ let index = 0;
375
+ const wrapped = {
376
+ next: async () => {
377
+ try {
378
+ const res = await iter.next();
379
+ if (res.done === true) {
380
+ setAttributes(span, options?.getAttributesFromReturnValue?.(res.value, attributes));
381
+ span.setStatus({ code: SpanStatusCode.OK });
382
+ span.end();
383
+ }
384
+ else {
385
+ setAttributes(span, options?.getAttributesFromYieldedValue?.(res.value, attributes, ++index));
386
+ }
387
+ return res;
388
+ }
389
+ catch (err) {
390
+ span.recordException(err);
391
+ span.setStatus({ code: SpanStatusCode.ERROR, message: err.toString() });
392
+ span.end();
393
+ throw err;
394
+ }
395
+ },
396
+ return: async (value) => {
397
+ return iter.return(value);
398
+ },
399
+ throw: async (err) => {
400
+ return iter.throw(err);
401
+ },
402
+ [Symbol.asyncIterator]: () => {
403
+ return wrapped;
404
+ }
405
+ };
406
+ return wrapped;
407
+ }
408
+ function isCalculatedMetricOptions(opts) {
409
+ return opts?.calculate != null;
410
+ }
411
+ function setAttributes(span, attributes) {
412
+ if (attributes != null) {
413
+ span.setAttributes(attributes);
414
+ }
415
+ }
416
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { MetricGroup, StopTimer } from '@libp2p/interface';
2
+ import type { Gauge } from '@opentelemetry/api';
3
+ export declare class OpenTelemetryMetricGroup implements MetricGroup {
4
+ private readonly label;
5
+ private readonly gauge;
6
+ private readonly lastValues;
7
+ constructor(label: string, gauge: Gauge);
8
+ update(values: Record<string, number>): void;
9
+ increment(values: Record<string, number | true>): void;
10
+ decrement(values: Record<string, number | true>): void;
11
+ reset(): void;
12
+ timer(key: string): StopTimer;
13
+ }
14
+ //# sourceMappingURL=metric-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-group.d.ts","sourceRoot":"","sources":["../../src/metric-group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE/C,qBAAa,wBAAyB,YAAW,WAAW;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;gBAEtC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAMxC,MAAM,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAS7C,SAAS,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;IAavD,SAAS,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;IAavD,KAAK,IAAK,IAAI;IASd,KAAK,CAAE,GAAG,EAAE,MAAM,GAAG,SAAS;CAU/B"}
@@ -0,0 +1,58 @@
1
+ export class OpenTelemetryMetricGroup {
2
+ label;
3
+ gauge;
4
+ lastValues;
5
+ constructor(label, gauge) {
6
+ this.label = label;
7
+ this.gauge = gauge;
8
+ this.lastValues = {};
9
+ }
10
+ update(values) {
11
+ Object.entries(values).forEach(([key, value]) => {
12
+ this.lastValues[key] = value;
13
+ this.gauge.record(value, {
14
+ [this.label]: key
15
+ });
16
+ });
17
+ }
18
+ increment(values) {
19
+ Object.entries(values).forEach(([key, value]) => {
20
+ if (this.lastValues[key] == null) {
21
+ this.lastValues[key] = 0;
22
+ }
23
+ this.lastValues[key] += value === true ? 1 : value;
24
+ this.gauge.record(this.lastValues[key], {
25
+ [this.label]: key
26
+ });
27
+ });
28
+ }
29
+ decrement(values) {
30
+ Object.entries(values).forEach(([key, value]) => {
31
+ if (this.lastValues[key] == null) {
32
+ this.lastValues[key] = 0;
33
+ }
34
+ this.lastValues[key] -= value === true ? 1 : value;
35
+ this.gauge.record(this.lastValues[key], {
36
+ [this.label]: key
37
+ });
38
+ });
39
+ }
40
+ reset() {
41
+ Object.keys(this.lastValues).forEach(key => {
42
+ this.lastValues[key] = 0;
43
+ this.gauge.record(0, {
44
+ [this.label]: key
45
+ });
46
+ });
47
+ }
48
+ timer(key) {
49
+ const start = Date.now();
50
+ return () => {
51
+ this.lastValues[key] = Date.now() - start;
52
+ this.gauge.record(this.lastValues[key], {
53
+ [this.label]: key
54
+ });
55
+ };
56
+ }
57
+ }
58
+ //# sourceMappingURL=metric-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-group.js","sourceRoot":"","sources":["../../src/metric-group.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Metric, StopTimer } from '@libp2p/interface';
2
+ import type { Gauge } from '@opentelemetry/api';
3
+ export declare class OpenTelemetryMetric implements Metric {
4
+ private readonly gauge;
5
+ private lastValue;
6
+ constructor(gauge: Gauge);
7
+ update(value: number): void;
8
+ increment(value?: number): void;
9
+ decrement(value?: number): void;
10
+ reset(): void;
11
+ timer(): StopTimer;
12
+ }
13
+ //# sourceMappingURL=metric.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric.d.ts","sourceRoot":"","sources":["../../src/metric.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE/C,qBAAa,mBAAoB,YAAW,MAAM;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,SAAS,CAAQ;gBAEZ,KAAK,EAAE,KAAK;IAMzB,MAAM,CAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAO5B,SAAS,CAAE,KAAK,GAAE,MAAU,GAAG,IAAI;IAKnC,SAAS,CAAE,KAAK,GAAE,MAAU,GAAG,IAAI;IAKnC,KAAK,IAAK,IAAI;IAKd,KAAK,IAAK,SAAS;CAQpB"}
@@ -0,0 +1,35 @@
1
+ export class OpenTelemetryMetric {
2
+ gauge;
3
+ lastValue;
4
+ constructor(gauge) {
5
+ this.gauge = gauge;
6
+ this.lastValue = 0;
7
+ this.update(0);
8
+ }
9
+ update(value) {
10
+ this.lastValue = value;
11
+ this.gauge.record(value, {
12
+ attrName: 'attrValue'
13
+ });
14
+ }
15
+ increment(value = 1) {
16
+ this.lastValue += value;
17
+ this.gauge.record(this.lastValue);
18
+ }
19
+ decrement(value = 1) {
20
+ this.lastValue -= value;
21
+ this.gauge.record(this.lastValue);
22
+ }
23
+ reset() {
24
+ this.gauge.record(0);
25
+ this.lastValue = 0;
26
+ }
27
+ timer() {
28
+ const start = Date.now();
29
+ return () => {
30
+ this.lastValue = Date.now() - start;
31
+ this.gauge.record(this.lastValue);
32
+ };
33
+ }
34
+ }
35
+ //# sourceMappingURL=metric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric.js","sourceRoot":"","sources":["../../src/metric.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,mBAAmB;IACb,KAAK,CAAO;IACrB,SAAS,CAAQ;IAEzB,YAAa,KAAY;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;QAClB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IAED,MAAM,CAAE,KAAa;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;YACvB,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAE,QAAgB,CAAC;QAC1B,IAAI,CAAC,SAAS,IAAI,KAAK,CAAA;QACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC;IAED,SAAS,CAAE,QAAgB,CAAC;QAC1B,IAAI,CAAC,SAAS,IAAI,KAAK,CAAA;QACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;IACpB,CAAC;IAED,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAExB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACnC,CAAC,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { HistogramGroup, StopTimer } from '@libp2p/interface';
2
+ import type { Gauge } from '@opentelemetry/api';
3
+ export declare class OpenTelemetrySummaryGroup implements HistogramGroup {
4
+ private readonly label;
5
+ private readonly gauge;
6
+ private readonly lastValues;
7
+ constructor(label: string, gauge: Gauge);
8
+ observe(values: Record<string, number>): void;
9
+ reset(): void;
10
+ timer(key: string): StopTimer;
11
+ }
12
+ //# sourceMappingURL=summary-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-group.d.ts","sourceRoot":"","sources":["../../src/summary-group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE/C,qBAAa,yBAA0B,YAAW,cAAc;IAC9D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;gBAEtC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAMxC,OAAO,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAS9C,KAAK,IAAK,IAAI;IASd,KAAK,CAAE,GAAG,EAAE,MAAM,GAAG,SAAS;CAU/B"}
@@ -0,0 +1,36 @@
1
+ export class OpenTelemetrySummaryGroup {
2
+ label;
3
+ gauge;
4
+ lastValues;
5
+ constructor(label, gauge) {
6
+ this.label = label;
7
+ this.gauge = gauge;
8
+ this.lastValues = {};
9
+ }
10
+ observe(values) {
11
+ Object.entries(values).forEach(([key, value]) => {
12
+ this.lastValues[key] = value;
13
+ this.gauge.record(value, {
14
+ [this.label]: key
15
+ });
16
+ });
17
+ }
18
+ reset() {
19
+ Object.keys(this.lastValues).forEach(key => {
20
+ this.lastValues[key] = 0;
21
+ this.gauge.record(0, {
22
+ [this.label]: key
23
+ });
24
+ });
25
+ }
26
+ timer(key) {
27
+ const start = Date.now();
28
+ return () => {
29
+ this.lastValues[key] = Date.now() - start;
30
+ this.gauge.record(this.lastValues[key], {
31
+ [this.label]: key
32
+ });
33
+ };
34
+ }
35
+ }
36
+ //# sourceMappingURL=summary-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-group.js","sourceRoot":"","sources":["../../src/summary-group.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,yBAAyB;IACnB,KAAK,CAAQ;IACb,KAAK,CAAO;IACZ,UAAU,CAAwB;IAEnD,YAAa,KAAa,EAAE,KAAY;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;IACtB,CAAC;IAED,OAAO,CAAE,MAA8B;QACrC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;gBACvB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG;aAClB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK;QACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE;gBACnB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG;aAClB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAE,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAExB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;YACzC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACtC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG;aAClB,CAAC,CAAA;QACJ,CAAC,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import type { StopTimer, Summary } from '@libp2p/interface';
2
+ import type { Gauge } from '@opentelemetry/api';
3
+ export declare class OpenTelemetrySummary implements Summary {
4
+ private readonly gauge;
5
+ constructor(gauge: Gauge);
6
+ observe(value: number): void;
7
+ reset(): void;
8
+ timer(): StopTimer;
9
+ }
10
+ //# sourceMappingURL=summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE/C,qBAAa,oBAAqB,YAAW,OAAO;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;gBAEhB,KAAK,EAAE,KAAK;IAIzB,OAAO,CAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,KAAK,IAAK,IAAI;IAId,KAAK,IAAK,SAAS;CAOpB"}