@webex/internal-plugin-metrics 3.12.0-mobius-socket.2 → 3.12.0-mobius-socket.4

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.
@@ -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,7 +511,7 @@ 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({
@@ -519,6 +521,50 @@ describe('internal-plugin-metrics', () => {
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,29 +649,39 @@ 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
668
  cdl.saveLatency('internal.click.to.interstitial', 0);
660
669
  cdl.saveTimestamp({
661
- key: 'internal.client.interstitial-window.click.joinbutton',
670
+ key: 'internal.client.meeting.interstitial-window.showed',
662
671
  value: 20,
663
672
  });
664
673
  cdl.saveTimestamp({
665
674
  key: 'client.locus.join.response',
666
675
  value: 40,
667
676
  });
677
+ // showedToJoinLocusResponse = 40-20 = 20, showInterstitialTime = 0
678
+ // total = 0 + 20 - 0 = 20
668
679
  assert.deepEqual(cdl.getTotalJMT(), 20);
669
680
  });
670
681
 
671
- it('calculates getTotalJMT correctly when interstitialToJoinOk is 0', () => {
682
+ it('calculates getTotalJMT correctly when interstitialClickJoinToJoinLocusResponse is 0', () => {
672
683
  cdl.saveTimestamp({
673
- key: 'internal.client.interstitial-window.click.joinbutton',
684
+ key: 'internal.client.meeting.interstitial-window.showed',
674
685
  value: 40,
675
686
  });
676
687
  cdl.saveLatency('internal.click.to.interstitial', 12);
@@ -678,12 +689,14 @@ describe('internal-plugin-metrics', () => {
678
689
  key: 'client.locus.join.response',
679
690
  value: 40,
680
691
  });
692
+ // showedToJoinLocusResponse = 0, showInterstitialTime = 0
693
+ // total = 12 + 0 - 0 = 12
681
694
  assert.deepEqual(cdl.getTotalJMT(), 12);
682
695
  });
683
696
 
684
- it('calculates getTotalJMT correctly when both clickToInterstitial and interstitialToJoinOk are 0', () => {
697
+ it('calculates getTotalJMT correctly when both clickToInterstitial and interstitialClickJoinToJoinLocusResponse are 0', () => {
685
698
  cdl.saveTimestamp({
686
- key: 'internal.client.interstitial-window.click.joinbutton',
699
+ key: 'internal.client.meeting.interstitial-window.showed',
687
700
  value: 40,
688
701
  });
689
702
  cdl.saveLatency('internal.click.to.interstitial', 0);
@@ -696,7 +709,7 @@ describe('internal-plugin-metrics', () => {
696
709
 
697
710
  it('calculates getTotalJMT correctly when both clickToInterstitial is not a number', () => {
698
711
  cdl.saveTimestamp({
699
- key: 'internal.client.interstitial-window.click.joinbutton',
712
+ key: 'internal.client.meeting.interstitial-window.showed',
700
713
  value: 40,
701
714
  });
702
715
  cdl.saveLatency('internal.click.to.interstitial', 'eleven' as unknown as number);
@@ -709,7 +722,7 @@ describe('internal-plugin-metrics', () => {
709
722
 
710
723
  it('calculates getTotalJMT correctly when it is greater than MAX_INTEGER', () => {
711
724
  cdl.saveTimestamp({
712
- key: 'internal.client.interstitial-window.click.joinbutton',
725
+ key: 'internal.client.meeting.interstitial-window.showed',
713
726
  value: 5,
714
727
  });
715
728
  cdl.saveTimestamp({
@@ -721,14 +734,7 @@ describe('internal-plugin-metrics', () => {
721
734
  });
722
735
 
723
736
  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
- });
737
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 10);
732
738
  cdl.saveTimestamp({
733
739
  key: 'internal.client.meeting.interstitial-window.showed',
734
740
  value: 20,
@@ -737,13 +743,13 @@ describe('internal-plugin-metrics', () => {
737
743
  key: 'client.locus.join.response',
738
744
  value: 40,
739
745
  });
740
- assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 45);
746
+ assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 30);
741
747
  });
742
748
 
743
749
  it('calculates getTotalJMTWithUserDelay correctly when clickToInterstitialWithUserDelay is 0', () => {
744
750
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 0);
745
751
  cdl.saveTimestamp({
746
- key: 'internal.client.interstitial-window.click.joinbutton',
752
+ key: 'internal.client.meeting.interstitial-window.showed',
747
753
  value: 20,
748
754
  });
749
755
  cdl.saveTimestamp({
@@ -753,9 +759,9 @@ describe('internal-plugin-metrics', () => {
753
759
  assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 20);
754
760
  });
755
761
 
756
- it('calculates getTotalJMTWithUserDelay correctly when interstitialToJoinOk is 0', () => {
762
+ it('calculates getTotalJMTWithUserDelay correctly when interstitialShowedToJoinLocusResponse is 0', () => {
757
763
  cdl.saveTimestamp({
758
- key: 'internal.client.interstitial-window.click.joinbutton',
764
+ key: 'internal.client.meeting.interstitial-window.showed',
759
765
  value: 40,
760
766
  });
761
767
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 12);
@@ -766,9 +772,9 @@ describe('internal-plugin-metrics', () => {
766
772
  assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 12);
767
773
  });
768
774
 
769
- it('calculates getTotalJMTWithUserDelay correctly when both clickToInterstitialWithUserDelay and interstitialToJoinOk are 0', () => {
775
+ it('calculates getTotalJMTWithUserDelay correctly when both clickToInterstitialWithUserDelay and interstitialShowedToJoinLocusResponse are 0', () => {
770
776
  cdl.saveTimestamp({
771
- key: 'internal.client.interstitial-window.click.joinbutton',
777
+ key: 'internal.client.meeting.interstitial-window.showed',
772
778
  value: 40,
773
779
  });
774
780
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 0);
@@ -781,7 +787,7 @@ describe('internal-plugin-metrics', () => {
781
787
 
782
788
  it('calculates getTotalJMTWithUserDelay correctly when both clickToInterstitialWithUserDelay is not a number', () => {
783
789
  cdl.saveTimestamp({
784
- key: 'internal.client.interstitial-window.click.joinbutton',
790
+ key: 'internal.client.meeting.interstitial-window.showed',
785
791
  value: 40,
786
792
  });
787
793
  cdl.saveLatency(
@@ -798,7 +804,7 @@ describe('internal-plugin-metrics', () => {
798
804
  it('calculates getTotalJMTWithUserDelay correctly when it is greater than MAX_INTEGER', () => {
799
805
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 2147483648);
800
806
  cdl.saveTimestamp({
801
- key: 'internal.client.interstitial-window.click.joinbutton',
807
+ key: 'internal.client.meeting.interstitial-window.showed',
802
808
  value: 20,
803
809
  });
804
810
  cdl.saveTimestamp({
@@ -808,215 +814,111 @@ describe('internal-plugin-metrics', () => {
808
814
  assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 2147483647);
809
815
  });
810
816
 
811
- it('calculates getTotalMediaJMT correctly', () => {
812
- cdl.saveTimestamp({
813
- key: 'internal.client.meeting.click.joinbutton',
814
- value: 5,
815
- });
816
- cdl.saveTimestamp({
817
- key: 'internal.client.meeting.interstitial-window.showed',
818
- value: 8,
819
- });
820
- cdl.saveTimestamp({
821
- key: 'internal.client.interstitial-window.click.joinbutton',
822
- value: 10,
823
- });
824
- cdl.saveTimestamp({
825
- key: 'client.locus.join.request',
826
- value: 12,
827
- });
828
- cdl.saveTimestamp({
829
- key: 'client.locus.join.response',
830
- value: 20,
831
- });
832
- cdl.saveTimestamp({
833
- key: 'client.lobby.exited',
834
- value: 24,
835
- });
836
- cdl.saveTimestamp({
837
- key: 'client.ice.start',
838
- value: 30,
839
- });
840
- cdl.saveTimestamp({
841
- key: 'client.ice.end',
842
- value: 40,
843
- });
844
- assert.deepEqual(cdl.getTotalMediaJMT(), 27);
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);
845
858
  });
846
859
 
847
860
  it('calculates getTotalMediaJMT correctly when it is greater than MAX_INTEGER', () => {
848
- cdl.saveTimestamp({
849
- key: 'internal.client.meeting.click.joinbutton',
850
- value: 5,
851
- });
852
- cdl.saveTimestamp({
853
- key: 'internal.client.meeting.interstitial-window.showed',
854
- value: 8,
855
- });
856
- cdl.saveTimestamp({
857
- key: 'internal.client.interstitial-window.click.joinbutton',
858
- value: 10,
859
- });
860
- cdl.saveTimestamp({
861
- key: 'client.locus.join.request',
862
- value: 12,
863
- });
864
- cdl.saveTimestamp({
865
- key: 'client.locus.join.response',
866
- value: 2147483700,
867
- });
868
- cdl.saveTimestamp({
869
- key: 'client.lobby.exited',
870
- value: 2147483800,
871
- });
872
- cdl.saveTimestamp({
873
- key: 'client.ice.start',
874
- value: 30,
875
- });
876
- cdl.saveTimestamp({
877
- key: 'client.ice.end',
878
- value: 100,
879
- });
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});
880
867
  assert.deepEqual(cdl.getTotalMediaJMT(), 2147483647);
881
868
  });
882
869
 
883
- it('calculates getTotalMediaJMT correctly with allowMediaInLobby true', () => {
884
- cdl.saveTimestamp({
885
- key: 'internal.client.meeting.click.joinbutton',
886
- value: 5,
887
- options: {meetingId: 'meeting-id'},
888
- });
889
- cdl.saveTimestamp({
890
- key: 'internal.client.meeting.interstitial-window.showed',
891
- value: 8,
892
- });
893
- cdl.saveTimestamp({
894
- key: 'internal.client.interstitial-window.click.joinbutton',
895
- value: 10,
896
- });
897
- cdl.saveTimestamp({
898
- key: 'client.locus.join.request',
899
- value: 12,
900
- });
901
- cdl.saveTimestamp({
902
- key: 'client.locus.join.response',
903
- value: 20,
904
- });
905
- cdl.saveTimestamp({
906
- key: 'client.lobby.exited',
907
- value: 24,
908
- });
909
- cdl.saveTimestamp({
910
- key: 'client.ice.start',
911
- value: 30,
912
- });
913
- cdl.saveTimestamp({
914
- key: 'client.ice.end',
915
- value: 40,
916
- });
917
- assert.deepEqual(cdl.getTotalMediaJMT(), 31);
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);
918
876
  });
919
877
 
920
- it('calculates getTotalMediaJMT correctly with allowMediaInLobby true and it is greater than MAX_INTEGER', () => {
921
- cdl.saveTimestamp({
922
- key: 'internal.client.meeting.click.joinbutton',
923
- value: 5,
924
- options: {meetingId: 'meeting-id'},
925
- });
926
- cdl.saveTimestamp({
927
- key: 'internal.client.meeting.interstitial-window.showed',
928
- value: 100,
929
- });
930
- cdl.saveTimestamp({
931
- key: 'internal.client.interstitial-window.click.joinbutton',
932
- value: 1000,
933
- });
934
- cdl.saveTimestamp({
935
- key: 'client.locus.join.request',
936
- value: 2000,
937
- });
938
- cdl.saveTimestamp({
939
- key: 'client.locus.join.response',
940
- value: 2147483700,
941
- });
942
- cdl.saveTimestamp({
943
- key: 'client.lobby.exited',
944
- value: 2147483800,
945
- });
946
- cdl.saveTimestamp({
947
- key: 'client.ice.start',
948
- value: 2147483900,
949
- });
950
- cdl.saveTimestamp({
951
- key: 'client.ice.end',
952
- value: 4294967400,
953
- });
954
- assert.deepEqual(cdl.getTotalMediaJMT(), 2147483647);
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);
955
889
  });
956
890
 
957
891
  it('calculates getTotalMediaJMTWithUserDelay correctly', () => {
958
892
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 7);
959
- cdl.saveTimestamp({
960
- key: 'internal.client.interstitial-window.click.joinbutton',
961
- value: 10,
962
- });
963
- cdl.saveTimestamp({
964
- key: 'client.locus.join.request',
965
- value: 12,
966
- });
967
- cdl.saveTimestamp({
968
- key: 'client.locus.join.response',
969
- value: 20,
970
- });
971
- cdl.saveTimestamp({
972
- key: 'internal.host.meeting.participant.admitted',
973
- value: 24,
974
- });
975
- cdl.saveTimestamp({
976
- key: 'client.ice.start',
977
- value: 30,
978
- });
979
- cdl.saveTimestamp({
980
- key: 'client.ice.end',
981
- value: 40,
982
- });
983
- assert.deepEqual(cdl.getTotalMediaJMTWithUserDelay(), 35);
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);
984
899
  });
985
900
 
986
901
  it('calculates getTotalMediaJMTWithUserDelay correctly for guest join', () => {
987
- cdl.saveTimestamp({
988
- key: 'internal.client.meeting.click.joinbutton',
989
- value: 5,
990
- });
991
- cdl.saveTimestamp({
992
- key: 'internal.client.meeting.interstitial-window.showed',
993
- value: 8,
994
- });
995
- cdl.saveTimestamp({
996
- key: 'internal.client.interstitial-window.click.joinbutton',
997
- value: 10,
998
- });
999
- cdl.saveTimestamp({
1000
- key: 'client.locus.join.request',
1001
- value: 12,
1002
- });
1003
- cdl.saveTimestamp({
1004
- key: 'client.locus.join.response',
1005
- value: 20,
1006
- });
1007
- cdl.saveTimestamp({
1008
- key: 'internal.host.meeting.participant.admitted',
1009
- value: 24,
1010
- });
1011
- cdl.saveTimestamp({
1012
- key: 'client.ice.start',
1013
- value: 30,
1014
- });
1015
- cdl.saveTimestamp({
1016
- key: 'client.ice.end',
1017
- value: 40,
1018
- });
1019
- assert.deepEqual(cdl.getTotalMediaJMTWithUserDelay(), 31);
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);
1020
922
  });
1021
923
 
1022
924
  it('calculates getJoinConfJMT correctly', () => {
@@ -1062,6 +964,11 @@ describe('internal-plugin-metrics', () => {
1062
964
  });
1063
965
 
1064
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
+ });
1065
972
  cdl.saveTimestamp({
1066
973
  key: 'internal.client.interstitial-window.click.joinbutton',
1067
974
  value: 2,
@@ -1070,19 +977,30 @@ describe('internal-plugin-metrics', () => {
1070
977
  key: 'client.locus.join.request',
1071
978
  value: 6,
1072
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', () => {
1073
986
  cdl.saveTimestamp({
1074
- key: 'client.locus.join.response',
1075
- value: 8,
987
+ key: 'internal.client.meeting.interstitial-window.showed',
988
+ value: 1,
1076
989
  });
1077
990
  cdl.saveTimestamp({
1078
- key: 'client.ice.start',
1079
- value: 10,
991
+ key: 'internal.client.interstitial-window.click.joinbutton',
992
+ value: 2,
1080
993
  });
1081
994
  cdl.saveTimestamp({
1082
- key: 'client.ice.end',
1083
- value: 11,
995
+ key: 'client.locus.join.request',
996
+ value: 6,
1084
997
  });
1085
- 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);
1086
1004
  });
1087
1005
 
1088
1006
  it('calculates getAudioJoinRespRxStart correctly', () => {
@@ -1134,12 +1052,16 @@ describe('internal-plugin-metrics', () => {
1134
1052
  });
1135
1053
 
1136
1054
  it('calculates getInterstitialToMediaOKJMT correctly', () => {
1055
+ cdl.saveTimestamp({
1056
+ key: 'internal.client.meeting.interstitial-window.showed',
1057
+ value: 2,
1058
+ });
1137
1059
  cdl.saveTimestamp({
1138
1060
  key: 'internal.client.interstitial-window.click.joinbutton',
1139
1061
  value: 4,
1140
1062
  });
1141
1063
  cdl.saveTimestamp({
1142
- key: 'client.locus.join.response',
1064
+ key: 'client.lobby.entered',
1143
1065
  value: 10,
1144
1066
  });
1145
1067
  cdl.saveTimestamp({
@@ -1150,21 +1072,28 @@ describe('internal-plugin-metrics', () => {
1150
1072
  key: 'client.ice.end',
1151
1073
  value: 14,
1152
1074
  });
1075
+ // showedToIceEnd = 14-2 = 12, showInterstitialTime = 4-2 = 2
1076
+ // stayLobbyTimeCappedByIceEnd = min(12,14)-10 = 2
1077
+ // result = 12 - 2 - 2 = 8
1153
1078
  assert.deepEqual(cdl.getInterstitialToMediaOKJMT(), 8);
1154
1079
  });
1155
1080
 
1156
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
+ });
1157
1086
  cdl.saveTimestamp({
1158
1087
  key: 'internal.client.interstitial-window.click.joinbutton',
1159
1088
  value: 4,
1160
1089
  });
1161
1090
  cdl.saveTimestamp({
1162
- key: 'client.locus.join.response',
1091
+ key: 'client.lobby.entered',
1163
1092
  value: 10,
1164
1093
  });
1165
1094
  cdl.saveTimestamp({
1166
1095
  key: 'client.lobby.exited',
1167
- value: 12,
1096
+ value: 10,
1168
1097
  });
1169
1098
  cdl.saveTimestamp({
1170
1099
  key: 'client.ice.end',
@@ -1174,6 +1103,29 @@ describe('internal-plugin-metrics', () => {
1174
1103
  });
1175
1104
 
1176
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
+ });
1177
1129
  cdl.saveTimestamp({
1178
1130
  key: 'internal.client.interstitial-window.click.joinbutton',
1179
1131
  value: 4,
@@ -1182,6 +1134,9 @@ describe('internal-plugin-metrics', () => {
1182
1134
  key: 'client.ice.end',
1183
1135
  value: 14,
1184
1136
  });
1137
+ // showedToIceEnd = 14-2 = 12, showInterstitialTime = 4-2 = 2
1138
+ // stayLobbyTimeCappedByIceEnd = 0 (no lobby)
1139
+ // result = 12 - 2 - 0 = 10
1185
1140
  assert.deepEqual(cdl.getInterstitialToMediaOKJMT(), 10);
1186
1141
  });
1187
1142