@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,19 @@
1
+ export class OpenTelemetrySummary {
2
+ gauge;
3
+ constructor(gauge) {
4
+ this.gauge = gauge;
5
+ }
6
+ observe(value) {
7
+ this.gauge.record(value);
8
+ }
9
+ reset() {
10
+ this.gauge.record(0);
11
+ }
12
+ timer() {
13
+ const start = Date.now();
14
+ return () => {
15
+ this.observe(Date.now() - start);
16
+ };
17
+ }
18
+ }
19
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/summary.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,oBAAoB;IACd,KAAK,CAAO;IAE7B,YAAa,KAAY;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,OAAO,CAAE,KAAa;QACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACtB,CAAC;IAED,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAExB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAA;QAClC,CAAC,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export declare function collectSystemMetrics(): void;
2
+ //# sourceMappingURL=system-metrics.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-metrics.browser.d.ts","sourceRoot":"","sources":["../../src/system-metrics.browser.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,IAAK,IAAI,CAE5C"}
@@ -0,0 +1,3 @@
1
+ export function collectSystemMetrics() {
2
+ }
3
+ //# sourceMappingURL=system-metrics.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-metrics.browser.js","sourceRoot":"","sources":["../../src/system-metrics.browser.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB;AAEpC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Metrics } from '@libp2p/interface';
2
+ export interface SystemMetricsOptions {
3
+ statfsLocation?: string;
4
+ }
5
+ export declare function collectSystemMetrics(metrics: Metrics, init?: SystemMetricsOptions): void;
6
+ //# sourceMappingURL=system-metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-metrics.d.ts","sourceRoot":"","sources":["../../src/system-metrics.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,oBAAoB,CAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAyCzF"}
@@ -0,0 +1,439 @@
1
+ import { readdirSync, readFileSync } from 'node:fs';
2
+ import { statfs } from 'node:fs/promises';
3
+ import { totalmem } from 'node:os';
4
+ import { monitorEventLoopDelay, PerformanceObserver, constants as PerfHooksConstants } from 'node:perf_hooks';
5
+ import { getHeapSpaceStatistics } from 'node:v8';
6
+ export function collectSystemMetrics(metrics, init) {
7
+ metrics.registerMetricGroup('nodejs_memory_usage_bytes', {
8
+ label: 'memory',
9
+ calculate: () => {
10
+ return {
11
+ ...process.memoryUsage()
12
+ };
13
+ }
14
+ });
15
+ const totalMemoryMetric = metrics.registerMetric('nodejs_memory_total_bytes');
16
+ totalMemoryMetric.update(totalmem());
17
+ metrics.registerMetricGroup('nodejs_fs_usage_bytes', {
18
+ label: 'filesystem',
19
+ calculate: async () => {
20
+ const stats = await statfs(init?.statfsLocation ?? process.cwd());
21
+ const total = stats.bsize * stats.blocks;
22
+ const available = stats.bsize * stats.bavail;
23
+ return {
24
+ total,
25
+ free: stats.bsize * stats.bfree,
26
+ available,
27
+ used: (available / total) * 100
28
+ };
29
+ }
30
+ });
31
+ collectProcessCPUMetrics(metrics);
32
+ collectProcessStartTime(metrics);
33
+ collectMemoryHeap(metrics);
34
+ collectOpenFileDescriptors(metrics);
35
+ collectMaxFileDescriptors(metrics);
36
+ collectEventLoopStats(metrics);
37
+ collectProcessResources(metrics);
38
+ collectProcessHandles(metrics);
39
+ collectProcessRequests(metrics);
40
+ collectHeapSizeAndUsed(metrics);
41
+ collectHeapSpacesSizeAndUsed(metrics);
42
+ collectNodeVersion(metrics);
43
+ collectGcStats(metrics);
44
+ }
45
+ /**
46
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/processCpuTotal.js
47
+ */
48
+ function collectProcessCPUMetrics(metrics) {
49
+ let lastCpuUsage = process.cpuUsage();
50
+ const cpuUserSecondsTotal = metrics.registerCounter('process_cpu_user_seconds_total', {
51
+ help: 'Total user CPU time spent in seconds.'
52
+ });
53
+ const cpuSystemSecondsTotal = metrics.registerCounter('process_cpu_system_seconds_total', {
54
+ help: 'Total system CPU time spent in seconds.'
55
+ });
56
+ metrics.registerCounter('process_cpu_seconds_total', {
57
+ help: 'Total user and system CPU time spent in seconds.',
58
+ calculate: () => {
59
+ const cpuUsage = process.cpuUsage();
60
+ const userUsageMicros = cpuUsage.user - lastCpuUsage.user;
61
+ const systemUsageMicros = cpuUsage.system - lastCpuUsage.system;
62
+ lastCpuUsage = cpuUsage;
63
+ cpuUserSecondsTotal.increment(userUsageMicros / 1e6);
64
+ cpuSystemSecondsTotal.increment(systemUsageMicros / 1e6);
65
+ return (userUsageMicros + systemUsageMicros) / 1e6;
66
+ }
67
+ });
68
+ }
69
+ /**
70
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/processStartTime.js
71
+ */
72
+ function collectProcessStartTime(metrics) {
73
+ const metric = metrics.registerMetric('process_start_time_seconds', {
74
+ help: 'Start time of the process since unix epoch in seconds.'
75
+ });
76
+ metric.update(Math.round(Date.now() / 1000 - process.uptime()));
77
+ }
78
+ /**
79
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/osMemoryHeap.js
80
+ */
81
+ function collectMemoryHeap(metrics) {
82
+ metrics.registerMetric('process_resident_memory_bytes', {
83
+ help: 'Resident memory size in bytes.',
84
+ calculate: () => {
85
+ try {
86
+ return process.memoryUsage().rss;
87
+ }
88
+ catch { }
89
+ return 0;
90
+ }
91
+ });
92
+ metrics.registerMetric('process_virtual_memory_bytes', {
93
+ help: 'Virtual memory size in bytes.',
94
+ calculate: () => {
95
+ // this involves doing sync io in prom-client so skip it
96
+ // https://github.com/siimon/prom-client/blob/c1d76c5d497ef803f6bd90c56c713c3fa811c3e0/lib/metrics/osMemoryHeapLinux.js#L53C5-L54C52
97
+ return 0;
98
+ }
99
+ });
100
+ metrics.registerMetric('process_heap_bytes', {
101
+ help: 'Process heap size in bytes.',
102
+ calculate: () => {
103
+ try {
104
+ return process.memoryUsage().heapTotal;
105
+ }
106
+ catch { }
107
+ return 0;
108
+ }
109
+ });
110
+ }
111
+ /**
112
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/processOpenFileDescriptors.js
113
+ */
114
+ function collectOpenFileDescriptors(metrics) {
115
+ if (process.platform !== 'linux') {
116
+ return;
117
+ }
118
+ metrics.registerMetric('process_open_fds', {
119
+ help: 'Number of open file descriptors.',
120
+ calculate: () => {
121
+ try {
122
+ const fds = readdirSync('/proc/self/fd');
123
+ // Minus 1 to not count the fd that was used by readdirSync(),
124
+ // it's now closed.
125
+ return fds.length - 1;
126
+ }
127
+ catch { }
128
+ return 0;
129
+ }
130
+ });
131
+ }
132
+ /**
133
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/processMaxFileDescriptors.js
134
+ */
135
+ function collectMaxFileDescriptors(metrics) {
136
+ let maxFds;
137
+ // This will fail if a linux-like procfs is not available.
138
+ try {
139
+ const limits = readFileSync('/proc/self/limits', 'utf8');
140
+ const lines = limits.split('\n');
141
+ for (const line of lines) {
142
+ if (line.startsWith('Max open files')) {
143
+ const parts = line.split(/ +/);
144
+ maxFds = Number(parts[1]);
145
+ break;
146
+ }
147
+ }
148
+ }
149
+ catch {
150
+ return;
151
+ }
152
+ if (maxFds == null) {
153
+ return;
154
+ }
155
+ const metric = metrics.registerMetric('process_max_fds', {
156
+ help: 'Maximum number of open file descriptors.'
157
+ });
158
+ metric.update(maxFds);
159
+ }
160
+ /**
161
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/eventLoopLag.js
162
+ */
163
+ function collectEventLoopStats(metrics) {
164
+ try {
165
+ const histogram = monitorEventLoopDelay();
166
+ histogram.enable();
167
+ metrics.registerMetric('nodejs_eventloop_lag_seconds', {
168
+ help: 'Lag of event loop in seconds.',
169
+ calculate: async () => {
170
+ const start = process.hrtime();
171
+ return new Promise(resolve => {
172
+ setImmediate(() => {
173
+ const delta = process.hrtime(start);
174
+ const nanosec = delta[0] * 1e9 + delta[1];
175
+ const seconds = nanosec / 1e9;
176
+ lagMin.update(histogram.min / 1e9);
177
+ lagMax.update(histogram.max / 1e9);
178
+ lagMean.update(histogram.mean / 1e9);
179
+ lagStddev.update(histogram.stddev / 1e9);
180
+ lagP50.update(histogram.percentile(50) / 1e9);
181
+ lagP90.update(histogram.percentile(90) / 1e9);
182
+ lagP99.update(histogram.percentile(99) / 1e9);
183
+ histogram.reset();
184
+ resolve(seconds);
185
+ });
186
+ });
187
+ }
188
+ });
189
+ const lagMin = metrics.registerMetric('nodejs_eventloop_lag_min_seconds', {
190
+ help: 'The minimum recorded event loop delay.'
191
+ });
192
+ const lagMax = metrics.registerMetric('nodejs_eventloop_lag_max_seconds', {
193
+ help: 'The maximum recorded event loop delay.'
194
+ });
195
+ const lagMean = metrics.registerMetric('nodejs_eventloop_lag_mean_seconds', {
196
+ help: 'The mean of the recorded event loop delays.'
197
+ });
198
+ const lagStddev = metrics.registerMetric('nodejs_eventloop_lag_stddev_seconds', {
199
+ help: 'The standard deviation of the recorded event loop delays.'
200
+ });
201
+ const lagP50 = metrics.registerMetric('nodejs_eventloop_lag_p50_seconds', {
202
+ help: 'The 50th percentile of the recorded event loop delays.'
203
+ });
204
+ const lagP90 = metrics.registerMetric('nodejs_eventloop_lag_p90_seconds', {
205
+ help: 'The 90th percentile of the recorded event loop delays.'
206
+ });
207
+ const lagP99 = metrics.registerMetric('nodejs_eventloop_lag_p99_seconds', {
208
+ help: 'The 99th percentile of the recorded event loop delays.'
209
+ });
210
+ }
211
+ catch (err) {
212
+ if (err.code === 'ERR_NOT_IMPLEMENTED') {
213
+ return; // Bun
214
+ }
215
+ throw err;
216
+ }
217
+ }
218
+ /**
219
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/processResources.js
220
+ */
221
+ function collectProcessResources(metrics) {
222
+ // Don't do anything if the function does not exist in previous nodes (exists in node@17.3.0)
223
+ if (typeof process.getActiveResourcesInfo !== 'function') {
224
+ return;
225
+ }
226
+ metrics.registerMetricGroup('nodejs_active_resources', {
227
+ help: 'Number of active resources that are currently keeping the event loop alive, grouped by async resource type.',
228
+ label: 'type',
229
+ calculate: () => {
230
+ const resources = process.getActiveResourcesInfo();
231
+ const data = {};
232
+ for (let i = 0; i < resources.length; i++) {
233
+ const resource = resources[i];
234
+ if (Object.hasOwn(data, resource)) {
235
+ data[resource] += 1;
236
+ }
237
+ else {
238
+ data[resource] = 1;
239
+ }
240
+ }
241
+ return data;
242
+ }
243
+ });
244
+ metrics.registerMetric('nodejs_active_resources_total', {
245
+ help: 'Total number of active resources.',
246
+ calculate: () => {
247
+ const resources = process.getActiveResourcesInfo();
248
+ return resources.length;
249
+ }
250
+ });
251
+ }
252
+ /**
253
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/processHandles.js
254
+ */
255
+ function collectProcessHandles(metrics) {
256
+ // Don't do anything if the function is removed in later nodes (exists in node@6-12...)
257
+ // @ts-expect-error not part of the public API
258
+ if (typeof process._getActiveHandles !== 'function') {
259
+ return;
260
+ }
261
+ metrics.registerMetricGroup('nodejs_active_handles', {
262
+ help: 'Number of active libuv handles grouped by handle type. Every handle type is C++ class name.',
263
+ label: 'type',
264
+ calculate: () => {
265
+ // @ts-expect-error not part of the public API
266
+ const resources = process._getActiveHandles();
267
+ const data = {};
268
+ for (let i = 0; i < resources.length; i++) {
269
+ const listElement = resources[i];
270
+ if (listElement == null || typeof listElement.constructor === 'undefined') {
271
+ continue;
272
+ }
273
+ if (Object.hasOwnProperty.call(data, listElement.constructor.name)) {
274
+ data[listElement.constructor.name] += 1;
275
+ }
276
+ else {
277
+ data[listElement.constructor.name] = 1;
278
+ }
279
+ }
280
+ return data;
281
+ }
282
+ });
283
+ metrics.registerMetric('nodejs_active_handles_total', {
284
+ help: 'Total number of active handles.',
285
+ calculate: () => {
286
+ // @ts-expect-error not part of the public API
287
+ const resources = process._getActiveHandles();
288
+ return resources.length;
289
+ }
290
+ });
291
+ }
292
+ /**
293
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/processRequests.js
294
+ */
295
+ function collectProcessRequests(metrics) {
296
+ // Don't do anything if the function is removed in later nodes (exists in node@6)
297
+ // @ts-expect-error not part of the public API
298
+ if (typeof process._getActiveRequests !== 'function') {
299
+ return;
300
+ }
301
+ metrics.registerMetricGroup('nodejs_active_requests', {
302
+ help: 'Number of active libuv requests grouped by request type. Every request type is C++ class name.',
303
+ label: 'type',
304
+ calculate: () => {
305
+ // @ts-expect-error not part of the public API
306
+ const resources = process._getActiveRequests();
307
+ const data = {};
308
+ for (let i = 0; i < resources.length; i++) {
309
+ const listElement = resources[i];
310
+ if (listElement == null || typeof listElement.constructor === 'undefined') {
311
+ continue;
312
+ }
313
+ if (Object.hasOwnProperty.call(data, listElement.constructor.name)) {
314
+ data[listElement.constructor.name] += 1;
315
+ }
316
+ else {
317
+ data[listElement.constructor.name] = 1;
318
+ }
319
+ }
320
+ return data;
321
+ }
322
+ });
323
+ metrics.registerMetric('nodejs_active_requests_total', {
324
+ help: 'Total number of active requests.',
325
+ calculate: () => {
326
+ // @ts-expect-error not part of the public API
327
+ const resources = process._getActiveRequests();
328
+ return resources.length;
329
+ }
330
+ });
331
+ }
332
+ /**
333
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/heapSizeAndUsed.js
334
+ */
335
+ function collectHeapSizeAndUsed(metrics) {
336
+ const heapSizeUsed = metrics.registerMetric('nodejs_heap_size_used_bytes', {
337
+ help: 'Process heap size used from Node.js in bytes.'
338
+ });
339
+ const externalMemUsed = metrics.registerMetric('nodejs_external_memory_bytes', {
340
+ help: 'Node.js external memory size in bytes.'
341
+ });
342
+ metrics.registerMetric('nodejs_heap_size_total_bytes', {
343
+ help: 'Process heap size from Node.js in bytes.',
344
+ calculate: () => {
345
+ try {
346
+ const memUsage = process.memoryUsage();
347
+ heapSizeUsed.update(memUsage.heapUsed);
348
+ if (memUsage.external !== undefined) {
349
+ externalMemUsed.update(memUsage.external);
350
+ }
351
+ return memUsage.heapTotal;
352
+ }
353
+ catch { }
354
+ return 0;
355
+ }
356
+ });
357
+ }
358
+ /**
359
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/heapSpacesSizeAndUsed.js
360
+ */
361
+ function collectHeapSpacesSizeAndUsed(metrics) {
362
+ try {
363
+ getHeapSpaceStatistics();
364
+ }
365
+ catch (err) {
366
+ if (err.code === 'ERR_NOT_IMPLEMENTED') {
367
+ return; // Bun
368
+ }
369
+ throw err;
370
+ }
371
+ const used = metrics.registerMetricGroup('nodejs_heap_space_size_used_bytes', {
372
+ help: 'Process heap space size used from Node.js in bytes.',
373
+ label: 'space'
374
+ });
375
+ const available = metrics.registerMetricGroup('nodejs_heap_space_size_available_bytes', {
376
+ help: 'Process heap space size available from Node.js in bytes.',
377
+ label: 'space'
378
+ });
379
+ metrics.registerMetricGroup('nodejs_heap_space_size_total_bytes', {
380
+ help: 'Process heap space size total from Node.js in bytes.',
381
+ label: 'space',
382
+ calculate: () => {
383
+ const data = {};
384
+ for (const space of getHeapSpaceStatistics()) {
385
+ const spaceName = space.space_name.substr(0, space.space_name.indexOf('_space'));
386
+ used.update({
387
+ [spaceName]: space.space_used_size
388
+ });
389
+ available.update({
390
+ [spaceName]: space.space_available_size
391
+ });
392
+ data[spaceName] = space.space_size;
393
+ }
394
+ return data;
395
+ }
396
+ });
397
+ }
398
+ /**
399
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/version.js
400
+ */
401
+ function collectNodeVersion(metrics) {
402
+ const metric = metrics.registerMetricGroup('nodejs_version_info', {
403
+ help: 'Node.js version info.'
404
+ });
405
+ const version = process.version;
406
+ const versionSegments = version.slice(1).split('.').map(Number);
407
+ // @ts-expect-error use internal API to get same result as prom-client
408
+ metric.gauge.record(1, {
409
+ version,
410
+ major: versionSegments[0],
411
+ minor: versionSegments[1],
412
+ patch: versionSegments[2]
413
+ });
414
+ }
415
+ /**
416
+ * @see https://github.com/siimon/prom-client/blob/master/lib/metrics/gc.js
417
+ */
418
+ function collectGcStats(metrics) {
419
+ const histogram = metrics.registerHistogramGroup('nodejs_gc_duration_seconds_bucket', {
420
+ buckets: [0.001, 0.01, 0.1, 1, 2, 5],
421
+ label: 'kind'
422
+ });
423
+ const kinds = [];
424
+ kinds[PerfHooksConstants.NODE_PERFORMANCE_GC_MAJOR] = 'major';
425
+ kinds[PerfHooksConstants.NODE_PERFORMANCE_GC_MINOR] = 'minor';
426
+ kinds[PerfHooksConstants.NODE_PERFORMANCE_GC_INCREMENTAL] = 'incremental';
427
+ kinds[PerfHooksConstants.NODE_PERFORMANCE_GC_WEAKCB] = 'weakcb';
428
+ const obs = new PerformanceObserver(list => {
429
+ const entry = list.getEntries()[0];
430
+ // @ts-expect-error types are incomplete
431
+ const kind = kinds[entry.detail.kind];
432
+ // Convert duration from milliseconds to seconds
433
+ histogram.observe({
434
+ [kind]: entry.duration / 1000
435
+ });
436
+ });
437
+ obs.observe({ entryTypes: ['gc'] });
438
+ }
439
+ //# sourceMappingURL=system-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-metrics.js","sourceRoot":"","sources":["../../src/system-metrics.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@libp2p/opentelemetry-metrics",
3
+ "version": "0.0.0-abe9bd154",
4
+ "description": "Opentelemetry metrics gathering for libp2p",
5
+ "license": "Apache-2.0 OR MIT",
6
+ "homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/metrics-opentelemetry#readme",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/libp2p/js-libp2p.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/libp2p/js-libp2p/issues"
13
+ },
14
+ "publishConfig": {
15
+ "access": "public",
16
+ "provenance": true
17
+ },
18
+ "type": "module",
19
+ "types": "./dist/src/index.d.ts",
20
+ "files": [
21
+ "src",
22
+ "dist",
23
+ "!dist/test",
24
+ "!**/*.tsbuildinfo"
25
+ ],
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/src/index.d.ts",
29
+ "import": "./dist/src/index.js"
30
+ }
31
+ },
32
+ "eslintConfig": {
33
+ "extends": "ipfs",
34
+ "parserOptions": {
35
+ "project": true,
36
+ "sourceType": "module"
37
+ }
38
+ },
39
+ "scripts": {
40
+ "clean": "aegir clean",
41
+ "lint": "aegir lint",
42
+ "dep-check": "aegir dep-check",
43
+ "doc-check": "aegir doc-check",
44
+ "build": "aegir build",
45
+ "test": "aegir test",
46
+ "test:node": "aegir test -t node --cov",
47
+ "test:electron-main": "aegir test -t electron-main"
48
+ },
49
+ "dependencies": {
50
+ "@libp2p/interface": "2.3.0-abe9bd154",
51
+ "@opentelemetry/api": "^1.9.0",
52
+ "it-foreach": "^2.1.1",
53
+ "it-stream-types": "^2.0.2"
54
+ },
55
+ "devDependencies": {
56
+ "aegir": "^45.0.5"
57
+ },
58
+ "browser": {
59
+ "./dist/src/system-metrics.js": "./dist/src/system-metrics.browser.js"
60
+ },
61
+ "sideEffects": false
62
+ }
@@ -0,0 +1,38 @@
1
+ import type { CounterGroup, StopTimer } from '@libp2p/interface'
2
+ import type { UpDownCounter as OTelCounter } from '@opentelemetry/api'
3
+
4
+ export class OpenTelemetryCounterGroup implements CounterGroup {
5
+ private readonly label: string
6
+ private readonly counter: OTelCounter
7
+
8
+ constructor (label: string, counter: OTelCounter) {
9
+ this.label = label
10
+ this.counter = counter
11
+ }
12
+
13
+ update (values: Record<string, number>): void {
14
+ Object.entries(values).forEach(([key, value]) => {
15
+ this.counter.add(value, {
16
+ [this.label]: key
17
+ })
18
+ })
19
+ }
20
+
21
+ increment (values: Record<string, number | true>): void {
22
+ Object.entries(values).forEach(([key, value]) => {
23
+ this.counter.add(value === true ? 1 : value, {
24
+ [this.label]: key
25
+ })
26
+ })
27
+ }
28
+
29
+ reset (): void {
30
+ // no-op
31
+ }
32
+
33
+ timer (key: string): StopTimer {
34
+ return () => {
35
+ // no-op
36
+ }
37
+ }
38
+ }
package/src/counter.ts ADDED
@@ -0,0 +1,18 @@
1
+ import type { Counter } from '@libp2p/interface'
2
+ import type { Counter as OTelCounter } from '@opentelemetry/api'
3
+
4
+ export class OpenTelemetryCounter implements Counter {
5
+ private readonly counter: OTelCounter
6
+
7
+ constructor (counter: OTelCounter) {
8
+ this.counter = counter
9
+ }
10
+
11
+ increment (value?: number): void {
12
+ this.counter.add(value ?? 1)
13
+ }
14
+
15
+ reset (): void {
16
+ // no-op
17
+ }
18
+ }
@@ -0,0 +1,34 @@
1
+ import type { HistogramGroup, StopTimer } from '@libp2p/interface'
2
+ import type { Histogram as OTelHistogram } from '@opentelemetry/api'
3
+
4
+ export class OpenTelemetryHistogramGroup implements HistogramGroup {
5
+ private readonly label: string
6
+ private readonly histogram: OTelHistogram
7
+
8
+ constructor (label: string, histogram: OTelHistogram) {
9
+ this.label = label
10
+ this.histogram = histogram
11
+ }
12
+
13
+ observe (values: Record<string, number>): void {
14
+ Object.entries(values).forEach(([key, value]) => {
15
+ this.histogram.record(value, {
16
+ [this.label]: key
17
+ })
18
+ })
19
+ }
20
+
21
+ reset (): void {
22
+ this.histogram.record(0)
23
+ }
24
+
25
+ timer (key: string): StopTimer {
26
+ const start = Date.now()
27
+
28
+ return () => {
29
+ this.histogram.record(Date.now() - start, {
30
+ [this.label]: key
31
+ })
32
+ }
33
+ }
34
+ }