@webex/internal-plugin-metrics 3.12.0-next.1 → 3.12.0-next.11

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,7 +406,7 @@ 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
  });
@@ -509,7 +509,7 @@ describe('internal-plugin-metrics', () => {
509
509
 
510
510
  it('calculates getStayLobbyTime correctly', () => {
511
511
  cdl.saveTimestamp({
512
- key: 'client.locus.join.response',
512
+ key: 'client.lobby.entered',
513
513
  value: 10,
514
514
  });
515
515
  cdl.saveTimestamp({
@@ -519,6 +519,50 @@ describe('internal-plugin-metrics', () => {
519
519
  assert.deepEqual(cdl.getStayLobbyTime(), 10);
520
520
  });
521
521
 
522
+ describe('getStayLobbyTimeCappedBy', () => {
523
+ it('returns 0 when lobbyStartTimestamp is missing', () => {
524
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 100});
525
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), 0);
526
+ });
527
+
528
+ it('returns undefined when endTimestampKey is missing', () => {
529
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 10});
530
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), undefined);
531
+ });
532
+
533
+ it('uses maximumEndTimestamp when lobby end does not exist', () => {
534
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 10});
535
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
536
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), 40);
537
+ });
538
+
539
+ it('uses lobby end when it is before maximumEndTimestamp', () => {
540
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 10});
541
+ cdl.saveTimestamp({key: 'client.lobby.exited', value: 30});
542
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
543
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), 20);
544
+ });
545
+
546
+ it('uses maximumEndTimestamp when lobby end is after it', () => {
547
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 10});
548
+ cdl.saveTimestamp({key: 'client.lobby.exited', value: 60});
549
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
550
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), 40);
551
+ });
552
+
553
+ it('clamps to 0 when result would be negative', () => {
554
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 100});
555
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
556
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), 0);
557
+ });
558
+
559
+ it('clamps to MAX_INTEGER when result is very large', () => {
560
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 0});
561
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 2147483648});
562
+ assert.deepEqual(cdl.getStayLobbyTimeCappedBy('client.media-engine.ready'), 2147483647);
563
+ });
564
+ });
565
+
522
566
  it('calculates getPageJMT correctly', () => {
523
567
  cdl.saveLatency('internal.client.pageJMT', 10);
524
568
  assert.deepEqual(cdl.getPageJMT(), 10);
@@ -530,71 +574,31 @@ describe('internal-plugin-metrics', () => {
530
574
  });
531
575
 
532
576
  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
577
  cdl.saveLatency('internal.click.to.interstitial', 5);
546
- cdl.saveTimestamp({
547
- key: 'internal.client.meeting.interstitial-window.showed',
548
- value: 20,
549
- });
550
578
  assert.deepEqual(cdl.getClickToInterstitial(), 5);
551
579
  });
552
580
 
553
- it('calculates getClickToInterstitial without join button timestamp when it is 0', () => {
581
+ it('calculates getClickToInterstitial correctly when it is 0', () => {
554
582
  cdl.saveLatency('internal.click.to.interstitial', 0);
555
- cdl.saveTimestamp({
556
- key: 'internal.client.meeting.interstitial-window.showed',
557
- value: 20,
558
- });
559
583
  assert.deepEqual(cdl.getClickToInterstitial(), 0);
560
584
  });
561
585
 
562
- it('calculates getClickToInterstitial without join button timestamp when it is greater than MAX_INTEGER', () => {
586
+ it('calculates getClickToInterstitial correctly when it is greater than MAX_INTEGER', () => {
563
587
  cdl.saveLatency('internal.click.to.interstitial', 2147483648);
564
588
  assert.deepEqual(cdl.getClickToInterstitial(), 2147483647);
565
589
  });
566
590
 
567
591
  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
592
  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
593
  assert.deepEqual(cdl.getClickToInterstitialWithUserDelay(), 5);
586
594
  });
587
595
 
588
- it('calculates getClickToInterstitialWithUserDelay without join button timestamp when it is 0', () => {
596
+ it('calculates getClickToInterstitialWithUserDelay correctly when it is 0', () => {
589
597
  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
598
  assert.deepEqual(cdl.getClickToInterstitialWithUserDelay(), 0);
595
599
  });
596
600
 
597
- it('calculates getClickToInterstitialWithUserDelay without join button timestamp when it is greater than MAX_INTEGER', () => {
601
+ it('calculates getClickToInterstitialWithUserDelay correctly when it is greater than MAX_INTEGER', () => {
598
602
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 2147483648);
599
603
  assert.deepEqual(cdl.getClickToInterstitialWithUserDelay(), 2147483647);
600
604
  });
@@ -624,30 +628,16 @@ describe('internal-plugin-metrics', () => {
624
628
  });
625
629
 
626
630
  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);
631
+ sinon.stub(cdl, 'getInterstitialToMediaOKJMT').returns(42);
632
+ assert.deepEqual(cdl.getCallInitMediaEngineReady(), 42);
636
633
  });
637
634
 
638
635
  it('calculates getTotalJMT correctly', () => {
636
+ cdl.saveLatency('internal.click.to.interstitial', 10);
639
637
  cdl.saveTimestamp({
640
638
  key: 'internal.client.interstitial-window.click.joinbutton',
641
639
  value: 5,
642
640
  });
643
- cdl.saveTimestamp({
644
- key: 'internal.client.meeting.click.joinbutton',
645
- value: 10,
646
- });
647
- cdl.saveTimestamp({
648
- key: 'internal.client.meeting.interstitial-window.showed',
649
- value: 20,
650
- });
651
641
  cdl.saveTimestamp({
652
642
  key: 'client.locus.join.response',
653
643
  value: 40,
@@ -668,7 +658,7 @@ describe('internal-plugin-metrics', () => {
668
658
  assert.deepEqual(cdl.getTotalJMT(), 20);
669
659
  });
670
660
 
671
- it('calculates getTotalJMT correctly when interstitialToJoinOk is 0', () => {
661
+ it('calculates getTotalJMT correctly when interstitialClickJoinToJoinLocusResponse is 0', () => {
672
662
  cdl.saveTimestamp({
673
663
  key: 'internal.client.interstitial-window.click.joinbutton',
674
664
  value: 40,
@@ -681,7 +671,7 @@ describe('internal-plugin-metrics', () => {
681
671
  assert.deepEqual(cdl.getTotalJMT(), 12);
682
672
  });
683
673
 
684
- it('calculates getTotalJMT correctly when both clickToInterstitial and interstitialToJoinOk are 0', () => {
674
+ it('calculates getTotalJMT correctly when both clickToInterstitial and interstitialClickJoinToJoinLocusResponse are 0', () => {
685
675
  cdl.saveTimestamp({
686
676
  key: 'internal.client.interstitial-window.click.joinbutton',
687
677
  value: 40,
@@ -721,14 +711,7 @@ describe('internal-plugin-metrics', () => {
721
711
  });
722
712
 
723
713
  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
- });
714
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 10);
732
715
  cdl.saveTimestamp({
733
716
  key: 'internal.client.meeting.interstitial-window.showed',
734
717
  value: 20,
@@ -737,13 +720,13 @@ describe('internal-plugin-metrics', () => {
737
720
  key: 'client.locus.join.response',
738
721
  value: 40,
739
722
  });
740
- assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 45);
723
+ assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 30);
741
724
  });
742
725
 
743
726
  it('calculates getTotalJMTWithUserDelay correctly when clickToInterstitialWithUserDelay is 0', () => {
744
727
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 0);
745
728
  cdl.saveTimestamp({
746
- key: 'internal.client.interstitial-window.click.joinbutton',
729
+ key: 'internal.client.meeting.interstitial-window.showed',
747
730
  value: 20,
748
731
  });
749
732
  cdl.saveTimestamp({
@@ -753,9 +736,9 @@ describe('internal-plugin-metrics', () => {
753
736
  assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 20);
754
737
  });
755
738
 
756
- it('calculates getTotalJMTWithUserDelay correctly when interstitialToJoinOk is 0', () => {
739
+ it('calculates getTotalJMTWithUserDelay correctly when interstitialShowedToJoinLocusResponse is 0', () => {
757
740
  cdl.saveTimestamp({
758
- key: 'internal.client.interstitial-window.click.joinbutton',
741
+ key: 'internal.client.meeting.interstitial-window.showed',
759
742
  value: 40,
760
743
  });
761
744
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 12);
@@ -766,9 +749,9 @@ describe('internal-plugin-metrics', () => {
766
749
  assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 12);
767
750
  });
768
751
 
769
- it('calculates getTotalJMTWithUserDelay correctly when both clickToInterstitialWithUserDelay and interstitialToJoinOk are 0', () => {
752
+ it('calculates getTotalJMTWithUserDelay correctly when both clickToInterstitialWithUserDelay and interstitialShowedToJoinLocusResponse are 0', () => {
770
753
  cdl.saveTimestamp({
771
- key: 'internal.client.interstitial-window.click.joinbutton',
754
+ key: 'internal.client.meeting.interstitial-window.showed',
772
755
  value: 40,
773
756
  });
774
757
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 0);
@@ -781,7 +764,7 @@ describe('internal-plugin-metrics', () => {
781
764
 
782
765
  it('calculates getTotalJMTWithUserDelay correctly when both clickToInterstitialWithUserDelay is not a number', () => {
783
766
  cdl.saveTimestamp({
784
- key: 'internal.client.interstitial-window.click.joinbutton',
767
+ key: 'internal.client.meeting.interstitial-window.showed',
785
768
  value: 40,
786
769
  });
787
770
  cdl.saveLatency(
@@ -798,7 +781,7 @@ describe('internal-plugin-metrics', () => {
798
781
  it('calculates getTotalJMTWithUserDelay correctly when it is greater than MAX_INTEGER', () => {
799
782
  cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 2147483648);
800
783
  cdl.saveTimestamp({
801
- key: 'internal.client.interstitial-window.click.joinbutton',
784
+ key: 'internal.client.meeting.interstitial-window.showed',
802
785
  value: 20,
803
786
  });
804
787
  cdl.saveTimestamp({
@@ -808,215 +791,101 @@ describe('internal-plugin-metrics', () => {
808
791
  assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 2147483647);
809
792
  });
810
793
 
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);
794
+ it('calculates getTotalMediaJMT correctly with lobby exiting before media-engine.ready', () => {
795
+ cdl.saveLatency('internal.click.to.interstitial', 3);
796
+ // clickToInterstitial = 3
797
+ cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
798
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
799
+ // interstitialClickJoinToMediaEngineReady = 50 - 10 = 40
800
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 20});
801
+ cdl.saveTimestamp({key: 'client.lobby.exited', value: 30});
802
+ // stayLobbyTimeCappedByMediaEngineReady = min(30, 50) - 20 = 10
803
+ // total = 3 + 40 - 10 = 33
804
+ assert.deepEqual(cdl.getTotalMediaJMT(), 33);
805
+ });
806
+
807
+ it('calculates getTotalMediaJMT correctly without lobby', () => {
808
+ cdl.saveLatency('internal.click.to.interstitial', 3);
809
+ // clickToInterstitial = 3
810
+ cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
811
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
812
+ // interstitialClickJoinToMediaEngineReady = 40
813
+ // no client.lobby.entered → stayLobbyTimeCappedByMediaEngineReady = 0
814
+ // total = 3 + 40 - 0 = 43
815
+ assert.deepEqual(cdl.getTotalMediaJMT(), 43);
816
+ });
817
+
818
+ it('calculates getTotalMediaJMT correctly with lobby exiting after media-engine.ready', () => {
819
+ cdl.saveLatency('internal.click.to.interstitial', 3);
820
+ // clickToInterstitial = 3
821
+ cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
822
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
823
+ // interstitialClickJoinToMediaEngineReady = 40
824
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 20});
825
+ cdl.saveTimestamp({key: 'client.lobby.exited', value: 60});
826
+ // stayLobbyTimeCappedByMediaEngineReady = min(60, 50) - 20 = 30
827
+ // total = 3 + 40 - 30 = 13
828
+ assert.deepEqual(cdl.getTotalMediaJMT(), 13);
845
829
  });
846
830
 
847
831
  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
- });
832
+ cdl.saveLatency('internal.click.to.interstitial', 3);
833
+ cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
834
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 4294967400});
835
+ cdl.saveTimestamp({key: 'client.lobby.entered', value: 28});
836
+ cdl.saveTimestamp({key: 'client.lobby.exited', value: 30});
880
837
  assert.deepEqual(cdl.getTotalMediaJMT(), 2147483647);
881
838
  });
882
839
 
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);
840
+ it('returns undefined for getTotalMediaJMT when media-engine.ready is missing', () => {
841
+ cdl.saveLatency('internal.click.to.interstitial', 3);
842
+ cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
843
+ cdl.saveTimestamp({key: 'client.locus.join.response', value: 20});
844
+ assert.deepEqual(cdl.getTotalMediaJMT(), undefined);
918
845
  });
919
846
 
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);
847
+ it('calculates getTotalMediaJMT correctly when there is no lobby and stayLobbyTime defaults to 0', () => {
848
+ cdl.saveLatency('internal.click.to.interstitial', 3);
849
+ // clickToInterstitial = 3
850
+ cdl.saveTimestamp({key: 'internal.client.interstitial-window.click.joinbutton', value: 10});
851
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
852
+ // interstitialClickJoinToMediaEngineReady = 50 - 10 = 40
853
+ // no client.lobby.entered → stayLobbyTimeCappedByMediaEngineReady = 0
854
+ // total = 3 + 40 - 0 = 43
855
+ assert.deepEqual(cdl.getTotalMediaJMT(), 43);
955
856
  });
956
857
 
957
858
  it('calculates getTotalMediaJMTWithUserDelay correctly', () => {
958
859
  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);
860
+ // clickToInterstitialWithUserDelay = 7
861
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 10});
862
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
863
+ // interstitialShowedToMediaEngineReady = 50 - 10 = 40
864
+ // total = 7 + 40 = 47
865
+ assert.deepEqual(cdl.getTotalMediaJMTWithUserDelay(), 47);
984
866
  });
985
867
 
986
868
  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);
869
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 3);
870
+ // clickToInterstitialWithUserDelay = 3
871
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 8});
872
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
873
+ // interstitialShowedToMediaEngineReady = 50 - 8 = 42
874
+ // total = 3 + 42 = 45
875
+ assert.deepEqual(cdl.getTotalMediaJMTWithUserDelay(), 45);
876
+ });
877
+
878
+ it('returns undefined for getTotalMediaJMTWithUserDelay when media-engine.ready is missing', () => {
879
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 7);
880
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 10});
881
+ assert.deepEqual(cdl.getTotalMediaJMTWithUserDelay(), undefined);
882
+ });
883
+
884
+ it('calculates getTotalMediaJMTWithUserDelay correctly when it is greater than MAX_INTEGER', () => {
885
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 2147483648);
886
+ cdl.saveTimestamp({key: 'internal.client.meeting.interstitial-window.showed', value: 10});
887
+ cdl.saveTimestamp({key: 'client.media-engine.ready', value: 50});
888
+ assert.deepEqual(cdl.getTotalMediaJMTWithUserDelay(), 2147483647);
1020
889
  });
1021
890
 
1022
891
  it('calculates getJoinConfJMT correctly', () => {
@@ -1062,6 +931,7 @@ describe('internal-plugin-metrics', () => {
1062
931
  });
1063
932
 
1064
933
  it('calculates getClientJMT correctly', () => {
934
+ cdl.saveLatency('internal.click.to.interstitial.for.client.jmt', 5);
1065
935
  cdl.saveTimestamp({
1066
936
  key: 'internal.client.interstitial-window.click.joinbutton',
1067
937
  value: 2,
@@ -1070,19 +940,25 @@ describe('internal-plugin-metrics', () => {
1070
940
  key: 'client.locus.join.request',
1071
941
  value: 6,
1072
942
  });
943
+ // clickToInterstitialForClientJmt (5) + interstitialJoinToLocusJoinRequest (6 - 2 = 4) = 9
944
+ assert.deepEqual(cdl.getClientJMT(), 9);
945
+ });
946
+
947
+ it('returns undefined for getClientJMT when clickToInterstitialForClientJmt is missing', () => {
1073
948
  cdl.saveTimestamp({
1074
- key: 'client.locus.join.response',
1075
- value: 8,
1076
- });
1077
- cdl.saveTimestamp({
1078
- key: 'client.ice.start',
1079
- value: 10,
949
+ key: 'internal.client.interstitial-window.click.joinbutton',
950
+ value: 2,
1080
951
  });
1081
952
  cdl.saveTimestamp({
1082
- key: 'client.ice.end',
1083
- value: 11,
953
+ key: 'client.locus.join.request',
954
+ value: 6,
1084
955
  });
1085
- assert.deepEqual(cdl.getClientJMT(), 3);
956
+ assert.deepEqual(cdl.getClientJMT(), undefined);
957
+ });
958
+
959
+ it('returns undefined for getClientJMT when interstitialJoinToLocusJoinRequest is missing', () => {
960
+ cdl.saveLatency('internal.click.to.interstitial.for.client.jmt', 5);
961
+ assert.deepEqual(cdl.getClientJMT(), undefined);
1086
962
  });
1087
963
 
1088
964
  it('calculates getAudioJoinRespRxStart correctly', () => {
@@ -1139,7 +1015,7 @@ describe('internal-plugin-metrics', () => {
1139
1015
  value: 4,
1140
1016
  });
1141
1017
  cdl.saveTimestamp({
1142
- key: 'client.locus.join.response',
1018
+ key: 'client.lobby.entered',
1143
1019
  value: 10,
1144
1020
  });
1145
1021
  cdl.saveTimestamp({
@@ -1159,12 +1035,12 @@ describe('internal-plugin-metrics', () => {
1159
1035
  value: 4,
1160
1036
  });
1161
1037
  cdl.saveTimestamp({
1162
- key: 'client.locus.join.response',
1038
+ key: 'client.lobby.entered',
1163
1039
  value: 10,
1164
1040
  });
1165
1041
  cdl.saveTimestamp({
1166
1042
  key: 'client.lobby.exited',
1167
- value: 12,
1043
+ value: 10,
1168
1044
  });
1169
1045
  cdl.saveTimestamp({
1170
1046
  key: 'client.ice.end',
@@ -1182,6 +1058,22 @@ describe('internal-plugin-metrics', () => {
1182
1058
  key: 'client.ice.end',
1183
1059
  value: 14,
1184
1060
  });
1061
+ // no client.lobby.entered → stayLobbyTimeCappedByIceEnd = 0
1062
+ // result = (14 - 4) - 0 = 10
1063
+ assert.deepEqual(cdl.getInterstitialToMediaOKJMT(), 10);
1064
+ });
1065
+
1066
+ it('calculates getInterstitialToMediaOKJMT correctly when there is no lobby and stayLobbyTime defaults to 0', () => {
1067
+ cdl.saveTimestamp({
1068
+ key: 'internal.client.interstitial-window.click.joinbutton',
1069
+ value: 4,
1070
+ });
1071
+ cdl.saveTimestamp({
1072
+ key: 'client.ice.end',
1073
+ value: 14,
1074
+ });
1075
+ // no client.lobby.entered → stayLobbyTimeCappedByIceEnd = 0
1076
+ // result = (14 - 4) - 0 = 10
1185
1077
  assert.deepEqual(cdl.getInterstitialToMediaOKJMT(), 10);
1186
1078
  });
1187
1079
 
@@ -3680,6 +3680,15 @@ describe('internal-plugin-metrics', () => {
3680
3680
  assert.deepEqual(cd.getSubServiceType(fakeMeeting), 'Webcast');
3681
3681
  });
3682
3682
 
3683
+ it('returns subServicetype as LargeScaleWebinar when meeting is converged Webinar and enable large scale', () => {
3684
+ fakeMeeting.meetingInfo = {
3685
+ enableEvent: true,
3686
+ enableConvergedArchitecture: true,
3687
+ enableConvergedWebinarLargeScale: true,
3688
+ };
3689
+ assert.deepEqual(cd.getSubServiceType(fakeMeeting), 'LargeScaleWebinar');
3690
+ });
3691
+
3683
3692
  it('returns subServicetype as undefined when correct parameters are not found', () => {
3684
3693
  fakeMeeting.meetingInfo = {};
3685
3694
  assert.deepEqual(cd.getSubServiceType(fakeMeeting), undefined);