@libp2p/interface-compliance-tests 6.0.1-c628c44c5 → 6.1.0-b3272cfce

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.
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/mocks/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2E,OAAO,EAA0C,MAAM,mBAAmB,CAAA;AA8JjK,wBAAgB,WAAW,IAAK,MAAM,OAAO,CAE5C"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/mocks/metrics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA2E,OAAO,EAAoL,MAAM,mBAAmB,CAAA;AA6X3S,wBAAgB,WAAW,IAAK,MAAM,OAAO,CAE5C"}
@@ -1,3 +1,4 @@
1
+ import { TDigest } from 'tdigest';
1
2
  class DefaultMetric {
2
3
  value = 0;
3
4
  update(value) {
@@ -50,6 +51,124 @@ class DefaultGroupMetric {
50
51
  };
51
52
  }
52
53
  }
54
+ class DefaultHistogram {
55
+ bucketValues = new Map();
56
+ countValue = 0;
57
+ sumValue = 0;
58
+ constructor(opts) {
59
+ const buckets = [
60
+ ...(opts.buckets ?? [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10]),
61
+ Infinity
62
+ ];
63
+ for (const bucket of buckets) {
64
+ this.bucketValues.set(bucket, 0);
65
+ }
66
+ }
67
+ observe(value) {
68
+ this.countValue++;
69
+ this.sumValue += value;
70
+ for (const [bucket, count] of this.bucketValues.entries()) {
71
+ if (value <= bucket) {
72
+ this.bucketValues.set(bucket, count + 1);
73
+ }
74
+ }
75
+ }
76
+ reset() {
77
+ this.countValue = 0;
78
+ this.sumValue = 0;
79
+ for (const bucket of this.bucketValues.keys()) {
80
+ this.bucketValues.set(bucket, 0);
81
+ }
82
+ }
83
+ timer() {
84
+ const start = Date.now();
85
+ return () => {
86
+ this.observe(Date.now() - start);
87
+ };
88
+ }
89
+ }
90
+ class DefaultHistogramGroup {
91
+ histograms = {};
92
+ constructor(opts) {
93
+ this.histograms = {};
94
+ }
95
+ observe(values) {
96
+ for (const [key, value] of Object.entries(values)) {
97
+ if (this.histograms[key] === undefined) {
98
+ this.histograms[key] = new DefaultHistogram({});
99
+ }
100
+ this.histograms[key].observe(value);
101
+ }
102
+ }
103
+ reset() {
104
+ for (const histogram of Object.values(this.histograms)) {
105
+ histogram.reset();
106
+ }
107
+ }
108
+ timer(key) {
109
+ const start = Date.now();
110
+ return () => {
111
+ this.observe({ [key]: Date.now() - start });
112
+ };
113
+ }
114
+ }
115
+ class DefaultSummary {
116
+ sumValue = 0;
117
+ countValue = 0;
118
+ percentiles;
119
+ tdigest = new TDigest(0.01);
120
+ compressCount;
121
+ constructor(opts) {
122
+ this.percentiles = opts.percentiles ?? [0.01, 0.05, 0.5, 0.9, 0.95, 0.99, 0.999];
123
+ this.compressCount = opts.compressCount ?? 1000;
124
+ }
125
+ observe(value) {
126
+ this.sumValue += value;
127
+ this.countValue++;
128
+ this.tdigest.push(value);
129
+ if (this.tdigest.size() > this.compressCount) {
130
+ this.tdigest.compress();
131
+ }
132
+ }
133
+ reset() {
134
+ this.sumValue = 0;
135
+ this.countValue = 0;
136
+ this.tdigest.reset();
137
+ }
138
+ timer() {
139
+ const start = Date.now();
140
+ return () => {
141
+ this.observe(Date.now() - start);
142
+ };
143
+ }
144
+ }
145
+ class DefaultSummaryGroup {
146
+ summaries = {};
147
+ opts;
148
+ constructor(opts) {
149
+ this.summaries = {};
150
+ this.opts = opts;
151
+ }
152
+ observe(values) {
153
+ for (const [key, value] of Object.entries(values)) {
154
+ if (this.summaries[key] === undefined) {
155
+ this.summaries[key] = new DefaultSummary(this.opts);
156
+ }
157
+ this.summaries[key].observe(value);
158
+ }
159
+ }
160
+ reset() {
161
+ for (const summary of Object.values(this.summaries)) {
162
+ summary.reset();
163
+ }
164
+ }
165
+ timer(key) {
166
+ const start = Date.now();
167
+ return () => {
168
+ this.observe({ [key]: Date.now() - start });
169
+ };
170
+ }
171
+ }
53
172
  class MockMetrics {
54
173
  metrics = new Map();
55
174
  trackMultiaddrConnection(maConn) {
@@ -108,6 +227,58 @@ class MockMetrics {
108
227
  this.metrics.set(name, metric);
109
228
  return metric;
110
229
  }
230
+ registerHistogram(name, opts = {}) {
231
+ if (name == null || name.trim() === '') {
232
+ throw new Error('Metric name is required');
233
+ }
234
+ if (opts?.calculate != null) {
235
+ // calculated metric
236
+ this.metrics.set(name, opts.calculate);
237
+ return;
238
+ }
239
+ const metric = new DefaultHistogram(opts);
240
+ this.metrics.set(name, metric);
241
+ return metric;
242
+ }
243
+ registerHistogramGroup(name, opts = {}) {
244
+ if (name == null || name.trim() === '') {
245
+ throw new Error('Metric name is required');
246
+ }
247
+ if (opts?.calculate != null) {
248
+ // calculated metric
249
+ this.metrics.set(name, opts.calculate);
250
+ return;
251
+ }
252
+ const metric = new DefaultHistogramGroup(opts);
253
+ this.metrics.set(name, metric);
254
+ return metric;
255
+ }
256
+ registerSummary(name, opts = {}) {
257
+ if (name == null || name.trim() === '') {
258
+ throw new Error('Metric name is required');
259
+ }
260
+ if (opts?.calculate != null) {
261
+ // calculated metric
262
+ this.metrics.set(name, opts.calculate);
263
+ return;
264
+ }
265
+ const metric = new DefaultSummary(opts);
266
+ this.metrics.set(name, metric);
267
+ return metric;
268
+ }
269
+ registerSummaryGroup(name, opts = {}) {
270
+ if (name == null || name.trim() === '') {
271
+ throw new Error('Metric name is required');
272
+ }
273
+ if (opts?.calculate != null) {
274
+ // calculated metric
275
+ this.metrics.set(name, opts.calculate);
276
+ return;
277
+ }
278
+ const metric = new DefaultSummaryGroup(opts);
279
+ this.metrics.set(name, metric);
280
+ return metric;
281
+ }
111
282
  }
112
283
  export function mockMetrics() {
113
284
  return () => new MockMetrics();
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/mocks/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/mocks/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAGjC,MAAM,aAAa;IACV,KAAK,GAAW,CAAC,CAAA;IAExB,MAAM,CAAE,KAAa;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,SAAS,CAAE,QAAgB,CAAC;QAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAA;IACrB,CAAC;IAED,SAAS,CAAE,QAAgB,CAAC;QAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAA;IACrB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;IAChB,CAAC;IAED,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAExB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;QACjC,CAAC,CAAA;IACH,CAAC;CACF;AAED,MAAM,kBAAkB;IACf,MAAM,GAA2B,EAAE,CAAA;IAE1C,MAAM,CAAE,MAA8B;QACpC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAE,MAAwC;QACjD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YAEjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAE,MAAwC;QACjD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YAEjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;IAClB,CAAC;IAED,KAAK,CAAE,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAExB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;QACvC,CAAC,CAAA;IACH,CAAC;CACF;AAED,MAAM,gBAAgB;IACb,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,UAAU,GAAW,CAAC,CAAA;IACtB,QAAQ,GAAW,CAAC,CAAA;IAE3B,YAAa,IAAsB;QACjC,MAAM,OAAO,GAAG;YACd,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9E,QAAQ;SACT,CAAA;QACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAED,OAAO,CAAE,KAAa;QACpB,IAAI,CAAC,UAAU,EAAE,CAAA;QACjB,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAA;QAEtB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1D,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;QACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACjB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAClC,CAAC;IACH,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;AAED,MAAM,qBAAqB;IAClB,UAAU,GAAqC,EAAE,CAAA;IAExD,YAAa,IAAsB;QACjC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;IACtB,CAAC;IAED,OAAO,CAAE,MAAuC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAA4B,EAAE,CAAC;YAC7E,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACvC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAA;YACjD,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,KAAK;QACH,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACvD,SAAS,CAAC,KAAK,EAAE,CAAA;QACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAE,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAExB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAA;QAC7C,CAAC,CAAA;IACH,CAAC;CACF;AAED,MAAM,cAAc;IACX,QAAQ,GAAW,CAAC,CAAA;IACpB,UAAU,GAAW,CAAC,CAAA;IACtB,WAAW,CAAU;IACrB,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACjB,aAAa,CAAQ;IAEtC,YAAa,IAAoB;QAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;QAChF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAA;IACjD,CAAC;IAED,OAAO,CAAE,KAAa;QACpB,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAA;QACtB,IAAI,CAAC,UAAU,EAAE,CAAA;QAEjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;QACzB,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;QAEnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,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;AAED,MAAM,mBAAmB;IAChB,SAAS,GAAmC,EAAE,CAAA;IACpC,IAAI,CAAgB;IAErC,YAAa,IAAoB;QAC/B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,OAAO,CAAE,MAA8B;QACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACtC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACrD,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAED,KAAK;QACH,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,KAAK,EAAE,CAAA;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAE,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAExB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAA;QAC7C,CAAC,CAAA;IACH,CAAC;CACF;AAED,MAAM,WAAW;IACR,OAAO,GAAG,IAAI,GAAG,EAAe,CAAA;IAEvC,wBAAwB,CAAE,MAA2B;IAErD,CAAC;IAED,mBAAmB,CAAE,MAAc,EAAE,UAAsB;IAE3D,CAAC;IAID,cAAc,CAAE,IAAY,EAAE,IAAS;QACrC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;YAC5B,oBAAoB;YACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YACtC,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAA;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAE9B,OAAO,MAAM,CAAA;IACf,CAAC;IAID,eAAe,CAAE,IAAY,EAAE,IAAS;QACtC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;YAC5B,oBAAoB;YACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YACtC,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAA;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAE9B,OAAO,MAAM,CAAA;IACf,CAAC;IAID,mBAAmB,CAAE,IAAY,EAAE,IAAS;QAC1C,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;YAC5B,oBAAoB;YACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YACtC,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAA;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAE9B,OAAO,MAAM,CAAA;IACf,CAAC;IAID,oBAAoB,CAAE,IAAY,EAAE,IAAS;QAC3C,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;YAC5B,oBAAoB;YACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YACtC,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAA;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAE9B,OAAO,MAAM,CAAA;IACf,CAAC;IAID,iBAAiB,CAAE,IAAY,EAAE,OAAY,EAAE;QAC7C,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;YAC5B,oBAAoB;YACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YACtC,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAE9B,OAAO,MAAM,CAAA;IACf,CAAC;IAID,sBAAsB,CAAE,IAAY,EAAE,OAAY,EAAE;QAClD,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;YAC5B,oBAAoB;YACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YACtC,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAE9B,OAAO,MAAM,CAAA;IACf,CAAC;IAID,eAAe,CAAE,IAAY,EAAE,OAAY,EAAE;QAC3C,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;YAC5B,oBAAoB;YACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YACtC,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAE9B,OAAO,MAAM,CAAA;IACf,CAAC;IAID,oBAAoB,CAAE,IAAY,EAAE,OAAY,EAAE;QAChD,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;YAC5B,oBAAoB;YACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YACtC,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAE9B,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,GAAG,EAAE,CAAC,IAAI,WAAW,EAAE,CAAA;AAChC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/interface-compliance-tests",
3
- "version": "6.0.1-c628c44c5",
3
+ "version": "6.1.0-b3272cfce",
4
4
  "description": "Compliance tests for JS libp2p interfaces",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/interface-compliance-tests#readme",
@@ -108,14 +108,14 @@
108
108
  "test:electron-main": "aegir test -t electron-main"
109
109
  },
110
110
  "dependencies": {
111
- "@libp2p/crypto": "5.0.1-c628c44c5",
112
- "@libp2p/interface": "2.0.1-c628c44c5",
113
- "@libp2p/interface-internal": "2.0.1-c628c44c5",
114
- "@libp2p/logger": "5.0.1-c628c44c5",
115
- "@libp2p/multistream-select": "6.0.1-c628c44c5",
116
- "@libp2p/peer-collections": "6.0.1-c628c44c5",
117
- "@libp2p/peer-id": "5.0.1-c628c44c5",
118
- "@libp2p/utils": "6.0.1-c628c44c5",
111
+ "@libp2p/crypto": "5.0.2-b3272cfce",
112
+ "@libp2p/interface": "2.1.0-b3272cfce",
113
+ "@libp2p/interface-internal": "2.0.2-b3272cfce",
114
+ "@libp2p/logger": "5.0.2-b3272cfce",
115
+ "@libp2p/multistream-select": "6.0.2-b3272cfce",
116
+ "@libp2p/peer-collections": "6.0.2-b3272cfce",
117
+ "@libp2p/peer-id": "5.0.2-b3272cfce",
118
+ "@libp2p/utils": "6.0.2-b3272cfce",
119
119
  "@multiformats/multiaddr": "^12.2.3",
120
120
  "abortable-iterator": "^5.0.1",
121
121
  "aegir": "^44.0.1",
@@ -138,10 +138,12 @@
138
138
  "p-wait-for": "^5.0.2",
139
139
  "protons-runtime": "^5.4.0",
140
140
  "sinon": "^18.0.0",
141
+ "tdigest": "^0.1.2",
141
142
  "uint8arraylist": "^2.4.8",
142
143
  "uint8arrays": "^5.1.0"
143
144
  },
144
145
  "devDependencies": {
146
+ "@types/tdigest": "^0.1.4",
145
147
  "protons": "^7.5.0"
146
148
  }
147
149
  }
@@ -1,4 +1,5 @@
1
- import type { MultiaddrConnection, Stream, Connection, Metric, MetricGroup, StopTimer, Metrics, CalculatedMetricOptions, MetricOptions } from '@libp2p/interface'
1
+ import { TDigest } from 'tdigest'
2
+ import type { MultiaddrConnection, Stream, Connection, Metric, MetricGroup, StopTimer, Metrics, CalculatedMetricOptions, MetricOptions, Histogram, HistogramOptions, HistogramGroup, Summary, SummaryOptions, SummaryGroup, CalculatedHistogramOptions, CalculatedSummaryOptions } from '@libp2p/interface'
2
3
 
3
4
  class DefaultMetric implements Metric {
4
5
  public value: number = 0
@@ -68,6 +69,153 @@ class DefaultGroupMetric implements MetricGroup {
68
69
  }
69
70
  }
70
71
 
72
+ class DefaultHistogram implements Histogram {
73
+ public bucketValues = new Map<number, number>()
74
+ public countValue: number = 0
75
+ public sumValue: number = 0
76
+
77
+ constructor (opts: HistogramOptions) {
78
+ const buckets = [
79
+ ...(opts.buckets ?? [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10]),
80
+ Infinity
81
+ ]
82
+ for (const bucket of buckets) {
83
+ this.bucketValues.set(bucket, 0)
84
+ }
85
+ }
86
+
87
+ observe (value: number): void {
88
+ this.countValue++
89
+ this.sumValue += value
90
+
91
+ for (const [bucket, count] of this.bucketValues.entries()) {
92
+ if (value <= bucket) {
93
+ this.bucketValues.set(bucket, count + 1)
94
+ }
95
+ }
96
+ }
97
+
98
+ reset (): void {
99
+ this.countValue = 0
100
+ this.sumValue = 0
101
+ for (const bucket of this.bucketValues.keys()) {
102
+ this.bucketValues.set(bucket, 0)
103
+ }
104
+ }
105
+
106
+ timer (): StopTimer {
107
+ const start = Date.now()
108
+
109
+ return () => {
110
+ this.observe(Date.now() - start)
111
+ }
112
+ }
113
+ }
114
+
115
+ class DefaultHistogramGroup implements HistogramGroup {
116
+ public histograms: Record<string, DefaultHistogram> = {}
117
+
118
+ constructor (opts: HistogramOptions) {
119
+ this.histograms = {}
120
+ }
121
+
122
+ observe (values: Partial<Record<string, number>>): void {
123
+ for (const [key, value] of Object.entries(values) as Array<[string, number]>) {
124
+ if (this.histograms[key] === undefined) {
125
+ this.histograms[key] = new DefaultHistogram({})
126
+ }
127
+
128
+ this.histograms[key].observe(value)
129
+ }
130
+ }
131
+
132
+ reset (): void {
133
+ for (const histogram of Object.values(this.histograms)) {
134
+ histogram.reset()
135
+ }
136
+ }
137
+
138
+ timer (key: string): StopTimer {
139
+ const start = Date.now()
140
+
141
+ return () => {
142
+ this.observe({ [key]: Date.now() - start })
143
+ }
144
+ }
145
+ }
146
+
147
+ class DefaultSummary implements Summary {
148
+ public sumValue: number = 0
149
+ public countValue: number = 0
150
+ public percentiles: number[]
151
+ public tdigest = new TDigest(0.01)
152
+ private readonly compressCount: number
153
+
154
+ constructor (opts: SummaryOptions) {
155
+ this.percentiles = opts.percentiles ?? [0.01, 0.05, 0.5, 0.9, 0.95, 0.99, 0.999]
156
+ this.compressCount = opts.compressCount ?? 1000
157
+ }
158
+
159
+ observe (value: number): void {
160
+ this.sumValue += value
161
+ this.countValue++
162
+
163
+ this.tdigest.push(value)
164
+ if (this.tdigest.size() > this.compressCount) {
165
+ this.tdigest.compress()
166
+ }
167
+ }
168
+
169
+ reset (): void {
170
+ this.sumValue = 0
171
+ this.countValue = 0
172
+
173
+ this.tdigest.reset()
174
+ }
175
+
176
+ timer (): StopTimer {
177
+ const start = Date.now()
178
+
179
+ return () => {
180
+ this.observe(Date.now() - start)
181
+ }
182
+ }
183
+ }
184
+
185
+ class DefaultSummaryGroup implements SummaryGroup {
186
+ public summaries: Record<string, DefaultSummary> = {}
187
+ private readonly opts: SummaryOptions
188
+
189
+ constructor (opts: SummaryOptions) {
190
+ this.summaries = {}
191
+ this.opts = opts
192
+ }
193
+
194
+ observe (values: Record<string, number>): void {
195
+ for (const [key, value] of Object.entries(values)) {
196
+ if (this.summaries[key] === undefined) {
197
+ this.summaries[key] = new DefaultSummary(this.opts)
198
+ }
199
+
200
+ this.summaries[key].observe(value)
201
+ }
202
+ }
203
+
204
+ reset (): void {
205
+ for (const summary of Object.values(this.summaries)) {
206
+ summary.reset()
207
+ }
208
+ }
209
+
210
+ timer (key: string): StopTimer {
211
+ const start = Date.now()
212
+
213
+ return () => {
214
+ this.observe({ [key]: Date.now() - start })
215
+ }
216
+ }
217
+ }
218
+
71
219
  class MockMetrics implements Metrics {
72
220
  public metrics = new Map<string, any>()
73
221
 
@@ -154,6 +302,82 @@ class MockMetrics implements Metrics {
154
302
 
155
303
  return metric
156
304
  }
305
+
306
+ registerHistogram (name: string, opts: CalculatedHistogramOptions): void
307
+ registerHistogram (name: string, opts?: HistogramOptions): Histogram
308
+ registerHistogram (name: string, opts: any = {}): any {
309
+ if (name == null || name.trim() === '') {
310
+ throw new Error('Metric name is required')
311
+ }
312
+
313
+ if (opts?.calculate != null) {
314
+ // calculated metric
315
+ this.metrics.set(name, opts.calculate)
316
+ return
317
+ }
318
+
319
+ const metric = new DefaultHistogram(opts)
320
+ this.metrics.set(name, metric)
321
+
322
+ return metric
323
+ }
324
+
325
+ registerHistogramGroup (name: string, opts: CalculatedHistogramOptions<Record<string, number>>): void
326
+ registerHistogramGroup (name: string, opts?: HistogramOptions): HistogramGroup
327
+ registerHistogramGroup (name: string, opts: any = {}): any {
328
+ if (name == null || name.trim() === '') {
329
+ throw new Error('Metric name is required')
330
+ }
331
+
332
+ if (opts?.calculate != null) {
333
+ // calculated metric
334
+ this.metrics.set(name, opts.calculate)
335
+ return
336
+ }
337
+
338
+ const metric = new DefaultHistogramGroup(opts)
339
+ this.metrics.set(name, metric)
340
+
341
+ return metric
342
+ }
343
+
344
+ registerSummary (name: string, opts: CalculatedSummaryOptions): void
345
+ registerSummary (name: string, opts?: SummaryOptions): Summary
346
+ registerSummary (name: string, opts: any = {}): any {
347
+ if (name == null || name.trim() === '') {
348
+ throw new Error('Metric name is required')
349
+ }
350
+
351
+ if (opts?.calculate != null) {
352
+ // calculated metric
353
+ this.metrics.set(name, opts.calculate)
354
+ return
355
+ }
356
+
357
+ const metric = new DefaultSummary(opts)
358
+ this.metrics.set(name, metric)
359
+
360
+ return metric
361
+ }
362
+
363
+ registerSummaryGroup (name: string, opts: CalculatedSummaryOptions<Record<string, number>>): void
364
+ registerSummaryGroup (name: string, opts?: SummaryOptions): SummaryGroup
365
+ registerSummaryGroup (name: string, opts: any = {}): any {
366
+ if (name == null || name.trim() === '') {
367
+ throw new Error('Metric name is required')
368
+ }
369
+
370
+ if (opts?.calculate != null) {
371
+ // calculated metric
372
+ this.metrics.set(name, opts.calculate)
373
+ return
374
+ }
375
+
376
+ const metric = new DefaultSummaryGroup(opts)
377
+ this.metrics.set(name, metric)
378
+
379
+ return metric
380
+ }
157
381
  }
158
382
 
159
383
  export function mockMetrics (): () => Metrics {