@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.
Files changed (40) hide show
  1. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +90 -14
  2. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
  3. package/dist/call-diagnostic/call-diagnostic-metrics.js +60 -38
  4. package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
  5. package/dist/call-diagnostic/call-diagnostic-metrics.util.js +10 -3
  6. package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
  7. package/dist/client-metrics-prelogin-batcher.js +32 -0
  8. package/dist/client-metrics-prelogin-batcher.js.map +1 -0
  9. package/dist/index.js +0 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/metrics.js +10 -25
  12. package/dist/metrics.js.map +1 -1
  13. package/dist/metrics.types.js.map +1 -1
  14. package/dist/new-metrics.js +5 -4
  15. package/dist/new-metrics.js.map +1 -1
  16. package/dist/prelogin-metrics-batcher.js +1 -1
  17. package/dist/prelogin-metrics-batcher.js.map +1 -1
  18. package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +41 -8
  19. package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +17 -12
  20. package/dist/types/client-metrics-prelogin-batcher.d.ts +2 -0
  21. package/dist/types/index.d.ts +2 -3
  22. package/dist/types/metrics.types.d.ts +3 -1
  23. package/package.json +12 -13
  24. package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +89 -13
  25. package/src/call-diagnostic/call-diagnostic-metrics.ts +35 -8
  26. package/src/call-diagnostic/call-diagnostic-metrics.util.ts +17 -3
  27. package/src/client-metrics-prelogin-batcher.ts +26 -0
  28. package/src/index.ts +2 -2
  29. package/src/metrics.js +8 -23
  30. package/src/metrics.types.ts +12 -1
  31. package/src/new-metrics.ts +2 -2
  32. package/src/prelogin-metrics-batcher.ts +1 -1
  33. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +25 -15
  34. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +199 -1
  35. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +155 -41
  36. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +28 -7
  37. package/test/unit/spec/client-metrics-prelogin-batcher.ts +54 -0
  38. package/test/unit/spec/metrics.js +9 -31
  39. package/test/unit/spec/new-metrics.ts +29 -31
  40. 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
  });