@webex/internal-plugin-metrics 3.0.0-beta.17 → 3.0.0-beta.171
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-batcher.js +132 -0
- package/dist/call-diagnostic/call-diagnostic-metrics-batcher.js.map +1 -0
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +339 -0
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.js +511 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js +106 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -0
- package/dist/call-diagnostic/config.js +461 -0
- package/dist/call-diagnostic/config.js.map +1 -0
- package/dist/call-diagnostic/generated-types-temp/ClientEvent.js +7 -0
- package/dist/call-diagnostic/generated-types-temp/ClientEvent.js.map +1 -0
- package/dist/call-diagnostic/generated-types-temp/Event.js +7 -0
- package/dist/call-diagnostic/generated-types-temp/Event.js.map +1 -0
- package/dist/call-diagnostic/generated-types-temp/MediaQualityEvent.js +7 -0
- package/dist/call-diagnostic/generated-types-temp/MediaQualityEvent.js.map +1 -0
- package/dist/config.js +20 -1
- package/dist/config.js.map +1 -1
- package/dist/index.js +25 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics.js +30 -30
- package/dist/metrics.js.map +1 -1
- package/dist/metrics.types.js +7 -0
- package/dist/metrics.types.js.map +1 -0
- package/dist/new-metrics.js +171 -0
- package/dist/new-metrics.js.map +1 -0
- package/dist/types/batcher.d.ts +2 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics-batcher.d.ts +2 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +154 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +324 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics.util.d.ts +31 -0
- package/dist/types/call-diagnostic/config.d.ts +57 -0
- package/dist/types/call-diagnostic/generated-types-temp/ClientEvent.d.ts +1112 -0
- package/dist/types/call-diagnostic/generated-types-temp/Event.d.ts +4851 -0
- package/dist/types/call-diagnostic/generated-types-temp/MediaQualityEvent.d.ts +2121 -0
- package/dist/types/client-metrics-batcher.d.ts +2 -0
- package/dist/types/config.d.ts +35 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/metrics.d.ts +3 -0
- package/dist/types/metrics.types.d.ts +87 -0
- package/dist/types/new-metrics.d.ts +83 -0
- package/package.json +12 -8
- package/src/call-diagnostic/call-diagnostic-metrics-batcher.ts +146 -0
- package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +308 -0
- package/src/call-diagnostic/call-diagnostic-metrics.ts +528 -0
- package/src/call-diagnostic/call-diagnostic-metrics.util.ts +102 -0
- package/src/call-diagnostic/config.ts +455 -0
- package/src/call-diagnostic/generated-types-temp/ClientEvent.ts +2357 -0
- package/src/call-diagnostic/generated-types-temp/Event.ts +7669 -0
- package/src/call-diagnostic/generated-types-temp/MediaQualityEvent.ts +2321 -0
- package/src/config.js +19 -0
- package/src/index.ts +39 -0
- package/src/metrics.js +25 -27
- package/src/metrics.types.ts +132 -0
- package/src/new-metrics.ts +167 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +235 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +199 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +722 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +76 -0
- package/test/unit/spec/metrics.js +65 -97
- package/test/unit/spec/new-metrics.ts +88 -0
- package/tsconfig.json +6 -0
- package/dist/call-diagnostic-events-batcher.js +0 -60
- package/dist/call-diagnostic-events-batcher.js.map +0 -1
- package/src/call-diagnostic-events-batcher.js +0 -62
- package/src/index.js +0 -17
- package/test/unit/spec/call-diagnostic-events-batcher.js +0 -195
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {assert} from '@webex/test-helper-chai';
|
|
6
|
+
import {config} from '@webex/internal-plugin-metrics';
|
|
7
|
+
import MockWebex from '@webex/test-helper-mock-webex';
|
|
8
|
+
import sinon from 'sinon';
|
|
9
|
+
import {NewMetrics} from '@webex/internal-plugin-metrics';
|
|
10
|
+
const flushPromises = () => new Promise(setImmediate);
|
|
11
|
+
|
|
12
|
+
describe('plugin-metrics', () => {
|
|
13
|
+
describe('CallDiagnosticEventsBatcher', () => {
|
|
14
|
+
let webex;
|
|
15
|
+
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
//@ts-ignore
|
|
18
|
+
webex = new MockWebex({
|
|
19
|
+
children: {
|
|
20
|
+
newMetrics: NewMetrics
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
webex.request = (options) => Promise.resolve({body: {items: []}, options});
|
|
25
|
+
sinon.spy(webex, 'request');
|
|
26
|
+
|
|
27
|
+
webex.emit("ready");
|
|
28
|
+
|
|
29
|
+
webex.config.metrics = config.metrics;
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
afterEach(() => {
|
|
33
|
+
sinon.restore();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
describe('#request()', () => {
|
|
37
|
+
describe('when the request completes successfully', async () => {
|
|
38
|
+
it('clears the queue', async () => {
|
|
39
|
+
await webex.internal.newMetrics.callDiagnosticMetrics.submitToCallDiagnostics(
|
|
40
|
+
//@ts-ignore
|
|
41
|
+
{event: {name: 'client.interstitial-window.launched'}}
|
|
42
|
+
);
|
|
43
|
+
await flushPromises();
|
|
44
|
+
|
|
45
|
+
//@ts-ignore
|
|
46
|
+
assert.calledOnce(webex.request);
|
|
47
|
+
assert.lengthOf(webex.internal.newMetrics.callDiagnosticMetrics.callDiagnosticEventsBatcher.queue, 0);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('doesnt include any joinTimes for other events', async () => {
|
|
51
|
+
await webex.internal.newMetrics.callDiagnosticMetrics.submitToCallDiagnostics(
|
|
52
|
+
//@ts-ignore
|
|
53
|
+
{event: {name: 'client.alert.displayed'}}
|
|
54
|
+
);
|
|
55
|
+
await flushPromises();
|
|
56
|
+
|
|
57
|
+
//@ts-ignore
|
|
58
|
+
assert.calledOnce(webex.request);
|
|
59
|
+
assert.deepEqual(webex.request.getCalls()[0].args[0].body.metrics[0].eventPayload.event, {
|
|
60
|
+
name: 'client.alert.displayed',
|
|
61
|
+
});
|
|
62
|
+
assert.lengthOf(webex.internal.newMetrics.callDiagnosticMetrics.callDiagnosticEventsBatcher.queue, 0);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('appends the correct join times to the request for client.interstitial-window.launched', async () => {
|
|
66
|
+
webex.internal.newMetrics.callDiagnosticLatencies.getDiffBetweenTimestamps = sinon.stub().returns(10);
|
|
67
|
+
await webex.internal.newMetrics.callDiagnosticMetrics.submitToCallDiagnostics(
|
|
68
|
+
//@ts-ignore
|
|
69
|
+
{event: {name: 'client.interstitial-window.launched'}}
|
|
70
|
+
);
|
|
71
|
+
await flushPromises();
|
|
72
|
+
|
|
73
|
+
//@ts-ignore
|
|
74
|
+
assert.calledOnce(webex.request);
|
|
75
|
+
assert.deepEqual(webex.request.getCalls()[0].args[0].body.metrics[0].eventPayload.event, {
|
|
76
|
+
name: 'client.interstitial-window.launched',
|
|
77
|
+
joinTimes: {
|
|
78
|
+
clickToInterstitial: 10,
|
|
79
|
+
meetingInfoReqResp: 10,
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
assert.lengthOf(webex.internal.newMetrics.callDiagnosticMetrics.callDiagnosticEventsBatcher.queue, 0);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it('appends the correct join times to the request for client.call.initiated', async () => {
|
|
86
|
+
webex.internal.newMetrics.callDiagnosticLatencies.getDiffBetweenTimestamps = sinon.stub().returns(10);
|
|
87
|
+
await webex.internal.newMetrics.callDiagnosticMetrics.submitToCallDiagnostics(
|
|
88
|
+
//@ts-ignore
|
|
89
|
+
{event: {name: 'client.call.initiated'}}
|
|
90
|
+
);
|
|
91
|
+
await flushPromises();
|
|
92
|
+
|
|
93
|
+
//@ts-ignore
|
|
94
|
+
assert.calledOnce(webex.request);
|
|
95
|
+
assert.deepEqual(webex.request.getCalls()[0].args[0].body.metrics[0].eventPayload.event, {
|
|
96
|
+
name: 'client.call.initiated',
|
|
97
|
+
joinTimes: {
|
|
98
|
+
meetingInfoReqResp: 10,
|
|
99
|
+
showInterstitialTime: 10,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
assert.lengthOf(webex.internal.newMetrics.callDiagnosticMetrics.callDiagnosticEventsBatcher.queue, 0);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('appends the correct join times to the request for client.locus.join.response', async () => {
|
|
106
|
+
webex.internal.newMetrics.callDiagnosticLatencies.getDiffBetweenTimestamps = sinon.stub().returns(10);
|
|
107
|
+
webex.internal.newMetrics.callDiagnosticLatencies.getJoinRespSentReceived = sinon.stub().returns(20);
|
|
108
|
+
webex.internal.newMetrics.callDiagnosticLatencies.getPageJMT = sinon.stub().returns(30);
|
|
109
|
+
await webex.internal.newMetrics.callDiagnosticMetrics.submitToCallDiagnostics(
|
|
110
|
+
//@ts-ignore
|
|
111
|
+
{event: {name: 'client.locus.join.response'}}
|
|
112
|
+
);
|
|
113
|
+
await flushPromises();
|
|
114
|
+
|
|
115
|
+
//@ts-ignore
|
|
116
|
+
assert.calledOnce(webex.request);
|
|
117
|
+
assert.deepEqual(webex.request.getCalls()[0].args[0].body.metrics[0].eventPayload.event, {
|
|
118
|
+
name: 'client.locus.join.response',
|
|
119
|
+
joinTimes: {
|
|
120
|
+
callInitJoinReq: 10,
|
|
121
|
+
clickToInterstitial: 10,
|
|
122
|
+
interstitialToJoinOK: 10,
|
|
123
|
+
joinReqResp: 10,
|
|
124
|
+
joinReqSentReceived: 20,
|
|
125
|
+
meetingInfoReqResp: 10,
|
|
126
|
+
pageJmt: 30,
|
|
127
|
+
totalJmt: 20,
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
assert.lengthOf(webex.internal.newMetrics.callDiagnosticMetrics.callDiagnosticEventsBatcher.queue, 0);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it('appends the correct join times to the request for client.ice.end', async () => {
|
|
134
|
+
webex.internal.newMetrics.callDiagnosticLatencies.getDiffBetweenTimestamps = sinon.stub().returns(10);
|
|
135
|
+
await webex.internal.newMetrics.callDiagnosticMetrics.submitToCallDiagnostics(
|
|
136
|
+
//@ts-ignore
|
|
137
|
+
{event: {name: 'client.ice.end'}}
|
|
138
|
+
);
|
|
139
|
+
await flushPromises();
|
|
140
|
+
|
|
141
|
+
//@ts-ignore
|
|
142
|
+
assert.calledOnce(webex.request);
|
|
143
|
+
assert.deepEqual(webex.request.getCalls()[0].args[0].body.metrics[0].eventPayload.event, {
|
|
144
|
+
name: 'client.ice.end',
|
|
145
|
+
joinTimes: {
|
|
146
|
+
ICESetupTime: 10,
|
|
147
|
+
audioICESetupTime: 10,
|
|
148
|
+
shareICESetupTime: 10,
|
|
149
|
+
videoICESetupTime: 10,
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
assert.lengthOf(webex.internal.newMetrics.callDiagnosticMetrics.callDiagnosticEventsBatcher.queue, 0);
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
it('appends the correct join times to the request for client.media.rx.start', async () => {
|
|
156
|
+
webex.internal.newMetrics.callDiagnosticLatencies.getDiffBetweenTimestamps = sinon.stub().returns(10);
|
|
157
|
+
await webex.internal.newMetrics.callDiagnosticMetrics.submitToCallDiagnostics(
|
|
158
|
+
//@ts-ignore
|
|
159
|
+
{event: {name: 'client.media.rx.start'}}
|
|
160
|
+
);
|
|
161
|
+
await flushPromises();
|
|
162
|
+
|
|
163
|
+
//@ts-ignore
|
|
164
|
+
assert.calledOnce(webex.request);
|
|
165
|
+
assert.deepEqual(webex.request.getCalls()[0].args[0].body.metrics[0].eventPayload.event, {
|
|
166
|
+
name: 'client.media.rx.start',
|
|
167
|
+
joinTimes: {
|
|
168
|
+
localSDPGenRemoteSDPRecv: 10,
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
assert.lengthOf(webex.internal.newMetrics.callDiagnosticMetrics.callDiagnosticEventsBatcher.queue, 0);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it('appends the correct join times to the request for client.media-engine.ready', async () => {
|
|
175
|
+
webex.internal.newMetrics.callDiagnosticLatencies.getDiffBetweenTimestamps = sinon.stub().returns(10)
|
|
176
|
+
await webex.internal.newMetrics.callDiagnosticMetrics.submitToCallDiagnostics(
|
|
177
|
+
//@ts-ignore
|
|
178
|
+
{event: {name: 'client.media-engine.ready'}}
|
|
179
|
+
);
|
|
180
|
+
await flushPromises();
|
|
181
|
+
|
|
182
|
+
//@ts-ignore
|
|
183
|
+
assert.calledOnce(webex.request);
|
|
184
|
+
assert.deepEqual(webex.request.getCalls()[0].args[0].body.metrics[0].eventPayload.event, {
|
|
185
|
+
name: 'client.media-engine.ready',
|
|
186
|
+
joinTimes: {
|
|
187
|
+
totalMediaJMT: 30,
|
|
188
|
+
interstitialToMediaOKJMT: 10,
|
|
189
|
+
callInitMediaEngineReady: 10,
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
assert.lengthOf(webex.internal.newMetrics.callDiagnosticMetrics.callDiagnosticEventsBatcher.queue, 0);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it('appends the correct audio and video setup delays to the request for client.mediaquality.event', async () => {
|
|
196
|
+
webex.internal.newMetrics.callDiagnosticLatencies.getDiffBetweenTimestamps = sinon.stub().returns(10);
|
|
197
|
+
await webex.internal.newMetrics.callDiagnosticMetrics.submitToCallDiagnostics(
|
|
198
|
+
//@ts-ignore
|
|
199
|
+
{event: {name: 'client.mediaquality.event'}}
|
|
200
|
+
);
|
|
201
|
+
await flushPromises();
|
|
202
|
+
|
|
203
|
+
//@ts-ignore
|
|
204
|
+
assert.calledOnce(webex.request);
|
|
205
|
+
assert.deepEqual(webex.request.getCalls()[0].args[0].body.metrics[0].eventPayload.event, {
|
|
206
|
+
name: 'client.mediaquality.event',
|
|
207
|
+
audioSetupDelay: {
|
|
208
|
+
joinRespRxStart: 10,
|
|
209
|
+
joinRespTxStart: 10,
|
|
210
|
+
},
|
|
211
|
+
videoSetupDelay: {
|
|
212
|
+
joinRespRxStart: 10,
|
|
213
|
+
joinRespTxStart: 10,
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
assert.lengthOf(webex.internal.newMetrics.callDiagnosticMetrics.callDiagnosticEventsBatcher.queue, 0);
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
it('doesnt include audioSetup and videoSetup delays for other events', async () => {
|
|
220
|
+
await webex.internal.newMetrics.callDiagnosticMetrics.submitToCallDiagnostics(
|
|
221
|
+
//@ts-ignore
|
|
222
|
+
{event: {name: 'client.alert.displayed'}}
|
|
223
|
+
);
|
|
224
|
+
await flushPromises();
|
|
225
|
+
|
|
226
|
+
//@ts-ignore
|
|
227
|
+
assert.calledOnce(webex.request);
|
|
228
|
+
assert.deepEqual(webex.request.getCalls()[0].args[0].body.metrics[0].eventPayload.event.audioSetupDelay, undefined);
|
|
229
|
+
assert.deepEqual(webex.request.getCalls()[0].args[0].body.metrics[0].eventPayload.event.videoSetupDelay, undefined);
|
|
230
|
+
assert.lengthOf(webex.internal.newMetrics.callDiagnosticMetrics.callDiagnosticEventsBatcher.queue, 0);
|
|
231
|
+
})
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
});
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import {assert} from '@webex/test-helper-chai';
|
|
2
|
+
import CallDiagnosticLatencies from '../../../../src/call-diagnostic/call-diagnostic-metrics-latencies'
|
|
3
|
+
import sinon from 'sinon';
|
|
4
|
+
|
|
5
|
+
describe("internal-plugin-metrics", () => {
|
|
6
|
+
describe("CallDiagnosticLatencies", () => {
|
|
7
|
+
let cdl: CallDiagnosticLatencies;
|
|
8
|
+
var now = new Date();
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
sinon.createSandbox();
|
|
13
|
+
sinon.useFakeTimers(now.getTime());
|
|
14
|
+
cdl = new CallDiagnosticLatencies();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
sinon.restore();
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
it('should save timestamp correctly', () => {
|
|
22
|
+
assert.deepEqual(cdl.latencyTimestamps.size, 0);
|
|
23
|
+
cdl.saveTimestamp('client.alert.displayed');
|
|
24
|
+
assert.deepEqual(cdl.latencyTimestamps.size, 1);
|
|
25
|
+
assert.deepEqual(cdl.latencyTimestamps.get('client.alert.displayed'), now.getTime())
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('should update existing property and now add new keys', () => {
|
|
29
|
+
assert.deepEqual(cdl.latencyTimestamps.size, 0);
|
|
30
|
+
cdl.saveTimestamp('client.alert.displayed');
|
|
31
|
+
assert.deepEqual(cdl.latencyTimestamps.get('client.alert.displayed'), now.getTime());
|
|
32
|
+
cdl.saveTimestamp('client.alert.displayed', 1234);
|
|
33
|
+
assert.deepEqual(cdl.latencyTimestamps.get('client.alert.displayed'), 1234);
|
|
34
|
+
assert.deepEqual(cdl.latencyTimestamps.size, 1);
|
|
35
|
+
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it('should clear all timestamps correctly', () => {
|
|
39
|
+
cdl.saveTimestamp('client.alert.displayed');
|
|
40
|
+
cdl.saveTimestamp('client.alert.removed');
|
|
41
|
+
assert.deepEqual(cdl.latencyTimestamps.size, 2);
|
|
42
|
+
cdl.clearTimestamps();
|
|
43
|
+
assert.deepEqual(cdl.latencyTimestamps.size, 0);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('should calculate diff between timestamps correctly', () => {
|
|
47
|
+
cdl.saveTimestamp('client.alert.displayed', 10);
|
|
48
|
+
cdl.saveTimestamp('client.alert.removed', 20);
|
|
49
|
+
const res = cdl.getDiffBetweenTimestamps('client.alert.displayed', 'client.alert.removed');
|
|
50
|
+
assert.deepEqual(res, 10);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('it returns undefined if either one is doesnt exist', () => {
|
|
54
|
+
cdl.saveTimestamp('client.alert.displayed', 10);
|
|
55
|
+
const res1 = cdl.getDiffBetweenTimestamps('client.alert.displayed', 'client.alert.removed');
|
|
56
|
+
assert.deepEqual(res1, undefined);
|
|
57
|
+
const res2 = cdl.getDiffBetweenTimestamps('client.alert.removed', 'client.alert.displayed');
|
|
58
|
+
assert.deepEqual(res2, undefined);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('calculates getMeetingInfoReqResp correctly', () => {
|
|
62
|
+
cdl.saveTimestamp('internal.client.meetinginfo.request', 10);
|
|
63
|
+
cdl.saveTimestamp('internal.client.meetinginfo.response', 20);
|
|
64
|
+
assert.deepEqual(cdl.getMeetingInfoReqResp(), 10);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('calculates getShowInterstitialTime correctly', () => {
|
|
68
|
+
cdl.saveTimestamp('internal.client.interstitial-window.launched', 10);
|
|
69
|
+
cdl.saveTimestamp('internal.client.interstitial-window.click.joinbutton', 20);
|
|
70
|
+
assert.deepEqual(cdl.getShowInterstitialTime(), 10);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('calculates getCallInitJoinReq correctly', () => {
|
|
74
|
+
cdl.saveTimestamp('internal.client.meeting.click.joinbutton', 10);
|
|
75
|
+
cdl.saveTimestamp('client.locus.join.request', 20);
|
|
76
|
+
assert.deepEqual(cdl.getCallInitJoinReq(), 10);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('calculates getJoinReqResp correctly', () => {
|
|
80
|
+
cdl.saveTimestamp('client.locus.join.request', 10);
|
|
81
|
+
cdl.saveTimestamp('client.locus.join.response', 20);
|
|
82
|
+
assert.deepEqual(cdl.getJoinReqResp(), 10);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it('calculates getLocalSDPGenRemoteSDPRecv correctly', () => {
|
|
86
|
+
cdl.saveTimestamp('client.media-engine.local-sdp-generated', 10);
|
|
87
|
+
cdl.saveTimestamp('client.media-engine.remote-sdp-received', 20);
|
|
88
|
+
assert.deepEqual(cdl.getLocalSDPGenRemoteSDPRecv(), 10);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('calculates getICESetupTime correctly', () => {
|
|
92
|
+
cdl.saveTimestamp('client.ice.start', 10);
|
|
93
|
+
cdl.saveTimestamp('client.ice.end', 20);
|
|
94
|
+
assert.deepEqual(cdl.getICESetupTime(), 10);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('calculates getAudioICESetupTime correctly', () => {
|
|
98
|
+
cdl.saveTimestamp('client.ice.start', 10);
|
|
99
|
+
cdl.saveTimestamp('client.ice.end', 20);
|
|
100
|
+
assert.deepEqual(cdl.getAudioICESetupTime(), 10);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it('calculates getVideoICESetupTime correctly', () => {
|
|
104
|
+
cdl.saveTimestamp('client.ice.start', 10);
|
|
105
|
+
cdl.saveTimestamp('client.ice.end', 20);
|
|
106
|
+
assert.deepEqual(cdl.getVideoICESetupTime(), 10);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('calculates getShareICESetupTime correctly', () => {
|
|
110
|
+
cdl.saveTimestamp('client.ice.start', 10);
|
|
111
|
+
cdl.saveTimestamp('client.ice.end', 20);
|
|
112
|
+
assert.deepEqual(cdl.getShareICESetupTime(), 10);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('calculates getStayLobbyTime correctly', () => {
|
|
116
|
+
cdl.saveTimestamp('client.locus.join.response', 10);
|
|
117
|
+
cdl.saveTimestamp('internal.host.meeting.participant.admitted', 20);
|
|
118
|
+
assert.deepEqual(cdl.getStayLobbyTime(), 10);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it('calculates getPageJMT correctly', () => {
|
|
122
|
+
cdl.saveTimestamp('internal.client.pageJMT.received', 10);
|
|
123
|
+
assert.deepEqual(cdl.getPageJMT(), 10);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it('calculates getClickToInterstitial correctly', () => {
|
|
127
|
+
cdl.saveTimestamp('internal.client.meeting.click.joinbutton', 10);
|
|
128
|
+
cdl.saveTimestamp('internal.client.meeting.interstitial-window.showed', 20);
|
|
129
|
+
assert.deepEqual(cdl.getClickToInterstitial(), 10);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it('calculates getInterstitialToJoinOK correctly', () => {
|
|
133
|
+
cdl.saveTimestamp('internal.client.meeting.click.joinbutton', 10);
|
|
134
|
+
cdl.saveTimestamp('client.locus.join.response', 20);
|
|
135
|
+
assert.deepEqual(cdl.getInterstitialToJoinOK(), 10);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it('calculates getInterstitialToMediaOK correctly', () => {
|
|
139
|
+
cdl.saveTimestamp('internal.client.meeting.click.joinbutton', 10);
|
|
140
|
+
cdl.saveTimestamp('sdk.media-flow.started', 20);
|
|
141
|
+
assert.deepEqual(cdl.getInterstitialToMediaOK(), 10);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it('calculates getTotalJMT correctly', () => {
|
|
145
|
+
cdl.saveTimestamp('internal.client.meeting.click.joinbutton', 10);
|
|
146
|
+
cdl.saveTimestamp('internal.client.meeting.interstitial-window.showed', 20);
|
|
147
|
+
cdl.saveTimestamp('client.locus.join.response', 40);
|
|
148
|
+
assert.deepEqual(cdl.getTotalJMT(), 40);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it('calculates getJoinConfJMT correctly', () => {
|
|
152
|
+
cdl.saveTimestamp('client.locus.join.request', 10);
|
|
153
|
+
cdl.saveTimestamp('client.locus.join.response', 20);
|
|
154
|
+
cdl.saveTimestamp('client.ice.start', 30);
|
|
155
|
+
cdl.saveTimestamp('client.ice.end', 40);
|
|
156
|
+
assert.deepEqual(cdl.getJoinConfJMT(), 20);
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it('calculates getClientJMT correctly', () => {
|
|
160
|
+
cdl.saveTimestamp('internal.client.meeting.click.joinbutton', 5);
|
|
161
|
+
cdl.saveTimestamp('internal.client.meeting.interstitial-window.showed', 7)
|
|
162
|
+
cdl.saveTimestamp('client.locus.join.request', 10);
|
|
163
|
+
cdl.saveTimestamp('client.locus.join.response', 20);
|
|
164
|
+
cdl.saveTimestamp('client.ice.start', 30);
|
|
165
|
+
cdl.saveTimestamp('client.ice.end', 40);
|
|
166
|
+
assert.deepEqual(cdl.getClientJMT(), 35);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
it('calculates getAudioJoinRespRxStart correctly', () => {
|
|
170
|
+
cdl.saveTimestamp('client.locus.join.response', 5);
|
|
171
|
+
cdl.saveTimestamp('client.media.rx.start', 7);
|
|
172
|
+
assert.deepEqual(cdl.getAudioJoinRespRxStart(), 2);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('calculates getVideoJoinRespRxStart correctly', () => {
|
|
176
|
+
cdl.saveTimestamp('client.locus.join.response', 5);
|
|
177
|
+
cdl.saveTimestamp('client.media.rx.start', 7);
|
|
178
|
+
assert.deepEqual(cdl.getVideoJoinRespRxStart(), 2);
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
it('calculates getAudioJoinRespTxStart correctly', () => {
|
|
182
|
+
cdl.saveTimestamp('client.locus.join.response', 5);
|
|
183
|
+
cdl.saveTimestamp('client.media.tx.start', 7);
|
|
184
|
+
assert.deepEqual(cdl.getAudioJoinRespTxStart(), 2);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it('calculates getVideoJoinRespTxStart correctly', () => {
|
|
188
|
+
cdl.saveTimestamp('client.locus.join.response', 5);
|
|
189
|
+
cdl.saveTimestamp('client.media.tx.start', 7);
|
|
190
|
+
assert.deepEqual(cdl.getVideoJoinRespTxStart(), 2);
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
it('calculates getInterstitialToMediaOKJMT correctly', () => {
|
|
194
|
+
cdl.saveTimestamp('internal.client.interstitial-window.click.joinbutton', 5);
|
|
195
|
+
cdl.saveTimestamp('client.media-engine.ready', 7);
|
|
196
|
+
assert.deepEqual(cdl.getInterstitialToMediaOKJMT(), 2);
|
|
197
|
+
});
|
|
198
|
+
})
|
|
199
|
+
})
|