@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":"
|
|
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":"
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/mocks/metrics.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/interface-compliance-tests",
|
|
3
|
-
"version": "6.0
|
|
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.
|
|
112
|
-
"@libp2p/interface": "2.0
|
|
113
|
-
"@libp2p/interface-internal": "2.0.
|
|
114
|
-
"@libp2p/logger": "5.0.
|
|
115
|
-
"@libp2p/multistream-select": "6.0.
|
|
116
|
-
"@libp2p/peer-collections": "6.0.
|
|
117
|
-
"@libp2p/peer-id": "5.0.
|
|
118
|
-
"@libp2p/utils": "6.0.
|
|
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
|
}
|
package/src/mocks/metrics.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
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 {
|