@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.
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +3 -2
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.js +1 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js +4 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
- package/dist/generic-metrics.js +8 -6
- package/dist/generic-metrics.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/metrics.js +1 -1
- package/dist/metrics.types.js.map +1 -1
- package/dist/new-metrics.js +56 -20
- package/dist/new-metrics.js.map +1 -1
- package/dist/prelogin-metrics.js +106 -0
- package/dist/prelogin-metrics.js.map +1 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +13 -2
- package/dist/types/index.d.ts +2 -1
- package/dist/types/metrics.types.d.ts +2 -2
- package/dist/types/new-metrics.d.ts +12 -0
- package/dist/types/prelogin-metrics.d.ts +47 -0
- package/package.json +11 -11
- package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +3 -5
- package/src/call-diagnostic/call-diagnostic-metrics.ts +1 -0
- package/src/call-diagnostic/call-diagnostic-metrics.util.ts +5 -1
- package/src/generic-metrics.ts +6 -6
- package/src/index.ts +2 -0
- package/src/metrics.types.ts +2 -2
- package/src/new-metrics.ts +42 -0
- package/src/prelogin-metrics.ts +94 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +33 -9
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +120 -117
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +35 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +10 -3
- package/test/unit/spec/prelogin-metrics.ts +132 -0
package/src/new-metrics.ts
CHANGED
|
@@ -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 =
|
|
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
|
-
|
|
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: '
|
|
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
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
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
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
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
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
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
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
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
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
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
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
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
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
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
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
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
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
1166
|
+
key: 'client.lobby.exited',
|
|
1164
1167
|
value: 12,
|
|
1165
1168
|
});
|
|
1166
1169
|
cdl.saveTimestamp({
|