@webex/internal-plugin-metrics 3.12.0-task-refactor.1 → 3.12.0-webex-services-ready.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 (56) hide show
  1. package/dist/batcher.js +3 -0
  2. package/dist/batcher.js.map +1 -1
  3. package/dist/call-diagnostic/call-diagnostic-metrics-batcher.js +23 -0
  4. package/dist/call-diagnostic/call-diagnostic-metrics-batcher.js.map +1 -1
  5. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +68 -50
  6. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
  7. package/dist/call-diagnostic/call-diagnostic-metrics.js +60 -8
  8. package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
  9. package/dist/call-diagnostic/call-diagnostic-metrics.util.js +44 -4
  10. package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
  11. package/dist/call-diagnostic/config.js +17 -3
  12. package/dist/call-diagnostic/config.js.map +1 -1
  13. package/dist/config.js +1 -0
  14. package/dist/config.js.map +1 -1
  15. package/dist/generic-metrics.js +8 -6
  16. package/dist/generic-metrics.js.map +1 -1
  17. package/dist/index.js +7 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/metrics.js +1 -1
  20. package/dist/metrics.types.js.map +1 -1
  21. package/dist/new-metrics.js +56 -20
  22. package/dist/new-metrics.js.map +1 -1
  23. package/dist/prelogin-metrics-batcher.js +23 -0
  24. package/dist/prelogin-metrics-batcher.js.map +1 -1
  25. package/dist/prelogin-metrics.js +106 -0
  26. package/dist/prelogin-metrics.js.map +1 -0
  27. package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +9 -0
  28. package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +57 -20
  29. package/dist/types/call-diagnostic/call-diagnostic-metrics.util.d.ts +23 -2
  30. package/dist/types/call-diagnostic/config.d.ts +6 -19
  31. package/dist/types/config.d.ts +16 -15
  32. package/dist/types/index.d.ts +2 -1
  33. package/dist/types/metrics.types.d.ts +4 -4
  34. package/dist/types/new-metrics.d.ts +12 -0
  35. package/dist/types/prelogin-metrics.d.ts +47 -0
  36. package/package.json +11 -11
  37. package/src/batcher.js +4 -0
  38. package/src/call-diagnostic/call-diagnostic-metrics-batcher.ts +26 -0
  39. package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +139 -70
  40. package/src/call-diagnostic/call-diagnostic-metrics.ts +52 -1
  41. package/src/call-diagnostic/call-diagnostic-metrics.util.ts +49 -2
  42. package/src/call-diagnostic/config.ts +15 -0
  43. package/src/config.js +1 -0
  44. package/src/generic-metrics.ts +6 -6
  45. package/src/index.ts +2 -0
  46. package/src/metrics.types.ts +3 -3
  47. package/src/new-metrics.ts +42 -0
  48. package/src/prelogin-metrics-batcher.ts +26 -0
  49. package/src/prelogin-metrics.ts +94 -0
  50. package/test/unit/spec/batcher.js +43 -0
  51. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +183 -11
  52. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +324 -366
  53. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +724 -159
  54. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +92 -3
  55. package/test/unit/spec/prelogin-metrics-batcher.ts +190 -36
  56. package/test/unit/spec/prelogin-metrics.ts +132 -0
@@ -143,7 +143,7 @@ describe('internal-plugin-metrics', () => {
143
143
  cdl.saveTimestamp({key: 'client.alert.removed', value: 50});
144
144
  const res = cdl.getDiffBetweenTimestamps('client.alert.displayed', 'client.alert.removed', {
145
145
  minimum: 0,
146
- maximum: 100
146
+ maximum: 100,
147
147
  });
148
148
  assert.deepEqual(res, 40);
149
149
  });
@@ -153,7 +153,7 @@ describe('internal-plugin-metrics', () => {
153
153
  cdl.saveTimestamp({key: 'client.alert.removed', value: 45});
154
154
  const res = cdl.getDiffBetweenTimestamps('client.alert.displayed', 'client.alert.removed', {
155
155
  minimum: 10,
156
- maximum: 100
156
+ maximum: 100,
157
157
  });
158
158
  assert.deepEqual(res, 10);
159
159
  });
@@ -163,7 +163,7 @@ describe('internal-plugin-metrics', () => {
163
163
  cdl.saveTimestamp({key: 'client.alert.removed', value: 210});
164
164
  const res = cdl.getDiffBetweenTimestamps('client.alert.displayed', 'client.alert.removed', {
165
165
  minimum: 0,
166
- maximum: 100
166
+ maximum: 100,
167
167
  });
168
168
  assert.deepEqual(res, 100);
169
169
  });
@@ -172,7 +172,7 @@ describe('internal-plugin-metrics', () => {
172
172
  cdl.saveTimestamp({key: 'client.alert.displayed', value: 50});
173
173
  cdl.saveTimestamp({key: 'client.alert.removed', value: 45});
174
174
  const res = cdl.getDiffBetweenTimestamps('client.alert.displayed', 'client.alert.removed', {
175
- maximum: 100
175
+ maximum: 100,
176
176
  });
177
177
  assert.deepEqual(res, 0);
178
178
  });
@@ -181,7 +181,7 @@ describe('internal-plugin-metrics', () => {
181
181
  cdl.saveTimestamp({key: 'client.alert.displayed', value: 10});
182
182
  cdl.saveTimestamp({key: 'client.alert.removed', value: 2000});
183
183
  const res = cdl.getDiffBetweenTimestamps('client.alert.displayed', 'client.alert.removed', {
184
- minimum: 5
184
+ minimum: 5,
185
185
  });
186
186
  assert.deepEqual(res, 1990);
187
187
  });
@@ -191,7 +191,7 @@ describe('internal-plugin-metrics', () => {
191
191
  cdl.saveTimestamp({key: 'client.alert.removed', value: 50});
192
192
  const res = cdl.getDiffBetweenTimestamps('client.alert.displayed', 'client.alert.removed', {
193
193
  minimum: 10,
194
- maximum: 1000
194
+ maximum: 1000,
195
195
  });
196
196
  assert.deepEqual(res, 10);
197
197
  });
@@ -200,7 +200,7 @@ describe('internal-plugin-metrics', () => {
200
200
  cdl.saveTimestamp({key: 'client.alert.displayed', value: 10});
201
201
  const res = cdl.getDiffBetweenTimestamps('client.alert.displayed', 'client.alert.removed', {
202
202
  minimum: 0,
203
- maximum: 100
203
+ maximum: 100,
204
204
  });
205
205
  assert.deepEqual(res, undefined);
206
206
  });
@@ -406,14 +406,16 @@ describe('internal-plugin-metrics', () => {
406
406
  });
407
407
 
408
408
  it('calculates getShowInterstitialTime correctly', () => {
409
- cdl.saveTimestamp({key: 'client.interstitial-window.start-launch', value: 10});
409
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 10});
410
410
  cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 20});
411
411
  assert.deepEqual(cdl.getShowInterstitialTime(), 10);
412
412
  });
413
413
 
414
414
  it('calculates getCallInitJoinReq correctly', () => {
415
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 5});
415
416
  cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
416
417
  cdl.saveTimestamp({key: 'client.locus.join.request', value: 20});
418
+ // showedToJoinReq = 20-5 = 15, showInterstitialTime = 10-5 = 5, result = 15-5 = 10
417
419
  assert.deepEqual(cdl.getCallInitJoinReq(), 10);
418
420
  });
419
421
 
@@ -509,16 +511,60 @@ describe('internal-plugin-metrics', () => {
509
511
 
510
512
  it('calculates getStayLobbyTime correctly', () => {
511
513
  cdl.saveTimestamp({
512
- key: 'client.locus.join.response',
514
+ key: 'client.lobby.entered',
513
515
  value: 10,
514
516
  });
515
517
  cdl.saveTimestamp({
516
- key: 'internal.host.meeting.participant.admitted',
518
+ key: 'client.lobby.exited',
517
519
  value: 20,
518
520
  });
519
521
  assert.deepEqual(cdl.getStayLobbyTime(), 10);
520
522
  });
521
523
 
524
+ describe('getStayLobbyTimeCappedBy', () => {
525
+ it('returns 0 when lobbyStartTimestamp is missing', () => {
526
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 100});
527
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), 0);
528
+ });
529
+
530
+ it('returns undefined when endTimestampKey is missing', () => {
531
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 10});
532
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), undefined);
533
+ });
534
+
535
+ it('uses maximumEndTimestamp when lobby end does not exist', () => {
536
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 10});
537
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
538
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), 40);
539
+ });
540
+
541
+ it('uses lobby end when it is before maximumEndTimestamp', () => {
542
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 10});
543
+ cdl.saveTimestamp({key: 'client.lobby.exited', value: 30});
544
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
545
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), 20);
546
+ });
547
+
548
+ it('uses maximumEndTimestamp when lobby end is after it', () => {
549
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 10});
550
+ cdl.saveTimestamp({key: 'client.lobby.exited', value: 60});
551
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
552
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), 40);
553
+ });
554
+
555
+ it('clamps to 0 when result would be negative', () => {
556
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 100});
557
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
558
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), 0);
559
+ });
560
+
561
+ it('clamps to MAX_INTEGER when result is very large', () => {
562
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 0});
563
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 2147483648});
564
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), 2147483647);
565
+ });
566
+ });
567
+
522
568
  it('calculates getPageJMT correctly', () => {
523
569
  cdl.saveLatency('internal.client.pageJMT', 10);
524
570
  assert.deepEqual(cdl.getPageJMT(), 10);
@@ -530,76 +576,40 @@ describe('internal-plugin-metrics', () => {
530
576
  });
531
577
 
532
578
  it('calculates getClickToInterstitial correctly', () => {
533
- cdl.saveTimestamp({
534
- key: 'internal.client.meeting.click.joinbutton',
535
- value: 10,
536
- });
537
- cdl.saveTimestamp({
538
- key: 'internal.client.meeting.interstitial-window.showed',
539
- value: 20,
540
- });
541
- assert.deepEqual(cdl.getClickToInterstitial(), 10);
542
- });
543
-
544
- it('calculates getClickToInterstitial without join button timestamp', () => {
545
579
  cdl.saveLatency('internal.click.to.interstitial', 5);
546
- cdl.saveTimestamp({
547
- key: 'internal.client.meeting.interstitial-window.showed',
548
- value: 20,
549
- });
550
580
  assert.deepEqual(cdl.getClickToInterstitial(), 5);
551
581
  });
552
582
 
553
- it('calculates getClickToInterstitial without join button timestamp when it is 0', () => {
583
+ it('calculates getClickToInterstitial correctly when it is 0', () => {
554
584
  cdl.saveLatency('internal.click.to.interstitial', 0);
555
- cdl.saveTimestamp({
556
- key: 'internal.client.meeting.interstitial-window.showed',
557
- value: 20,
558
- });
559
585
  assert.deepEqual(cdl.getClickToInterstitial(), 0);
560
586
  });
561
587
 
562
- it('calculates getClickToInterstitial without join button timestamp when it is greater than MAX_INTEGER', () => {
588
+ it('calculates getClickToInterstitial correctly when it is greater than MAX_INTEGER', () => {
563
589
  cdl.saveLatency('internal.click.to.interstitial', 2147483648);
564
590
  assert.deepEqual(cdl.getClickToInterstitial(), 2147483647);
565
591
  });
566
592
 
567
593
  it('calculates getClickToInterstitialWithUserDelay correctly', () => {
568
- cdl.saveTimestamp({
569
- key: 'internal.client.meeting.click.joinbutton',
570
- value: 10,
571
- });
572
- cdl.saveTimestamp({
573
- key: 'internal.client.meeting.interstitial-window.showed',
574
- value: 20,
575
- });
576
- assert.deepEqual(cdl.getClickToInterstitialWithUserDelay(), 10);
577
- });
578
-
579
- it('calculates getClickToInterstitialWithUserDelay without join button timestamp', () => {
580
594
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 5);
581
- cdl.saveTimestamp({
582
- key: 'internal.client.meeting.interstitial-window.showed',
583
- value: 20,
584
- });
585
595
  assert.deepEqual(cdl.getClickToInterstitialWithUserDelay(), 5);
586
596
  });
587
597
 
588
- it('calculates getClickToInterstitialWithUserDelay without join button timestamp when it is 0', () => {
598
+ it('calculates getClickToInterstitialWithUserDelay correctly when it is 0', () => {
589
599
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 0);
590
- cdl.saveTimestamp({
591
- key: 'internal.client.meeting.interstitial-window.showed',
592
- value: 20,
593
- });
594
600
  assert.deepEqual(cdl.getClickToInterstitialWithUserDelay(), 0);
595
601
  });
596
602
 
597
- it('calculates getClickToInterstitialWithUserDelay without join button timestamp when it is greater than MAX_INTEGER', () => {
603
+ it('calculates getClickToInterstitialWithUserDelay correctly when it is greater than MAX_INTEGER', () => {
598
604
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 2147483648);
599
605
  assert.deepEqual(cdl.getClickToInterstitialWithUserDelay(), 2147483647);
600
606
  });
601
607
 
602
608
  it('calculates getInterstitialToJoinOK correctly', () => {
609
+ cdl.saveTimestamp({
610
+ key: 'internal.client.meeting.interstitial-window.showed',
611
+ value: 5,
612
+ });
603
613
  cdl.saveTimestamp({
604
614
  key: 'internal.client.interstitial-window.click.joinbutton',
605
615
  value: 10,
@@ -608,12 +618,13 @@ describe('internal-plugin-metrics', () => {
608
618
  key: 'client.locus.join.response',
609
619
  value: 20,
610
620
  });
621
+ // showedToJoinResp = 20-5 = 15, showInterstitialTime = 10-5 = 5, result = 15-5 = 10
611
622
  assert.deepEqual(cdl.getInterstitialToJoinOK(), 10);
612
623
  });
613
624
 
614
625
  it('calculates getInterstitialToJoinOK correctly when one value is not a number', () => {
615
626
  cdl.saveTimestamp({
616
- key: 'internal.client.interstitial-window.click.joinbutton',
627
+ key: 'internal.client.meeting.interstitial-window.showed',
617
628
  value: 'ten' as unknown as number,
618
629
  });
619
630
  cdl.saveTimestamp({
@@ -624,22 +635,12 @@ describe('internal-plugin-metrics', () => {
624
635
  });
625
636
 
626
637
  it('calculates getCallInitMediaEngineReady correctly', () => {
627
- cdl.saveTimestamp({
628
- key: 'internal.client.interstitial-window.click.joinbutton',
629
- value: 10,
630
- });
631
- cdl.saveTimestamp({
632
- key: 'client.media-engine.ready',
633
- value: 20,
634
- });
635
- assert.deepEqual(cdl.getCallInitMediaEngineReady(), 10);
638
+ sinon.stub(cdl, 'getInterstitialToMediaOKJMT').returns(42);
639
+ assert.deepEqual(cdl.getCallInitMediaEngineReady(), 42);
636
640
  });
637
641
 
638
642
  it('calculates getTotalJMT correctly', () => {
639
- cdl.saveTimestamp({
640
- key: 'internal.client.interstitial-window.click.joinbutton',
641
- value: 5,
642
- });
643
+ cdl.saveLatency('internal.click.to.interstitial', 10);
643
644
  cdl.saveTimestamp({
644
645
  key: 'internal.client.meeting.click.joinbutton',
645
646
  value: 10,
@@ -648,372 +649,276 @@ describe('internal-plugin-metrics', () => {
648
649
  key: 'internal.client.meeting.interstitial-window.showed',
649
650
  value: 20,
650
651
  });
652
+ cdl.saveTimestamp({
653
+ key: 'internal.client.interstitial-window.click.joinbutton',
654
+ value: 25,
655
+ });
651
656
  cdl.saveTimestamp({
652
657
  key: 'client.locus.join.response',
653
658
  value: 40,
654
659
  });
655
- assert.deepEqual(cdl.getTotalJMT(), 45);
660
+ // clickToInterstitial = 20-10 = 10
661
+ // showedToJoinLocusResponse = 40-20 = 20
662
+ // showInterstitialTime = 25-20 = 5
663
+ // total = 10 + 20 - 5 = 25
664
+ assert.deepEqual(cdl.getTotalJMT(), 25);
656
665
  });
657
666
 
658
667
  it('calculates getTotalJMT correctly when clickToInterstitial is 0', () => {
659
- cdl.saveLatency('internal.click.to.interstitial', 0);
660
- cdl.saveTimestamp({
661
- key: 'internal.client.interstitial-window.click.joinbutton',
662
- value: 20,
663
- });
664
- cdl.saveTimestamp({
665
- key: 'client.locus.join.response',
666
- value: 40,
667
- });
668
- assert.deepEqual(cdl.getTotalJMT(), 20);
669
- });
670
-
671
- it('calculates getTotalJMT correctly when interstitialToJoinOk is 0', () => {
672
- cdl.saveTimestamp({
673
- key: 'internal.client.interstitial-window.click.joinbutton',
674
- value: 40,
675
- });
676
- cdl.saveLatency('internal.click.to.interstitial', 12);
677
- cdl.saveTimestamp({
678
- key: 'client.locus.join.response',
679
- value: 40,
680
- });
681
- assert.deepEqual(cdl.getTotalJMT(), 12);
682
- });
683
-
684
- it('calculates getTotalJMT correctly when both clickToInterstitial and interstitialToJoinOk are 0', () => {
685
- cdl.saveTimestamp({
686
- key: 'internal.client.interstitial-window.click.joinbutton',
687
- value: 40,
688
- });
689
- cdl.saveLatency('internal.click.to.interstitial', 0);
690
- cdl.saveTimestamp({
691
- key: 'client.locus.join.response',
692
- value: 40,
693
- });
694
- assert.deepEqual(cdl.getTotalJMT(), 0);
695
- });
696
-
697
- it('calculates getTotalJMT correctly when both clickToInterstitial is not a number', () => {
698
- cdl.saveTimestamp({
699
- key: 'internal.client.interstitial-window.click.joinbutton',
700
- value: 40,
701
- });
702
- cdl.saveLatency('internal.click.to.interstitial', 'eleven' as unknown as number);
703
- cdl.saveTimestamp({
704
- key: 'client.locus.join.response',
705
- value: 40,
706
- });
707
- assert.deepEqual(cdl.getTotalJMT(), undefined);
708
- });
709
-
710
- it('calculates getTotalJMT correctly when it is greater than MAX_INTEGER', () => {
668
+ cdl.saveLatency('internal.click.to.interstitial', 0);
711
669
  cdl.saveTimestamp({
712
- key: 'internal.client.interstitial-window.click.joinbutton',
713
- value: 5,
670
+ key: 'internal.client.meeting.interstitial-window.showed',
671
+ value: 20,
714
672
  });
715
673
  cdl.saveTimestamp({
716
674
  key: 'client.locus.join.response',
717
675
  value: 40,
718
676
  });
719
- cdl.saveLatency('internal.click.to.interstitial', 2147483648);
720
- assert.deepEqual(cdl.getTotalJMT(), 2147483647);
677
+ // showedToJoinLocusResponse = 40-20 = 20, showInterstitialTime = 0
678
+ // total = 0 + 20 - 0 = 20
679
+ assert.deepEqual(cdl.getTotalJMT(), 20);
721
680
  });
722
681
 
723
- it('calculates getTotalJMTWithUserDelay correctly', () => {
724
- cdl.saveTimestamp({
725
- key: 'internal.client.interstitial-window.click.joinbutton',
726
- value: 5,
727
- });
728
- cdl.saveTimestamp({
729
- key: 'internal.client.meeting.click.joinbutton',
730
- value: 10,
731
- });
682
+ it('calculates getTotalJMT correctly when interstitialClickJoinToJoinLocusResponse is 0', () => {
732
683
  cdl.saveTimestamp({
733
684
  key: 'internal.client.meeting.interstitial-window.showed',
734
- value: 20,
685
+ value: 40,
735
686
  });
687
+ cdl.saveLatency('internal.click.to.interstitial', 12);
736
688
  cdl.saveTimestamp({
737
689
  key: 'client.locus.join.response',
738
690
  value: 40,
739
691
  });
740
- assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 45);
692
+ // showedToJoinLocusResponse = 0, showInterstitialTime = 0
693
+ // total = 12 + 0 - 0 = 12
694
+ assert.deepEqual(cdl.getTotalJMT(), 12);
741
695
  });
742
696
 
743
- it('calculates getTotalJMTWithUserDelay correctly when clickToInterstitialWithUserDelay is 0', () => {
744
- cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 0);
745
- cdl.saveTimestamp({
746
- key: 'internal.client.interstitial-window.click.joinbutton',
747
- value: 20,
748
- });
749
- cdl.saveTimestamp({
750
- key: 'client.locus.join.response',
751
- value: 40,
752
- });
753
- assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 20);
754
- });
755
-
756
- it('calculates getTotalJMTWithUserDelay correctly when interstitialToJoinOk is 0', () => {
757
- cdl.saveTimestamp({
758
- key: 'internal.client.interstitial-window.click.joinbutton',
759
- value: 40,
760
- });
761
- cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 12);
762
- cdl.saveTimestamp({
763
- key: 'client.locus.join.response',
764
- value: 40,
765
- });
766
- assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 12);
767
- });
768
-
769
- it('calculates getTotalJMTWithUserDelay correctly when both clickToInterstitialWithUserDelay and interstitialToJoinOk are 0', () => {
770
- cdl.saveTimestamp({
771
- key: 'internal.client.interstitial-window.click.joinbutton',
772
- value: 40,
773
- });
774
- cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 0);
775
- cdl.saveTimestamp({
776
- key: 'client.locus.join.response',
777
- value: 40,
778
- });
779
- assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 0);
780
- });
781
-
782
- it('calculates getTotalJMTWithUserDelay correctly when both clickToInterstitialWithUserDelay is not a number', () => {
783
- cdl.saveTimestamp({
784
- key: 'internal.client.interstitial-window.click.joinbutton',
785
- value: 40,
786
- });
787
- cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 'eleven' as unknown as number);
788
- cdl.saveTimestamp({
789
- key: 'client.locus.join.response',
790
- value: 40,
791
- });
792
- assert.deepEqual(cdl.getTotalJMTWithUserDelay(), undefined);
793
- });
794
-
795
- it('calculates getTotalJMTWithUserDelay correctly when it is greater than MAX_INTEGER', () => {
796
- cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 2147483648);
797
- cdl.saveTimestamp({
798
- key: 'internal.client.interstitial-window.click.joinbutton',
799
- value: 20,
800
- });
801
- cdl.saveTimestamp({
802
- key: 'client.locus.join.response',
803
- value: 40,
804
- });
805
- assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 2147483647);
806
- });
807
-
808
- it('calculates getTotalMediaJMT correctly', () => {
809
- cdl.saveTimestamp({
810
- key: 'internal.client.meeting.click.joinbutton',
811
- value: 5,
812
- });
697
+ it('calculates getTotalJMT correctly when both clickToInterstitial and interstitialClickJoinToJoinLocusResponse are 0', () => {
813
698
  cdl.saveTimestamp({
814
699
  key: 'internal.client.meeting.interstitial-window.showed',
815
- value: 8,
816
- });
817
- cdl.saveTimestamp({
818
- key: 'internal.client.interstitial-window.click.joinbutton',
819
- value: 10,
820
- });
821
- cdl.saveTimestamp({
822
- key: 'client.locus.join.request',
823
- value: 12,
700
+ value: 40,
824
701
  });
702
+ cdl.saveLatency('internal.click.to.interstitial', 0);
825
703
  cdl.saveTimestamp({
826
704
  key: 'client.locus.join.response',
827
- value: 20,
828
- });
829
- cdl.saveTimestamp({
830
- key: 'internal.host.meeting.participant.admitted',
831
- value: 24,
832
- });
833
- cdl.saveTimestamp({
834
- key: 'client.ice.start',
835
- value: 30,
836
- });
837
- cdl.saveTimestamp({
838
- key: 'client.ice.end',
839
705
  value: 40,
840
706
  });
841
- assert.deepEqual(cdl.getTotalMediaJMT(), 27);
707
+ assert.deepEqual(cdl.getTotalJMT(), 0);
842
708
  });
843
709
 
844
- it('calculates getTotalMediaJMT correctly when it is greater than MAX_INTEGER', () => {
845
- cdl.saveTimestamp({
846
- key: 'internal.client.meeting.click.joinbutton',
847
- value: 5,
848
- });
710
+ it('calculates getTotalJMT correctly when both clickToInterstitial is not a number', () => {
849
711
  cdl.saveTimestamp({
850
712
  key: 'internal.client.meeting.interstitial-window.showed',
851
- value: 8,
852
- });
853
- cdl.saveTimestamp({
854
- key: 'internal.client.interstitial-window.click.joinbutton',
855
- value: 10,
856
- });
857
- cdl.saveTimestamp({
858
- key: 'client.locus.join.request',
859
- value: 12,
713
+ value: 40,
860
714
  });
715
+ cdl.saveLatency('internal.click.to.interstitial', 'eleven' as unknown as number);
861
716
  cdl.saveTimestamp({
862
717
  key: 'client.locus.join.response',
863
- value: 2147483700,
864
- });
865
- cdl.saveTimestamp({
866
- key: 'internal.host.meeting.participant.admitted',
867
- value: 2147483800,
868
- });
869
- cdl.saveTimestamp({
870
- key: 'client.ice.start',
871
- value: 30,
872
- });
873
- cdl.saveTimestamp({
874
- key: 'client.ice.end',
875
- value: 100,
718
+ value: 40,
876
719
  });
877
- assert.deepEqual(cdl.getTotalMediaJMT(), 2147483647);
720
+ assert.deepEqual(cdl.getTotalJMT(), undefined);
878
721
  });
879
722
 
880
- it('calculates getTotalMediaJMT correctly with allowMediaInLobby true', () => {
881
- cdl.saveTimestamp({
882
- key: 'internal.client.meeting.click.joinbutton',
883
- value: 5,
884
- options: {meetingId: 'meeting-id'},
885
- });
723
+ it('calculates getTotalJMT correctly when it is greater than MAX_INTEGER', () => {
886
724
  cdl.saveTimestamp({
887
725
  key: 'internal.client.meeting.interstitial-window.showed',
888
- value: 8,
889
- });
890
- cdl.saveTimestamp({
891
- key: 'internal.client.interstitial-window.click.joinbutton',
892
- value: 10,
893
- });
894
- cdl.saveTimestamp({
895
- key: 'client.locus.join.request',
896
- value: 12,
726
+ value: 5,
897
727
  });
898
728
  cdl.saveTimestamp({
899
729
  key: 'client.locus.join.response',
900
- value: 20,
901
- });
902
- cdl.saveTimestamp({
903
- key: 'internal.host.meeting.participant.admitted',
904
- value: 24,
905
- });
906
- cdl.saveTimestamp({
907
- key: 'client.ice.start',
908
- value: 30,
909
- });
910
- cdl.saveTimestamp({
911
- key: 'client.ice.end',
912
730
  value: 40,
913
731
  });
914
- assert.deepEqual(cdl.getTotalMediaJMT(), 31);
732
+ cdl.saveLatency('internal.click.to.interstitial', 2147483648);
733
+ assert.deepEqual(cdl.getTotalJMT(), 2147483647);
915
734
  });
916
735
 
917
- it('calculates getTotalMediaJMT correctly with allowMediaInLobby true and it is greater than MAX_INTEGER', () => {
918
- cdl.saveTimestamp({
919
- key: 'internal.client.meeting.click.joinbutton',
920
- value: 5,
921
- options: {meetingId: 'meeting-id'},
922
- });
736
+ it('calculates getTotalJMTWithUserDelay correctly', () => {
737
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 10);
923
738
  cdl.saveTimestamp({
924
739
  key: 'internal.client.meeting.interstitial-window.showed',
925
- value: 100,
926
- });
927
- cdl.saveTimestamp({
928
- key: 'internal.client.interstitial-window.click.joinbutton',
929
- value: 1000,
930
- });
931
- cdl.saveTimestamp({
932
- key: 'client.locus.join.request',
933
- value: 2000,
740
+ value: 20,
934
741
  });
935
742
  cdl.saveTimestamp({
936
743
  key: 'client.locus.join.response',
937
- value: 2147483700,
938
- });
939
- cdl.saveTimestamp({
940
- key: 'internal.host.meeting.participant.admitted',
941
- value: 2147483800,
942
- });
943
- cdl.saveTimestamp({
944
- key: 'client.ice.start',
945
- value: 2147483900,
946
- });
947
- cdl.saveTimestamp({
948
- key: 'client.ice.end',
949
- value: 4294967400,
744
+ value: 40,
950
745
  });
951
- assert.deepEqual(cdl.getTotalMediaJMT(), 2147483647);
746
+ assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 30);
952
747
  });
953
748
 
954
- it('calculates getTotalMediaJMTWithUserDelay correctly', () => {
955
- cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 7);
956
- cdl.saveTimestamp({
957
- key: 'internal.client.interstitial-window.click.joinbutton',
958
- value: 10,
959
- });
960
- cdl.saveTimestamp({
961
- key: 'client.locus.join.request',
962
- value: 12,
963
- });
749
+ it('calculates getTotalJMTWithUserDelay correctly when clickToInterstitialWithUserDelay is 0', () => {
750
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 0);
964
751
  cdl.saveTimestamp({
965
- key: 'client.locus.join.response',
752
+ key: 'internal.client.meeting.interstitial-window.showed',
966
753
  value: 20,
967
754
  });
968
755
  cdl.saveTimestamp({
969
- key: 'internal.host.meeting.participant.admitted',
970
- value: 24,
756
+ key: 'client.locus.join.response',
757
+ value: 40,
971
758
  });
759
+ assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 20);
760
+ });
761
+
762
+ it('calculates getTotalJMTWithUserDelay correctly when interstitialShowedToJoinLocusResponse is 0', () => {
972
763
  cdl.saveTimestamp({
973
- key: 'client.ice.start',
974
- value: 30,
764
+ key: 'internal.client.meeting.interstitial-window.showed',
765
+ value: 40,
975
766
  });
767
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 12);
976
768
  cdl.saveTimestamp({
977
- key: 'client.ice.end',
769
+ key: 'client.locus.join.response',
978
770
  value: 40,
979
771
  });
980
- assert.deepEqual(cdl.getTotalMediaJMTWithUserDelay(), 35);
772
+ assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 12);
981
773
  });
982
774
 
983
- it('calculates getTotalMediaJMTWithUserDelay correctly for guest join', () => {
984
- cdl.saveTimestamp({
985
- key: 'internal.client.meeting.click.joinbutton',
986
- value: 5,
987
- });
775
+ it('calculates getTotalJMTWithUserDelay correctly when both clickToInterstitialWithUserDelay and interstitialShowedToJoinLocusResponse are 0', () => {
988
776
  cdl.saveTimestamp({
989
777
  key: 'internal.client.meeting.interstitial-window.showed',
990
- value: 8,
778
+ value: 40,
991
779
  });
780
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 0);
992
781
  cdl.saveTimestamp({
993
- key: 'internal.client.interstitial-window.click.joinbutton',
994
- value: 10,
782
+ key: 'client.locus.join.response',
783
+ value: 40,
995
784
  });
785
+ assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 0);
786
+ });
787
+
788
+ it('calculates getTotalJMTWithUserDelay correctly when both clickToInterstitialWithUserDelay is not a number', () => {
996
789
  cdl.saveTimestamp({
997
- key: 'client.locus.join.request',
998
- value: 12,
790
+ key: 'internal.client.meeting.interstitial-window.showed',
791
+ value: 40,
999
792
  });
793
+ cdl.saveLatency(
794
+ 'internal.click.to.interstitial.with.user.delay',
795
+ 'eleven' as unknown as number
796
+ );
1000
797
  cdl.saveTimestamp({
1001
798
  key: 'client.locus.join.response',
1002
- value: 20,
1003
- });
1004
- cdl.saveTimestamp({
1005
- key: 'internal.host.meeting.participant.admitted',
1006
- value: 24,
799
+ value: 40,
1007
800
  });
801
+ assert.deepEqual(cdl.getTotalJMTWithUserDelay(), undefined);
802
+ });
803
+
804
+ it('calculates getTotalJMTWithUserDelay correctly when it is greater than MAX_INTEGER', () => {
805
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 2147483648);
1008
806
  cdl.saveTimestamp({
1009
- key: 'client.ice.start',
1010
- value: 30,
807
+ key: 'internal.client.meeting.interstitial-window.showed',
808
+ value: 20,
1011
809
  });
1012
810
  cdl.saveTimestamp({
1013
- key: 'client.ice.end',
811
+ key: 'client.locus.join.response',
1014
812
  value: 40,
1015
813
  });
1016
- assert.deepEqual(cdl.getTotalMediaJMTWithUserDelay(), 31);
814
+ assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 2147483647);
815
+ });
816
+
817
+ it('calculates getTotalMediaJMT correctly with lobby exiting before media-engine.ready', () => {
818
+ cdl.saveLatency('internal.click.to.interstitial', 3);
819
+ // clickToInterstitial = 3
820
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 8});
821
+ cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
822
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
823
+ // interstitialShowedToMediaEngineReady = 50 - 8 = 42
824
+ // showInterstitialTime = 10 - 8 = 2
825
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 20});
826
+ cdl.saveTimestamp({key: 'client.lobby.exited', value: 30});
827
+ // stayLobbyTimeCappedByMediaEngineReady = min(30, 50) - 20 = 10
828
+ // total = 3 + 42 - 2 - 10 = 33
829
+ assert.deepEqual(cdl.getTotalMediaJMT(), 33);
830
+ });
831
+
832
+ it('calculates getTotalMediaJMT correctly without lobby', () => {
833
+ cdl.saveLatency('internal.click.to.interstitial', 3);
834
+ // clickToInterstitial = 3
835
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 8});
836
+ cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
837
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
838
+ // interstitialShowedToMediaEngineReady = 50 - 8 = 42
839
+ // showInterstitialTime = 10 - 8 = 2
840
+ // no client.lobby.entered → stayLobbyTimeCappedByMediaEngineReady = 0
841
+ // total = 3 + 42 - 2 - 0 = 43
842
+ assert.deepEqual(cdl.getTotalMediaJMT(), 43);
843
+ });
844
+
845
+ it('calculates getTotalMediaJMT correctly with lobby exiting after media-engine.ready', () => {
846
+ cdl.saveLatency('internal.click.to.interstitial', 3);
847
+ // clickToInterstitial = 3
848
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 8});
849
+ cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
850
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
851
+ // interstitialShowedToMediaEngineReady = 50 - 8 = 42
852
+ // showInterstitialTime = 10 - 8 = 2
853
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 20});
854
+ cdl.saveTimestamp({key: 'client.lobby.exited', value: 60});
855
+ // stayLobbyTimeCappedByMediaEngineReady = min(60, 50) - 20 = 30
856
+ // total = 3 + 42 - 2 - 30 = 13
857
+ assert.deepEqual(cdl.getTotalMediaJMT(), 13);
858
+ });
859
+
860
+ it('calculates getTotalMediaJMT correctly when it is greater than MAX_INTEGER', () => {
861
+ cdl.saveLatency('internal.click.to.interstitial', 5);
862
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 10});
863
+ cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
864
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 4294967400});
865
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 28});
866
+ cdl.saveTimestamp({key: 'client.lobby.exited', value: 30});
867
+ assert.deepEqual(cdl.getTotalMediaJMT(), 2147483647);
868
+ });
869
+
870
+ it('returns undefined for getTotalMediaJMT when media-engine.ready is missing', () => {
871
+ cdl.saveLatency('internal.click.to.interstitial', 3);
872
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 8});
873
+ cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
874
+ cdl.saveTimestamp({key: 'client.locus.join.response', value: 20});
875
+ assert.deepEqual(cdl.getTotalMediaJMT(), undefined);
876
+ });
877
+
878
+ it('calculates getTotalMediaJMT correctly when there is no lobby and stayLobbyTime defaults to 0', () => {
879
+ cdl.saveLatency('internal.click.to.interstitial', 3);
880
+ // clickToInterstitial = 3
881
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 8});
882
+ cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
883
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
884
+ // interstitialShowedToMediaEngineReady = 50 - 8 = 42
885
+ // showInterstitialTime = 10 - 8 = 2
886
+ // no client.lobby.entered → stayLobbyTimeCappedByMediaEngineReady = 0
887
+ // total = 3 + 42 - 2 - 0 = 43
888
+ assert.deepEqual(cdl.getTotalMediaJMT(), 43);
889
+ });
890
+
891
+ it('calculates getTotalMediaJMTWithUserDelay correctly', () => {
892
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 7);
893
+ // clickToInterstitialWithUserDelay = 7
894
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 10});
895
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
896
+ // interstitialShowedToMediaEngineReady = 50 - 10 = 40
897
+ // total = 7 + 40 = 47
898
+ assert.deepEqual(cdl.getTotalMediaJMTWithUserDelay(), 47);
899
+ });
900
+
901
+ it('calculates getTotalMediaJMTWithUserDelay correctly for guest join', () => {
902
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 3);
903
+ // clickToInterstitialWithUserDelay = 3
904
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 8});
905
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
906
+ // interstitialShowedToMediaEngineReady = 50 - 8 = 42
907
+ // total = 3 + 42 = 45
908
+ assert.deepEqual(cdl.getTotalMediaJMTWithUserDelay(), 45);
909
+ });
910
+
911
+ it('returns undefined for getTotalMediaJMTWithUserDelay when media-engine.ready is missing', () => {
912
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 7);
913
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 10});
914
+ assert.deepEqual(cdl.getTotalMediaJMTWithUserDelay(), undefined);
915
+ });
916
+
917
+ it('calculates getTotalMediaJMTWithUserDelay correctly when it is greater than MAX_INTEGER', () => {
918
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 2147483648);
919
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 10});
920
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
921
+ assert.deepEqual(cdl.getTotalMediaJMTWithUserDelay(), 2147483647);
1017
922
  });
1018
923
 
1019
924
  it('calculates getJoinConfJMT correctly', () => {
@@ -1041,24 +946,29 @@ describe('internal-plugin-metrics', () => {
1041
946
  // the maximum possible sum is 2400000, which is less than MAX_INTEGER (2147483647).
1042
947
  // This test should verify that the final clamping works by mocking the intermediate methods
1043
948
  // to return values that would sum to more than MAX_INTEGER.
1044
-
949
+
1045
950
  const originalGetJoinReqResp = cdl.getJoinReqResp;
1046
951
  const originalGetICESetupTime = cdl.getICESetupTime;
1047
-
952
+
1048
953
  // Mock the methods to return large values that would exceed MAX_INTEGER when summed
1049
954
  cdl.getJoinReqResp = () => 1500000000;
1050
955
  cdl.getICESetupTime = () => 1000000000;
1051
-
956
+
1052
957
  const result = cdl.getJoinConfJMT();
1053
-
958
+
1054
959
  // Restore original methods
1055
960
  cdl.getJoinReqResp = originalGetJoinReqResp;
1056
961
  cdl.getICESetupTime = originalGetICESetupTime;
1057
-
962
+
1058
963
  assert.deepEqual(result, 2147483647);
1059
964
  });
1060
965
 
1061
966
  it('calculates getClientJMT correctly', () => {
967
+ cdl.saveLatency('internal.click.to.interstitial.for.client.jmt', 5);
968
+ cdl.saveTimestamp({
969
+ key: 'internal.client.meeting.interstitial-window.showed',
970
+ value: 1,
971
+ });
1062
972
  cdl.saveTimestamp({
1063
973
  key: 'internal.client.interstitial-window.click.joinbutton',
1064
974
  value: 2,
@@ -1067,19 +977,30 @@ describe('internal-plugin-metrics', () => {
1067
977
  key: 'client.locus.join.request',
1068
978
  value: 6,
1069
979
  });
980
+ // showedToLocusJoinRequest = 6-1 = 5, showInterstitialTime = 2-1 = 1
981
+ // clickToInterstitialForClientJmt (5) + 5 - 1 = 9
982
+ assert.deepEqual(cdl.getClientJMT(), 9);
983
+ });
984
+
985
+ it('returns undefined for getClientJMT when clickToInterstitialForClientJmt is missing', () => {
1070
986
  cdl.saveTimestamp({
1071
- key: 'client.locus.join.response',
1072
- value: 8,
987
+ key: 'internal.client.meeting.interstitial-window.showed',
988
+ value: 1,
1073
989
  });
1074
990
  cdl.saveTimestamp({
1075
- key: 'client.ice.start',
1076
- value: 10,
991
+ key: 'internal.client.interstitial-window.click.joinbutton',
992
+ value: 2,
1077
993
  });
1078
994
  cdl.saveTimestamp({
1079
- key: 'client.ice.end',
1080
- value: 11,
995
+ key: 'client.locus.join.request',
996
+ value: 6,
1081
997
  });
1082
- assert.deepEqual(cdl.getClientJMT(), 3);
998
+ assert.deepEqual(cdl.getClientJMT(), undefined);
999
+ });
1000
+
1001
+ it('returns undefined for getClientJMT when interstitialJoinToLocusJoinRequest is missing', () => {
1002
+ cdl.saveLatency('internal.click.to.interstitial.for.client.jmt', 5);
1003
+ assert.deepEqual(cdl.getClientJMT(), undefined);
1083
1004
  });
1084
1005
 
1085
1006
  it('calculates getAudioJoinRespRxStart correctly', () => {
@@ -1131,37 +1052,48 @@ describe('internal-plugin-metrics', () => {
1131
1052
  });
1132
1053
 
1133
1054
  it('calculates getInterstitialToMediaOKJMT correctly', () => {
1055
+ cdl.saveTimestamp({
1056
+ key: 'internal.client.meeting.interstitial-window.showed',
1057
+ value: 2,
1058
+ });
1134
1059
  cdl.saveTimestamp({
1135
1060
  key: 'internal.client.interstitial-window.click.joinbutton',
1136
1061
  value: 4,
1137
1062
  });
1138
1063
  cdl.saveTimestamp({
1139
- key: 'client.locus.join.response',
1064
+ key: 'client.lobby.entered',
1140
1065
  value: 10,
1141
1066
  });
1142
1067
  cdl.saveTimestamp({
1143
- key: 'internal.host.meeting.participant.admitted',
1068
+ key: 'client.lobby.exited',
1144
1069
  value: 12,
1145
1070
  });
1146
1071
  cdl.saveTimestamp({
1147
1072
  key: 'client.ice.end',
1148
1073
  value: 14,
1149
1074
  });
1075
+ // showedToIceEnd = 14-2 = 12, showInterstitialTime = 4-2 = 2
1076
+ // stayLobbyTimeCappedByIceEnd = min(12,14)-10 = 2
1077
+ // result = 12 - 2 - 2 = 8
1150
1078
  assert.deepEqual(cdl.getInterstitialToMediaOKJMT(), 8);
1151
1079
  });
1152
1080
 
1153
1081
  it('calculates getInterstitialToMediaOKJMT correctly when it is greater than MAX_INTEGER', () => {
1082
+ cdl.saveTimestamp({
1083
+ key: 'internal.client.meeting.interstitial-window.showed',
1084
+ value: 4,
1085
+ });
1154
1086
  cdl.saveTimestamp({
1155
1087
  key: 'internal.client.interstitial-window.click.joinbutton',
1156
1088
  value: 4,
1157
1089
  });
1158
1090
  cdl.saveTimestamp({
1159
- key: 'client.locus.join.response',
1091
+ key: 'client.lobby.entered',
1160
1092
  value: 10,
1161
1093
  });
1162
1094
  cdl.saveTimestamp({
1163
- key: 'internal.host.meeting.participant.admitted',
1164
- value: 12,
1095
+ key: 'client.lobby.exited',
1096
+ value: 10,
1165
1097
  });
1166
1098
  cdl.saveTimestamp({
1167
1099
  key: 'client.ice.end',
@@ -1171,6 +1103,29 @@ describe('internal-plugin-metrics', () => {
1171
1103
  });
1172
1104
 
1173
1105
  it('calculates getInterstitialToMediaOKJMT correctly without lobby', () => {
1106
+ cdl.saveTimestamp({
1107
+ key: 'internal.client.meeting.interstitial-window.showed',
1108
+ value: 2,
1109
+ });
1110
+ cdl.saveTimestamp({
1111
+ key: 'internal.client.interstitial-window.click.joinbutton',
1112
+ value: 4,
1113
+ });
1114
+ cdl.saveTimestamp({
1115
+ key: 'client.ice.end',
1116
+ value: 14,
1117
+ });
1118
+ // showedToIceEnd = 14-2 = 12, showInterstitialTime = 4-2 = 2
1119
+ // stayLobbyTimeCappedByIceEnd = 0 (no lobby)
1120
+ // result = 12 - 2 - 0 = 10
1121
+ assert.deepEqual(cdl.getInterstitialToMediaOKJMT(), 10);
1122
+ });
1123
+
1124
+ it('calculates getInterstitialToMediaOKJMT correctly when there is no lobby and stayLobbyTime defaults to 0', () => {
1125
+ cdl.saveTimestamp({
1126
+ key: 'internal.client.meeting.interstitial-window.showed',
1127
+ value: 2,
1128
+ });
1174
1129
  cdl.saveTimestamp({
1175
1130
  key: 'internal.client.interstitial-window.click.joinbutton',
1176
1131
  value: 4,
@@ -1179,6 +1134,9 @@ describe('internal-plugin-metrics', () => {
1179
1134
  key: 'client.ice.end',
1180
1135
  value: 14,
1181
1136
  });
1137
+ // showedToIceEnd = 14-2 = 12, showInterstitialTime = 4-2 = 2
1138
+ // stayLobbyTimeCappedByIceEnd = 0 (no lobby)
1139
+ // result = 12 - 2 - 0 = 10
1182
1140
  assert.deepEqual(cdl.getInterstitialToMediaOKJMT(), 10);
1183
1141
  });
1184
1142