@webex/internal-plugin-metrics 3.11.0-webex-services-ready.1 → 3.12.0-mobius-socket.1

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 (35) hide show
  1. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +3 -2
  2. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
  3. package/dist/call-diagnostic/call-diagnostic-metrics.js +1 -0
  4. package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
  5. package/dist/call-diagnostic/call-diagnostic-metrics.util.js +4 -1
  6. package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
  7. package/dist/generic-metrics.js +8 -6
  8. package/dist/generic-metrics.js.map +1 -1
  9. package/dist/index.js +7 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/metrics.js +1 -1
  12. package/dist/metrics.types.js.map +1 -1
  13. package/dist/new-metrics.js +56 -20
  14. package/dist/new-metrics.js.map +1 -1
  15. package/dist/prelogin-metrics.js +106 -0
  16. package/dist/prelogin-metrics.js.map +1 -0
  17. package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +13 -2
  18. package/dist/types/index.d.ts +2 -1
  19. package/dist/types/metrics.types.d.ts +2 -2
  20. package/dist/types/new-metrics.d.ts +12 -0
  21. package/dist/types/prelogin-metrics.d.ts +47 -0
  22. package/package.json +11 -11
  23. package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +3 -5
  24. package/src/call-diagnostic/call-diagnostic-metrics.ts +1 -0
  25. package/src/call-diagnostic/call-diagnostic-metrics.util.ts +5 -1
  26. package/src/generic-metrics.ts +6 -6
  27. package/src/index.ts +2 -0
  28. package/src/metrics.types.ts +2 -2
  29. package/src/new-metrics.ts +42 -0
  30. package/src/prelogin-metrics.ts +94 -0
  31. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +33 -9
  32. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +120 -117
  33. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +35 -0
  34. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +10 -3
  35. package/test/unit/spec/prelogin-metrics.ts +132 -0
@@ -9,6 +9,8 @@ import CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';
9
9
  import BehavioralMetrics from './behavioral-metrics';
10
10
  import OperationalMetrics from './operational-metrics';
11
11
  import BusinessMetrics from './business-metrics';
12
+ import PreLoginMetrics from './prelogin-metrics';
13
+ import PreLoginMetricsBatcher from './prelogin-metrics-batcher';
12
14
  import {
13
15
  RecursivePartial,
14
16
  MetricEventProduct,
@@ -45,6 +47,7 @@ class Metrics extends WebexPlugin {
45
47
  behavioralMetrics: BehavioralMetrics;
46
48
  operationalMetrics: OperationalMetrics;
47
49
  businessMetrics: BusinessMetrics;
50
+ preLoginMetrics: PreLoginMetrics;
48
51
  isReady = false;
49
52
 
50
53
  /**
@@ -87,6 +90,13 @@ class Metrics extends WebexPlugin {
87
90
  this.webex.once('ready', () => {
88
91
  // @ts-ignore
89
92
  this.callDiagnosticMetrics = new CallDiagnosticMetrics({}, {parent: this.webex});
93
+ this.preLoginMetrics = new PreLoginMetrics(
94
+ // @ts-ignore
95
+ new PreLoginMetricsBatcher({}, {parent: this.webex}),
96
+ {},
97
+ // @ts-ignore
98
+ {parent: this.webex}
99
+ );
90
100
  this.isReady = true;
91
101
  this.setDelaySubmitClientEvents({
92
102
  shouldDelay: this.delaySubmitClientEvents,
@@ -251,6 +261,38 @@ class Metrics extends WebexPlugin {
251
261
  return this.businessMetrics.submitBusinessEvent({name, payload, table, metadata});
252
262
  }
253
263
 
264
+ /**
265
+ * Call Analyzer: Pre-Login Event
266
+ * @param args
267
+ */
268
+ submitPreLoginEvent({
269
+ name,
270
+ preLoginId,
271
+ payload,
272
+ metadata,
273
+ }: {
274
+ name: string;
275
+ preLoginId: string;
276
+ payload: EventPayload;
277
+ metadata?: EventPayload;
278
+ }): Promise<void> {
279
+ if (!this.isReady) {
280
+ // @ts-ignore
281
+ this.webex.logger.log(
282
+ `NewMetrics: @submitPreLoginEvent. Attempted to submit before webex.ready: ${name}`
283
+ );
284
+
285
+ return Promise.resolve();
286
+ }
287
+
288
+ return this.preLoginMetrics.submitPreLoginEvent({
289
+ name,
290
+ preLoginId,
291
+ payload,
292
+ metadata,
293
+ });
294
+ }
295
+
254
296
  /**
255
297
  * Call Analyzer: Media Quality Event
256
298
  * @param args
@@ -0,0 +1,94 @@
1
+ import GenericMetrics from './generic-metrics';
2
+ import {BusinessEvent, EventPayload} from './metrics.types';
3
+ import PreLoginMetricsBatcher from './prelogin-metrics-batcher';
4
+
5
+ /**
6
+ * @description Util class to handle PreLogin Metrics
7
+ * @export
8
+ * @class PreLoginMetrics
9
+ */
10
+ export default class PreLoginMetrics extends GenericMetrics {
11
+ private preLoginMetricsBatcher: typeof PreLoginMetricsBatcher;
12
+
13
+ /**
14
+ * Constructor
15
+ * @param {PreLoginMetricsBatcher} preLoginMetricsBatcher - Pre-login metrics batcher
16
+ * @param {any} attrs - Attributes
17
+ * @param {any} options - Options
18
+ * @constructor
19
+ */
20
+ constructor(
21
+ preLoginMetricsBatcher: typeof PreLoginMetricsBatcher,
22
+ attrs: any = {},
23
+ options: {parent?: any} = {}
24
+ ) {
25
+ super(attrs, options);
26
+ this.preLoginMetricsBatcher = preLoginMetricsBatcher;
27
+ }
28
+
29
+ /**
30
+ * Submit a business metric to our metrics endpoint.
31
+ * Routes to the correct table with the correct schema payload by table.
32
+ * @see https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
33
+ * @param {Object} options - The options object
34
+ * @param {string} options.name - Name of the metric
35
+ * @param {string} options.preLoginId - ID to identify pre-login user
36
+ * @param {EventPayload} options.payload - User payload of the metric
37
+ * @param {EventPayload} [options.metadata] - Optional metadata to include outside of eventPayload.value
38
+ * @returns {Promise<void>} Promise that resolves when the metric is submitted
39
+ */
40
+ public submitPreLoginEvent({
41
+ name,
42
+ preLoginId,
43
+ payload,
44
+ metadata,
45
+ }: {
46
+ name: string;
47
+ preLoginId: string;
48
+ payload: EventPayload;
49
+ metadata?: EventPayload;
50
+ }): Promise<void> {
51
+ if (!metadata) {
52
+ metadata = {};
53
+ }
54
+ if (!metadata.appType) {
55
+ metadata.appType = 'Web Client';
56
+ }
57
+
58
+ const finalEvent = this.buildEvent(name, preLoginId, payload, metadata);
59
+
60
+ this.preLoginMetricsBatcher.savePreLoginId(preLoginId);
61
+
62
+ return this.preLoginMetricsBatcher.request(finalEvent);
63
+ }
64
+
65
+ /**
66
+ * Builds a formatted event object for metrics submission.
67
+ * @param {string} metricName - Metric name
68
+ * @param {string} preLoginId - Pre-login user identifier
69
+ * @param {EventPayload} payload - Metric payload data
70
+ * @param {EventPayload} metadata - Additional metadata to include in the event
71
+ * @returns {object} Formatted metrics event object with type, eventPayload, and timestamp
72
+ */
73
+ private buildEvent(
74
+ metricName: string,
75
+ preLoginId: string,
76
+ payload: EventPayload,
77
+ metadata: EventPayload
78
+ ): BusinessEvent {
79
+ return {
80
+ type: ['business'],
81
+ eventPayload: {
82
+ metricName,
83
+ browserDetails: this.getBrowserDetails(),
84
+ context: this.getContext(),
85
+ timestamp: new Date().getTime(),
86
+ value: {
87
+ preLoginId,
88
+ ...metadata,
89
+ ...payload,
90
+ },
91
+ },
92
+ };
93
+ }
94
+ }
@@ -142,9 +142,7 @@ describe('plugin-metrics', () => {
142
142
  webex.internal.newMetrics.callDiagnosticLatencies.getDiffBetweenTimestamps = sinon
143
143
  .stub()
144
144
  .returns(10);
145
- webex.internal.newMetrics.callDiagnosticLatencies.getU2CTime = sinon
146
- .stub()
147
- .returns(20);
145
+ webex.internal.newMetrics.callDiagnosticLatencies.getU2CTime = sinon.stub().returns(20);
148
146
  webex.internal.newMetrics.callDiagnosticLatencies.getReachabilityClustersReqResp = sinon
149
147
  .stub()
150
148
  .returns(10);
@@ -165,7 +163,7 @@ describe('plugin-metrics', () => {
165
163
  registerWDMDeviceJMT: 10,
166
164
  showInterstitialTime: 10,
167
165
  getU2CTime: 20,
168
- getReachabilityClustersReqResp: 10
166
+ getReachabilityClustersReqResp: 10,
169
167
  },
170
168
  });
171
169
  assert.lengthOf(
@@ -189,9 +187,8 @@ describe('plugin-metrics', () => {
189
187
  webex.internal.newMetrics.callDiagnosticLatencies.getDownloadTimeJMT = sinon
190
188
  .stub()
191
189
  .returns(100);
192
- webex.internal.newMetrics.callDiagnosticLatencies.getClickToInterstitialWithUserDelay = sinon
193
- .stub()
194
- .returns(43);
190
+ webex.internal.newMetrics.callDiagnosticLatencies.getClickToInterstitialWithUserDelay =
191
+ sinon.stub().returns(43);
195
192
  webex.internal.newMetrics.callDiagnosticLatencies.getTotalJMTWithUserDelay = sinon
196
193
  .stub()
197
194
  .returns(64);
@@ -346,7 +343,7 @@ describe('plugin-metrics', () => {
346
343
  webex.internal.newMetrics.callDiagnosticLatencies.getInterstitialToJoinOK = sinon
347
344
  .stub()
348
345
  .returns(7);
349
- webex.internal.newMetrics.callDiagnosticLatencies.getStayLobbyTime = sinon
346
+ webex.internal.newMetrics.callDiagnosticLatencies.getStayLobbyTime = sinon
350
347
  .stub()
351
348
  .returns(1);
352
349
  webex.internal.newMetrics.callDiagnosticLatencies.getTotalMediaJMTWithUserDelay = sinon
@@ -372,7 +369,6 @@ describe('plugin-metrics', () => {
372
369
  totalMediaJMT: 61,
373
370
  interstitialToMediaOKJMT: 22,
374
371
  callInitMediaEngineReady: 10,
375
- stayLobbyTime: 1,
376
372
  totalMediaJMTWithUserDelay: 43,
377
373
  totalJMTWithUserDelay: 64,
378
374
  },
@@ -382,6 +378,34 @@ describe('plugin-metrics', () => {
382
378
  0
383
379
  );
384
380
  });
381
+
382
+ it('appends the correct join times to the request for client.lobby.exited', async () => {
383
+ webex.internal.newMetrics.callDiagnosticLatencies.getStayLobbyTime = sinon
384
+ .stub()
385
+ .returns(10);
386
+
387
+ const promise = webex.internal.newMetrics.callDiagnosticMetrics.submitToCallDiagnostics(
388
+ //@ts-ignore
389
+ {event: {name: 'client.lobby.exited'}}
390
+ );
391
+ await flushPromises();
392
+ clock.tick(config.metrics.batcherWait);
393
+
394
+ await promise;
395
+
396
+ //@ts-ignore
397
+ assert.calledOnce(webex.request);
398
+ assert.deepEqual(webex.request.getCalls()[0].args[0].body.metrics[0].eventPayload.event, {
399
+ name: 'client.lobby.exited',
400
+ joinTimes: {
401
+ stayLobbyTime: 10,
402
+ },
403
+ });
404
+ assert.lengthOf(
405
+ webex.internal.newMetrics.callDiagnosticMetrics.callDiagnosticEventsBatcher.queue,
406
+ 0
407
+ );
408
+ });
385
409
  });
386
410
 
387
411
  describe('when the request fails', () => {
@@ -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
  });
@@ -513,7 +513,7 @@ describe('internal-plugin-metrics', () => {
513
513
  value: 10,
514
514
  });
515
515
  cdl.saveTimestamp({
516
- key: 'internal.host.meeting.participant.admitted',
516
+ key: 'client.lobby.exited',
517
517
  value: 20,
518
518
  });
519
519
  assert.deepEqual(cdl.getStayLobbyTime(), 10);
@@ -656,56 +656,56 @@ describe('internal-plugin-metrics', () => {
656
656
  });
657
657
 
658
658
  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);
659
+ cdl.saveLatency('internal.click.to.interstitial', 0);
660
+ cdl.saveTimestamp({
661
+ key: 'internal.client.interstitial-window.click.joinbutton',
662
+ value: 20,
669
663
  });
664
+ cdl.saveTimestamp({
665
+ key: 'client.locus.join.response',
666
+ value: 40,
667
+ });
668
+ assert.deepEqual(cdl.getTotalJMT(), 20);
669
+ });
670
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);
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,
682
680
  });
681
+ assert.deepEqual(cdl.getTotalJMT(), 12);
682
+ });
683
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);
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,
695
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
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);
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,
708
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
709
 
710
710
  it('calculates getTotalJMT correctly when it is greater than MAX_INTEGER', () => {
711
711
  cdl.saveTimestamp({
@@ -740,70 +740,73 @@ describe('internal-plugin-metrics', () => {
740
740
  assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 45);
741
741
  });
742
742
 
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);
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,
754
752
  });
753
+ assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 20);
754
+ });
755
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);
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,
767
765
  });
766
+ assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 12);
767
+ });
768
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);
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,
780
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
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);
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(
788
+ 'internal.click.to.interstitial.with.user.delay',
789
+ 'eleven' as unknown as number
790
+ );
791
+ cdl.saveTimestamp({
792
+ key: 'client.locus.join.response',
793
+ value: 40,
793
794
  });
795
+ assert.deepEqual(cdl.getTotalJMTWithUserDelay(), undefined);
796
+ });
794
797
 
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);
798
+ it('calculates getTotalJMTWithUserDelay correctly when it is greater than MAX_INTEGER', () => {
799
+ cdl.saveLatency('internal.click.to.interstitial.with.user.delay', 2147483648);
800
+ cdl.saveTimestamp({
801
+ key: 'internal.client.interstitial-window.click.joinbutton',
802
+ value: 20,
806
803
  });
804
+ cdl.saveTimestamp({
805
+ key: 'client.locus.join.response',
806
+ value: 40,
807
+ });
808
+ assert.deepEqual(cdl.getTotalJMTWithUserDelay(), 2147483647);
809
+ });
807
810
 
808
811
  it('calculates getTotalMediaJMT correctly', () => {
809
812
  cdl.saveTimestamp({
@@ -827,7 +830,7 @@ describe('internal-plugin-metrics', () => {
827
830
  value: 20,
828
831
  });
829
832
  cdl.saveTimestamp({
830
- key: 'internal.host.meeting.participant.admitted',
833
+ key: 'client.lobby.exited',
831
834
  value: 24,
832
835
  });
833
836
  cdl.saveTimestamp({
@@ -863,7 +866,7 @@ describe('internal-plugin-metrics', () => {
863
866
  value: 2147483700,
864
867
  });
865
868
  cdl.saveTimestamp({
866
- key: 'internal.host.meeting.participant.admitted',
869
+ key: 'client.lobby.exited',
867
870
  value: 2147483800,
868
871
  });
869
872
  cdl.saveTimestamp({
@@ -900,7 +903,7 @@ describe('internal-plugin-metrics', () => {
900
903
  value: 20,
901
904
  });
902
905
  cdl.saveTimestamp({
903
- key: 'internal.host.meeting.participant.admitted',
906
+ key: 'client.lobby.exited',
904
907
  value: 24,
905
908
  });
906
909
  cdl.saveTimestamp({
@@ -937,7 +940,7 @@ describe('internal-plugin-metrics', () => {
937
940
  value: 2147483700,
938
941
  });
939
942
  cdl.saveTimestamp({
940
- key: 'internal.host.meeting.participant.admitted',
943
+ key: 'client.lobby.exited',
941
944
  value: 2147483800,
942
945
  });
943
946
  cdl.saveTimestamp({
@@ -1041,20 +1044,20 @@ describe('internal-plugin-metrics', () => {
1041
1044
  // the maximum possible sum is 2400000, which is less than MAX_INTEGER (2147483647).
1042
1045
  // This test should verify that the final clamping works by mocking the intermediate methods
1043
1046
  // to return values that would sum to more than MAX_INTEGER.
1044
-
1047
+
1045
1048
  const originalGetJoinReqResp = cdl.getJoinReqResp;
1046
1049
  const originalGetICESetupTime = cdl.getICESetupTime;
1047
-
1050
+
1048
1051
  // Mock the methods to return large values that would exceed MAX_INTEGER when summed
1049
1052
  cdl.getJoinReqResp = () => 1500000000;
1050
1053
  cdl.getICESetupTime = () => 1000000000;
1051
-
1054
+
1052
1055
  const result = cdl.getJoinConfJMT();
1053
-
1056
+
1054
1057
  // Restore original methods
1055
1058
  cdl.getJoinReqResp = originalGetJoinReqResp;
1056
1059
  cdl.getICESetupTime = originalGetICESetupTime;
1057
-
1060
+
1058
1061
  assert.deepEqual(result, 2147483647);
1059
1062
  });
1060
1063
 
@@ -1140,7 +1143,7 @@ describe('internal-plugin-metrics', () => {
1140
1143
  value: 10,
1141
1144
  });
1142
1145
  cdl.saveTimestamp({
1143
- key: 'internal.host.meeting.participant.admitted',
1146
+ key: 'client.lobby.exited',
1144
1147
  value: 12,
1145
1148
  });
1146
1149
  cdl.saveTimestamp({
@@ -1160,7 +1163,7 @@ describe('internal-plugin-metrics', () => {
1160
1163
  value: 10,
1161
1164
  });
1162
1165
  cdl.saveTimestamp({
1163
- key: 'internal.host.meeting.participant.admitted',
1166
+ key: 'client.lobby.exited',
1164
1167
  value: 12,
1165
1168
  });
1166
1169
  cdl.saveTimestamp({