@webex/internal-plugin-metrics 3.0.0 → 3.1.0-next.2
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.
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +90 -14
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.js +60 -38
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js +10 -3
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
- package/dist/client-metrics-prelogin-batcher.js +32 -0
- package/dist/client-metrics-prelogin-batcher.js.map +1 -0
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics.js +10 -25
- package/dist/metrics.js.map +1 -1
- package/dist/metrics.types.js.map +1 -1
- package/dist/new-metrics.js +5 -4
- package/dist/new-metrics.js.map +1 -1
- package/dist/prelogin-metrics-batcher.js +1 -1
- package/dist/prelogin-metrics-batcher.js.map +1 -1
- package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +41 -8
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +17 -12
- package/dist/types/client-metrics-prelogin-batcher.d.ts +2 -0
- package/dist/types/index.d.ts +2 -3
- package/dist/types/metrics.types.d.ts +3 -1
- package/package.json +12 -13
- package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +89 -13
- package/src/call-diagnostic/call-diagnostic-metrics.ts +35 -8
- package/src/call-diagnostic/call-diagnostic-metrics.util.ts +17 -3
- package/src/client-metrics-prelogin-batcher.ts +26 -0
- package/src/index.ts +2 -2
- package/src/metrics.js +8 -23
- package/src/metrics.types.ts +12 -1
- package/src/new-metrics.ts +2 -2
- package/src/prelogin-metrics-batcher.ts +1 -1
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +25 -15
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +199 -1
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +155 -41
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +28 -7
- package/test/unit/spec/client-metrics-prelogin-batcher.ts +54 -0
- package/test/unit/spec/metrics.js +9 -31
- package/test/unit/spec/new-metrics.ts +29 -31
- package/test/unit/spec/prelogin-metrics-batcher.ts +13 -10
|
@@ -41,11 +41,41 @@ describe('internal-plugin-metrics', () => {
|
|
|
41
41
|
assert.deepEqual(cdl.latencyTimestamps.get('client.alert.displayed'), now.getTime());
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
-
it('should save latency correctly', () => {
|
|
44
|
+
it('should save latency correctly by default and overwrites', () => {
|
|
45
45
|
assert.deepEqual(cdl.precomputedLatencies.size, 0);
|
|
46
46
|
cdl.saveLatency('internal.client.pageJMT', 10);
|
|
47
47
|
assert.deepEqual(cdl.precomputedLatencies.size, 1);
|
|
48
48
|
assert.deepEqual(cdl.precomputedLatencies.get('internal.client.pageJMT'), 10);
|
|
49
|
+
cdl.saveLatency('internal.client.pageJMT', 20);
|
|
50
|
+
assert.deepEqual(cdl.precomputedLatencies.size, 1);
|
|
51
|
+
assert.deepEqual(cdl.precomputedLatencies.get('internal.client.pageJMT'), 20);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('should overwrite latency when accumulate is false', () => {
|
|
55
|
+
assert.deepEqual(cdl.precomputedLatencies.size, 0);
|
|
56
|
+
cdl.saveLatency('internal.client.pageJMT', 10, false);
|
|
57
|
+
assert.deepEqual(cdl.precomputedLatencies.size, 1);
|
|
58
|
+
assert.deepEqual(cdl.precomputedLatencies.get('internal.client.pageJMT'), 10);
|
|
59
|
+
cdl.saveLatency('internal.client.pageJMT', 20, false);
|
|
60
|
+
assert.deepEqual(cdl.precomputedLatencies.size, 1);
|
|
61
|
+
assert.deepEqual(cdl.precomputedLatencies.get('internal.client.pageJMT'), 20);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('should save latency correctly when accumulate is true', () => {
|
|
65
|
+
assert.deepEqual(cdl.precomputedLatencies.size, 0);
|
|
66
|
+
cdl.saveLatency('internal.client.pageJMT', 10, true);
|
|
67
|
+
assert.deepEqual(cdl.precomputedLatencies.size, 1);
|
|
68
|
+
assert.deepEqual(cdl.precomputedLatencies.get('internal.client.pageJMT'), 10);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('should save latency correctly when accumulate is true and there is existing value', () => {
|
|
72
|
+
assert.deepEqual(cdl.precomputedLatencies.size, 0);
|
|
73
|
+
cdl.saveLatency('internal.client.pageJMT', 10);
|
|
74
|
+
assert.deepEqual(cdl.precomputedLatencies.size, 1);
|
|
75
|
+
assert.deepEqual(cdl.precomputedLatencies.get('internal.client.pageJMT'), 10);
|
|
76
|
+
cdl.saveLatency('internal.client.pageJMT', 10, true);
|
|
77
|
+
assert.deepEqual(cdl.precomputedLatencies.size, 1);
|
|
78
|
+
assert.deepEqual(cdl.precomputedLatencies.get('internal.client.pageJMT'), 20);
|
|
49
79
|
});
|
|
50
80
|
|
|
51
81
|
it('should save only first timestamp correctly', () => {
|
|
@@ -78,8 +108,13 @@ describe('internal-plugin-metrics', () => {
|
|
|
78
108
|
cdl.saveTimestamp({key: 'client.alert.displayed'});
|
|
79
109
|
cdl.saveTimestamp({key: 'client.alert.removed'});
|
|
80
110
|
assert.deepEqual(cdl.latencyTimestamps.size, 2);
|
|
111
|
+
cdl.saveLatency('internal.api.fetch.intelligence.models', 42);
|
|
112
|
+
assert.deepEqual(cdl.precomputedLatencies.size, 1);
|
|
113
|
+
|
|
81
114
|
cdl.clearTimestamps();
|
|
115
|
+
|
|
82
116
|
assert.deepEqual(cdl.latencyTimestamps.size, 0);
|
|
117
|
+
assert.deepEqual(cdl.precomputedLatencies.size, 0);
|
|
83
118
|
});
|
|
84
119
|
|
|
85
120
|
it('should calculate diff between timestamps correctly', () => {
|
|
@@ -111,6 +146,127 @@ describe('internal-plugin-metrics', () => {
|
|
|
111
146
|
assert.deepEqual(cdl.getMeetingInfoReqResp(), 10);
|
|
112
147
|
});
|
|
113
148
|
|
|
149
|
+
describe('measureLatency', () => {
|
|
150
|
+
let clock;
|
|
151
|
+
let saveLatencySpy;
|
|
152
|
+
|
|
153
|
+
beforeEach(() => {
|
|
154
|
+
clock = sinon.useFakeTimers();
|
|
155
|
+
|
|
156
|
+
saveLatencySpy = sinon.stub(cdl, 'saveLatency');
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
afterEach(() => {
|
|
160
|
+
clock.restore();
|
|
161
|
+
sinon.restore();
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it('checks measureLatency with accumulate false', async () => {
|
|
165
|
+
const key = 'internal.client.pageJMT';
|
|
166
|
+
const accumulate = false;
|
|
167
|
+
|
|
168
|
+
const callbackStub = sinon.stub().callsFake(() => {
|
|
169
|
+
clock.tick(50);
|
|
170
|
+
return Promise.resolve('test');
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
// accumulate should be false by default
|
|
174
|
+
const promise = cdl.measureLatency(callbackStub, 'internal.client.pageJMT');
|
|
175
|
+
|
|
176
|
+
const resolvedValue = await promise;
|
|
177
|
+
assert.deepEqual(resolvedValue, 'test');
|
|
178
|
+
assert.calledOnceWithExactly(callbackStub);
|
|
179
|
+
assert.calledOnceWithExactly(saveLatencySpy, key, 50, accumulate);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
it('checks measureLatency with accumulate true', async () => {
|
|
183
|
+
const key = 'internal.download.time';
|
|
184
|
+
const accumulate = true;
|
|
185
|
+
const callbackStub = sinon.stub().callsFake(() => {
|
|
186
|
+
clock.tick(20);
|
|
187
|
+
return Promise.resolve('test123');
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
const promise = cdl.measureLatency(callbackStub, 'internal.download.time', accumulate);
|
|
191
|
+
|
|
192
|
+
const resolvedValue = await promise;
|
|
193
|
+
assert.deepEqual(resolvedValue, 'test123');
|
|
194
|
+
assert.calledOnceWithExactly(callbackStub);
|
|
195
|
+
assert.calledOnceWithExactly(saveLatencySpy, key, 20, accumulate);
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
it('checks measureLatency when callBack rejects', async () => {
|
|
199
|
+
const key = 'internal.client.pageJMT';
|
|
200
|
+
const accumulate = false;
|
|
201
|
+
const error = new Error('some error');
|
|
202
|
+
const callbackStub = sinon.stub().callsFake(() => {
|
|
203
|
+
clock.tick(50);
|
|
204
|
+
return Promise.reject(error);
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
const promise = cdl.measureLatency(callbackStub, 'internal.client.pageJMT', accumulate);
|
|
208
|
+
|
|
209
|
+
const rejectedValue = await assert.isRejected(promise);
|
|
210
|
+
assert.deepEqual(rejectedValue, error);
|
|
211
|
+
assert.calledOnceWithExactly(callbackStub);
|
|
212
|
+
assert.calledOnceWithExactly(saveLatencySpy, key, 50, accumulate);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
describe('getRefreshCaptchaReqResp', () => {
|
|
217
|
+
it('returns undefined when no precomputed value available', () => {
|
|
218
|
+
assert.deepEqual(cdl.getRefreshCaptchaReqResp(), undefined);
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
it('returns the correct value', () => {
|
|
222
|
+
cdl.saveLatency('internal.refresh.captcha.time', 123);
|
|
223
|
+
|
|
224
|
+
assert.deepEqual(cdl.getRefreshCaptchaReqResp(), 123);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
it('returns the correct whole number', () => {
|
|
228
|
+
cdl.saveLatency('internal.refresh.captcha.time', 321.44);
|
|
229
|
+
|
|
230
|
+
assert.deepEqual(cdl.getRefreshCaptchaReqResp(), 321);
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
describe('getReachabilityClustersReqResp', () => {
|
|
235
|
+
it('returns undefined when no precomputed value available', () => {
|
|
236
|
+
assert.deepEqual(cdl.getReachabilityClustersReqResp(), undefined);
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
it('returns the correct value', () => {
|
|
240
|
+
cdl.saveLatency('internal.get.cluster.time', 123);
|
|
241
|
+
|
|
242
|
+
assert.deepEqual(cdl.getReachabilityClustersReqResp(), 123);
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
it('returns the correct whole number', () => {
|
|
246
|
+
cdl.saveLatency('internal.get.cluster.time', 321.44);
|
|
247
|
+
|
|
248
|
+
assert.deepEqual(cdl.getReachabilityClustersReqResp(), 321);
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
describe('getExchangeCITokenJMT', () => {
|
|
253
|
+
it('returns undefined when no precomputed value available', () => {
|
|
254
|
+
assert.deepEqual(cdl.getExchangeCITokenJMT(), undefined);
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
it('returns the correct value', () => {
|
|
258
|
+
cdl.saveLatency('internal.exchange.ci.token.time', 123);
|
|
259
|
+
|
|
260
|
+
assert.deepEqual(cdl.getExchangeCITokenJMT(), 123);
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
it('returns the correct whole number', () => {
|
|
264
|
+
cdl.saveLatency('internal.exchange.ci.token.time', 321.44);
|
|
265
|
+
|
|
266
|
+
assert.deepEqual(cdl.getExchangeCITokenJMT(), 321);
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
|
|
114
270
|
describe('saveTimestamp', () => {
|
|
115
271
|
afterEach(() => {
|
|
116
272
|
sinon.restore();
|
|
@@ -512,9 +668,51 @@ describe('internal-plugin-metrics', () => {
|
|
|
512
668
|
assert.deepEqual(cdl.getInterstitialToMediaOKJMT(), 10);
|
|
513
669
|
});
|
|
514
670
|
|
|
671
|
+
it('calculates getU2CTime correctly', () => {
|
|
672
|
+
it('returns undefined when no precomputed value available', () => {
|
|
673
|
+
assert.deepEqual(cdl.getU2CTime(), undefined);
|
|
674
|
+
});
|
|
675
|
+
|
|
676
|
+
it('returns the correct value', () => {
|
|
677
|
+
cdl.saveLatency('internal.get.u2c.time', 123);
|
|
678
|
+
|
|
679
|
+
assert.deepEqual(cdl.getU2CTime(), 123);
|
|
680
|
+
});
|
|
681
|
+
|
|
682
|
+
it('returns the correct whole number', () => {
|
|
683
|
+
cdl.saveLatency('internal.get.u2c.time', 321.44);
|
|
684
|
+
|
|
685
|
+
assert.deepEqual(cdl.getU2CTime(), 321);
|
|
686
|
+
});
|
|
687
|
+
});
|
|
688
|
+
|
|
515
689
|
it('calculates getDownloadTimeJMT correctly', () => {
|
|
516
690
|
cdl.saveLatency('internal.download.time', 1000);
|
|
517
691
|
assert.deepEqual(cdl.getDownloadTimeJMT(), 1000);
|
|
518
692
|
});
|
|
693
|
+
|
|
694
|
+
describe('getOtherAppApiReqResp', () => {
|
|
695
|
+
it('returns undefined when no precomputed value available', () => {
|
|
696
|
+
assert.deepEqual(cdl.getOtherAppApiReqResp(), undefined);
|
|
697
|
+
});
|
|
698
|
+
|
|
699
|
+
it('returns undefined if it is less than 0', () => {
|
|
700
|
+
cdl.saveLatency('internal.other.app.api.time', 0);
|
|
701
|
+
|
|
702
|
+
assert.deepEqual(cdl.getOtherAppApiReqResp(), undefined);
|
|
703
|
+
});
|
|
704
|
+
|
|
705
|
+
it('returns the correct value', () => {
|
|
706
|
+
cdl.saveLatency('internal.other.app.api.time', 123);
|
|
707
|
+
|
|
708
|
+
assert.deepEqual(cdl.getOtherAppApiReqResp(), 123);
|
|
709
|
+
});
|
|
710
|
+
|
|
711
|
+
it('returns the correct whole number', () => {
|
|
712
|
+
cdl.saveLatency('internal.other.app.api.time', 321.44);
|
|
713
|
+
|
|
714
|
+
assert.deepEqual(cdl.getOtherAppApiReqResp(), 321);
|
|
715
|
+
});
|
|
716
|
+
});
|
|
519
717
|
});
|
|
520
718
|
});
|