@webex/plugin-meetings 3.0.0-beta.162 → 3.0.0-beta.164
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/breakouts/breakout.js +7 -3
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/events.js +31 -29
- package/dist/breakouts/events.js.map +1 -1
- package/dist/breakouts/index.js +4 -2
- package/dist/breakouts/index.js.map +1 -1
- package/dist/constants.js +2 -4
- package/dist/constants.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/index.js +33 -17
- package/dist/locus-info/index.js.map +1 -1
- package/dist/meeting/index.js +699 -682
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +47 -25
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +48 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +24 -10
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meetings/index.js +12 -9
- package/dist/meetings/index.js.map +1 -1
- package/dist/metrics/index.js +1 -487
- package/dist/metrics/index.js.map +1 -1
- package/dist/reconnection-manager/index.js +27 -17
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/request.js +20 -14
- package/dist/roap/request.js.map +1 -1
- package/dist/types/breakouts/events.d.ts +7 -1
- package/dist/types/constants.d.ts +0 -1
- package/dist/types/meeting/index.d.ts +31 -133
- package/dist/types/meeting-info/index.d.ts +6 -1
- package/dist/types/meetings/index.d.ts +1 -0
- package/dist/types/metrics/index.d.ts +4 -128
- package/package.json +19 -19
- package/src/breakouts/breakout.ts +10 -2
- package/src/breakouts/events.ts +51 -32
- package/src/breakouts/index.ts +9 -5
- package/src/constants.ts +0 -2
- package/src/locus-info/index.ts +35 -17
- package/src/meeting/index.ts +474 -536
- package/src/meeting/util.ts +42 -19
- package/src/meeting-info/index.ts +54 -8
- package/src/meeting-info/meeting-info-v2.ts +24 -9
- package/src/meetings/index.ts +11 -6
- package/src/metrics/index.ts +1 -506
- package/src/reconnection-manager/index.ts +27 -17
- package/src/roap/request.ts +21 -9
- package/test/unit/spec/breakouts/breakout.ts +4 -2
- package/test/unit/spec/breakouts/events.ts +24 -18
- package/test/unit/spec/locus-info/index.js +112 -0
- package/test/unit/spec/meeting/index.js +178 -145
- package/test/unit/spec/meeting/utils.js +93 -7
- package/test/unit/spec/meeting-info/index.js +181 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +68 -68
- package/test/unit/spec/meetings/index.js +35 -55
- package/test/unit/spec/metrics/index.js +1 -148
- package/test/unit/spec/reconnection-manager/index.js +51 -2
- package/test/unit/spec/roap/index.ts +8 -2
- package/test/unit/spec/roap/request.ts +43 -5
- package/dist/metrics/config.js +0 -335
- package/dist/metrics/config.js.map +0 -1
- package/dist/types/metrics/config.d.ts +0 -195
- package/src/metrics/config.ts +0 -534
|
@@ -60,9 +60,7 @@ import ControlsOptionsUtil from '@webex/plugin-meetings/src/controls-options-man
|
|
|
60
60
|
import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
|
|
61
61
|
import LoggerConfig from '@webex/plugin-meetings/src/common/logs/logger-config';
|
|
62
62
|
import TriggerProxy from '@webex/plugin-meetings/src/common/events/trigger-proxy';
|
|
63
|
-
import BrowserDetection from '@webex/plugin-meetings/src/common/browser-detection';
|
|
64
63
|
import Metrics from '@webex/plugin-meetings/src/metrics';
|
|
65
|
-
import {trigger, eventType} from '@webex/plugin-meetings/src/metrics/config';
|
|
66
64
|
import BEHAVIORAL_METRICS from '@webex/plugin-meetings/src/metrics/constants';
|
|
67
65
|
import {MediaRequestManager} from '@webex/plugin-meetings/src/multistream/mediaRequestManager';
|
|
68
66
|
import * as ReceiveSlotManagerModule from '@webex/plugin-meetings/src/multistream/receiveSlotManager';
|
|
@@ -94,8 +92,6 @@ import {
|
|
|
94
92
|
} from '../../../../src/meeting-info/meeting-info-v2';
|
|
95
93
|
import {ANNOTATION_POLICY} from "../../../../src/annotation/constants";
|
|
96
94
|
|
|
97
|
-
const {getBrowserName, getOSVersion} = BrowserDetection();
|
|
98
|
-
|
|
99
95
|
// Non-stubbed function
|
|
100
96
|
const {getDisplayMedia} = Media;
|
|
101
97
|
|
|
@@ -220,6 +216,7 @@ describe('plugin-meetings', () => {
|
|
|
220
216
|
});
|
|
221
217
|
|
|
222
218
|
webex.internal.support.submitLogs = sinon.stub().returns(Promise.resolve());
|
|
219
|
+
webex.internal.services = {get: sinon.stub().returns('locus-url')};
|
|
223
220
|
webex.credentials.getOrgId = sinon.stub().returns('fake-org-id');
|
|
224
221
|
webex.internal.metrics.submitClientMetrics = sinon.stub().returns(Promise.resolve());
|
|
225
222
|
webex.meetings.uploadLogs = sinon.stub().returns(Promise.resolve());
|
|
@@ -228,8 +225,7 @@ describe('plugin-meetings', () => {
|
|
|
228
225
|
meetingRequestSpy = sinon.spy(MeetingRequestImport, 'default');
|
|
229
226
|
|
|
230
227
|
TriggerProxy.trigger = sinon.stub().returns(true);
|
|
231
|
-
Metrics.
|
|
232
|
-
Metrics.initialSetup(null, webex);
|
|
228
|
+
Metrics.initialSetup(webex);
|
|
233
229
|
MediaUtil.createMediaStream = sinon.stub().callsFake((tracks) => {
|
|
234
230
|
return {
|
|
235
231
|
getTracks: () => tracks,
|
|
@@ -641,9 +637,10 @@ describe('plugin-meetings', () => {
|
|
|
641
637
|
it('should join the meeting and return promise', async () => {
|
|
642
638
|
const join = meeting.join();
|
|
643
639
|
|
|
644
|
-
assert.calledWithMatch(
|
|
645
|
-
|
|
646
|
-
|
|
640
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
641
|
+
name: 'client.call.initiated',
|
|
642
|
+
payload: {trigger: 'user-interaction', isRoapCallEnabled: true},
|
|
643
|
+
options: {meetingId: meeting.id},
|
|
647
644
|
});
|
|
648
645
|
|
|
649
646
|
assert.exists(join.then);
|
|
@@ -691,9 +688,10 @@ describe('plugin-meetings', () => {
|
|
|
691
688
|
|
|
692
689
|
const join = meeting.join();
|
|
693
690
|
|
|
694
|
-
assert.calledWithMatch(
|
|
695
|
-
|
|
696
|
-
|
|
691
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
692
|
+
name: 'client.call.initiated',
|
|
693
|
+
payload: {trigger: 'user-interaction', isRoapCallEnabled: true},
|
|
694
|
+
options: {meetingId: meeting.id},
|
|
697
695
|
});
|
|
698
696
|
|
|
699
697
|
assert.exists(join.then);
|
|
@@ -703,24 +701,27 @@ describe('plugin-meetings', () => {
|
|
|
703
701
|
assert.calledOnce(meeting.setLocus);
|
|
704
702
|
assert.equal(result, joinMeetingResult);
|
|
705
703
|
|
|
706
|
-
assert.calledThrice(
|
|
704
|
+
assert.calledThrice(webex.internal.newMetrics.submitClientEvent);
|
|
707
705
|
|
|
708
|
-
assert.deepEqual(
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
706
|
+
assert.deepEqual(webex.internal.newMetrics.submitClientEvent.getCall(0).args[0], {
|
|
707
|
+
name: 'client.call.initiated',
|
|
708
|
+
payload: {
|
|
709
|
+
trigger: 'user-interaction',
|
|
710
|
+
isRoapCallEnabled: true,
|
|
711
|
+
},
|
|
712
|
+
options: {meetingId: meeting.id},
|
|
712
713
|
});
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
'client.meetinginfo.request'
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
assert.deepEqual(
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
714
|
+
|
|
715
|
+
assert.deepEqual(webex.internal.newMetrics.submitClientEvent.getCall(1).args[0], {
|
|
716
|
+
name: 'client.meetinginfo.request',
|
|
717
|
+
options: {meetingId: meeting.id},
|
|
718
|
+
});
|
|
719
|
+
assert.deepEqual(webex.internal.newMetrics.submitClientEvent.getCall(2).args[0], {
|
|
720
|
+
name: 'client.meetinginfo.response',
|
|
721
|
+
payload: {
|
|
722
|
+
identifiers: {meetingLookupUrl: 'url'},
|
|
723
|
+
},
|
|
724
|
+
options: {meetingId: meeting.id},
|
|
724
725
|
});
|
|
725
726
|
});
|
|
726
727
|
|
|
@@ -729,9 +730,10 @@ describe('plugin-meetings', () => {
|
|
|
729
730
|
|
|
730
731
|
const join = meeting.join();
|
|
731
732
|
|
|
732
|
-
assert.
|
|
733
|
-
|
|
734
|
-
|
|
733
|
+
assert.calledWith(webex.internal.newMetrics.submitClientEvent, {
|
|
734
|
+
name: 'client.call.initiated',
|
|
735
|
+
payload: {trigger: 'user-interaction', isRoapCallEnabled: true},
|
|
736
|
+
options: {meetingId: meeting.id},
|
|
735
737
|
});
|
|
736
738
|
|
|
737
739
|
assert.exists(join.then);
|
|
@@ -741,9 +743,9 @@ describe('plugin-meetings', () => {
|
|
|
741
743
|
assert.calledOnce(meeting.setLocus);
|
|
742
744
|
assert.equal(result, joinMeetingResult);
|
|
743
745
|
|
|
744
|
-
assert.calledOnce(
|
|
746
|
+
assert.calledOnce(webex.internal.newMetrics.submitClientEvent)
|
|
745
747
|
|
|
746
|
-
assert.equal(
|
|
748
|
+
assert.equal(webex.internal.newMetrics.submitClientEvent.getCall(0).args[0].name, 'client.call.initiated');
|
|
747
749
|
});
|
|
748
750
|
});
|
|
749
751
|
describe('failure', () => {
|
|
@@ -790,7 +792,13 @@ describe('plugin-meetings', () => {
|
|
|
790
792
|
|
|
791
793
|
it('should post error event if failed', async () => {
|
|
792
794
|
await meeting.join().catch(() => {
|
|
793
|
-
assert.
|
|
795
|
+
assert.deepEqual(webex.internal.newMetrics.submitClientEvent.getCall(1).args[0].name, 'client.locus.join.response');
|
|
796
|
+
assert.match(webex.internal.newMetrics.submitClientEvent.getCall(1).args[0].options.rawError, {
|
|
797
|
+
code: 2,
|
|
798
|
+
error: null,
|
|
799
|
+
joinOptions: {},
|
|
800
|
+
sdkMessage: 'There was an issue joining the meeting, meeting could be in a bad state.'
|
|
801
|
+
});
|
|
794
802
|
});
|
|
795
803
|
});
|
|
796
804
|
it('should fail if password is required', async () => {
|
|
@@ -1190,6 +1198,7 @@ describe('plugin-meetings', () => {
|
|
|
1190
1198
|
});
|
|
1191
1199
|
|
|
1192
1200
|
it('should reject if waitForMediaConnectionConnected() rejects', async () => {
|
|
1201
|
+
webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode = sinon.stub().returns({});
|
|
1193
1202
|
meeting.meetingState = 'ACTIVE';
|
|
1194
1203
|
meeting.mediaProperties.waitForMediaConnectionConnected.rejects(new Error('fake error'));
|
|
1195
1204
|
|
|
@@ -1203,6 +1212,20 @@ describe('plugin-meetings', () => {
|
|
|
1203
1212
|
errorThrown = true;
|
|
1204
1213
|
});
|
|
1205
1214
|
|
|
1215
|
+
assert.calledTwice(webex.internal.newMetrics.submitClientEvent);
|
|
1216
|
+
|
|
1217
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
1218
|
+
name: 'client.ice.end',
|
|
1219
|
+
payload: {
|
|
1220
|
+
canProceed: false,
|
|
1221
|
+
icePhase: 'JOIN_MEETING_FINAL',
|
|
1222
|
+
errors: [{}],
|
|
1223
|
+
},
|
|
1224
|
+
options: {
|
|
1225
|
+
meetingId: meeting.id,
|
|
1226
|
+
},
|
|
1227
|
+
});
|
|
1228
|
+
|
|
1206
1229
|
assert.isTrue(errorThrown);
|
|
1207
1230
|
});
|
|
1208
1231
|
|
|
@@ -1219,6 +1242,14 @@ describe('plugin-meetings', () => {
|
|
|
1219
1242
|
connectionType: 'udp',
|
|
1220
1243
|
isMultistream: false
|
|
1221
1244
|
});
|
|
1245
|
+
|
|
1246
|
+
assert.called(webex.internal.newMetrics.submitClientEvent);
|
|
1247
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
1248
|
+
name: 'client.media-engine.ready',
|
|
1249
|
+
options: {
|
|
1250
|
+
meetingId: meeting.id,
|
|
1251
|
+
},
|
|
1252
|
+
});
|
|
1222
1253
|
});
|
|
1223
1254
|
|
|
1224
1255
|
describe('handles StatsAnalyzer events', () => {
|
|
@@ -1263,9 +1294,12 @@ describe('plugin-meetings', () => {
|
|
|
1263
1294
|
type: 'audio',
|
|
1264
1295
|
}
|
|
1265
1296
|
);
|
|
1266
|
-
assert.calledWithMatch(
|
|
1267
|
-
|
|
1268
|
-
|
|
1297
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
1298
|
+
name: 'client.media.tx.start',
|
|
1299
|
+
payload: {mediaType: 'audio'},
|
|
1300
|
+
options: {
|
|
1301
|
+
meetingId: meeting.id,
|
|
1302
|
+
},
|
|
1269
1303
|
});
|
|
1270
1304
|
});
|
|
1271
1305
|
|
|
@@ -1276,9 +1310,12 @@ describe('plugin-meetings', () => {
|
|
|
1276
1310
|
{type: 'video'}
|
|
1277
1311
|
);
|
|
1278
1312
|
|
|
1279
|
-
assert.calledWithMatch(
|
|
1280
|
-
|
|
1281
|
-
|
|
1313
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
1314
|
+
name: 'client.media.tx.stop',
|
|
1315
|
+
payload: {mediaType:'video'},
|
|
1316
|
+
options: {
|
|
1317
|
+
meetingId: meeting.id,
|
|
1318
|
+
},
|
|
1282
1319
|
});
|
|
1283
1320
|
});
|
|
1284
1321
|
|
|
@@ -1301,9 +1338,12 @@ describe('plugin-meetings', () => {
|
|
|
1301
1338
|
type: 'video',
|
|
1302
1339
|
}
|
|
1303
1340
|
);
|
|
1304
|
-
assert.calledWithMatch(
|
|
1305
|
-
|
|
1306
|
-
|
|
1341
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
1342
|
+
name: 'client.media.rx.start',
|
|
1343
|
+
payload: {mediaType: 'video'},
|
|
1344
|
+
options: {
|
|
1345
|
+
meetingId: meeting.id,
|
|
1346
|
+
},
|
|
1307
1347
|
});
|
|
1308
1348
|
});
|
|
1309
1349
|
|
|
@@ -1314,13 +1354,16 @@ describe('plugin-meetings', () => {
|
|
|
1314
1354
|
{type: 'audio'}
|
|
1315
1355
|
);
|
|
1316
1356
|
|
|
1317
|
-
assert.calledWithMatch(
|
|
1318
|
-
|
|
1319
|
-
|
|
1357
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
1358
|
+
name: 'client.media.rx.stop',
|
|
1359
|
+
payload: {mediaType: 'audio'},
|
|
1360
|
+
options: {
|
|
1361
|
+
meetingId: meeting.id,
|
|
1362
|
+
},
|
|
1320
1363
|
});
|
|
1321
1364
|
});
|
|
1322
1365
|
|
|
1323
|
-
it('
|
|
1366
|
+
it('calls submitMQE correctly', async () => {
|
|
1324
1367
|
const fakeData = {intervalMetadata: {bla: 'bla'}};
|
|
1325
1368
|
|
|
1326
1369
|
statsAnalyzerStub.emit(
|
|
@@ -1329,9 +1372,15 @@ describe('plugin-meetings', () => {
|
|
|
1329
1372
|
{data: fakeData, networkType: 'wifi'}
|
|
1330
1373
|
);
|
|
1331
1374
|
|
|
1332
|
-
assert.calledWithMatch(
|
|
1333
|
-
|
|
1334
|
-
|
|
1375
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitMQE, {
|
|
1376
|
+
name: 'client.mediaquality.event',
|
|
1377
|
+
options: {
|
|
1378
|
+
meetingId: meeting.id,
|
|
1379
|
+
networkType: 'wifi',
|
|
1380
|
+
},
|
|
1381
|
+
payload: {
|
|
1382
|
+
intervals: [fakeData]
|
|
1383
|
+
}
|
|
1335
1384
|
});
|
|
1336
1385
|
});
|
|
1337
1386
|
});
|
|
@@ -1438,8 +1487,6 @@ describe('plugin-meetings', () => {
|
|
|
1438
1487
|
|
|
1439
1488
|
StaticConfig.set({bandwidth: {audio: 1234, video: 5678, startBitrate: 9876}});
|
|
1440
1489
|
|
|
1441
|
-
Metrics.postEvent = sinon.stub();
|
|
1442
|
-
|
|
1443
1490
|
// setup things that are expected to be the same across all the tests and are actually irrelevant for these tests
|
|
1444
1491
|
expectedDebugId = `MC-${meeting.id.substring(0, 4)}`;
|
|
1445
1492
|
expectedMediaConnectionConfig = {
|
|
@@ -2113,6 +2160,15 @@ describe('plugin-meetings', () => {
|
|
|
2113
2160
|
assert.calledOnce(meeting.unsetRemoteTracks);
|
|
2114
2161
|
assert.calledOnce(meeting.unsetPeerConnections);
|
|
2115
2162
|
});
|
|
2163
|
+
|
|
2164
|
+
it('should reset call diagnostic latencies correctly', async () => {
|
|
2165
|
+
const leave = meeting.leave();
|
|
2166
|
+
|
|
2167
|
+
assert.exists(leave.then);
|
|
2168
|
+
await leave;
|
|
2169
|
+
assert.calledWith(webex.internal.newMetrics.submitInternalEvent, {name: 'internal.reset.join.latencies'});
|
|
2170
|
+
});
|
|
2171
|
+
|
|
2116
2172
|
describe('after audio/video is defined', () => {
|
|
2117
2173
|
let handleClientRequest;
|
|
2118
2174
|
|
|
@@ -3263,9 +3319,14 @@ describe('plugin-meetings', () => {
|
|
|
3263
3319
|
assert.exists(meeting.postMetrics);
|
|
3264
3320
|
});
|
|
3265
3321
|
|
|
3266
|
-
it('should trigger `
|
|
3267
|
-
await meeting.postMetrics(
|
|
3268
|
-
|
|
3322
|
+
it('should trigger `submitClientEvent`', async () => {
|
|
3323
|
+
await meeting.postMetrics('client.call.leave');
|
|
3324
|
+
console.log({s: webex.internal.newMetrics.submitClientEvent.getCall(0).args[0]})
|
|
3325
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
3326
|
+
name: 'client.call.leave',
|
|
3327
|
+
options: {meetingId: meeting.id},
|
|
3328
|
+
});
|
|
3329
|
+
|
|
3269
3330
|
});
|
|
3270
3331
|
});
|
|
3271
3332
|
|
|
@@ -3352,11 +3413,11 @@ describe('plugin-meetings', () => {
|
|
|
3352
3413
|
}
|
|
3353
3414
|
});
|
|
3354
3415
|
|
|
3355
|
-
it('should
|
|
3416
|
+
it('should submitClientEvent on moveTo ', async () => {
|
|
3356
3417
|
await meeting.moveTo('resourceId');
|
|
3357
|
-
assert.calledWithMatch(
|
|
3358
|
-
|
|
3359
|
-
|
|
3418
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
3419
|
+
name: 'client.media.capabilities',
|
|
3420
|
+
payload: {
|
|
3360
3421
|
mediaCapabilities: {
|
|
3361
3422
|
rx: {
|
|
3362
3423
|
audio: false,
|
|
@@ -3374,8 +3435,12 @@ describe('plugin-meetings', () => {
|
|
|
3374
3435
|
},
|
|
3375
3436
|
},
|
|
3376
3437
|
},
|
|
3438
|
+
options: {meetingId: meeting.id},
|
|
3439
|
+
});
|
|
3440
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
3441
|
+
name: 'client.call.move-media',
|
|
3442
|
+
options: {meetingId: meeting.id}
|
|
3377
3443
|
});
|
|
3378
|
-
assert.calledWithMatch(Metrics.postEvent, {event: eventType.MOVE_MEDIA});
|
|
3379
3444
|
});
|
|
3380
3445
|
|
|
3381
3446
|
it('should call `MeetingUtil.joinMeetingOptions` with resourceId', async () => {
|
|
@@ -3485,10 +3550,13 @@ describe('plugin-meetings', () => {
|
|
|
3485
3550
|
}
|
|
3486
3551
|
});
|
|
3487
3552
|
|
|
3488
|
-
it('should
|
|
3553
|
+
it('should submitClientEvent on moveFrom ', async () => {
|
|
3489
3554
|
await meeting.moveFrom('resourceId');
|
|
3490
3555
|
|
|
3491
|
-
assert.calledWithMatch(
|
|
3556
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
3557
|
+
name: 'client.call.move-media',
|
|
3558
|
+
options: {meetingId: meeting.id},
|
|
3559
|
+
});
|
|
3492
3560
|
});
|
|
3493
3561
|
|
|
3494
3562
|
it('should call `MeetingUtil.joinMeetingOptions` with resourceId', async () => {
|
|
@@ -3999,6 +4067,29 @@ describe('plugin-meetings', () => {
|
|
|
3999
4067
|
});
|
|
4000
4068
|
});
|
|
4001
4069
|
|
|
4070
|
+
describe('submitClientEvent on connectionFailed', () => {
|
|
4071
|
+
it('sends client.ice.end when connectionFailed on CONNECTION_STATE_CHANGED event', () => {
|
|
4072
|
+
webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode = sinon.stub().returns({})
|
|
4073
|
+
meeting.setupMediaConnectionListeners();
|
|
4074
|
+
eventListeners[Event.CONNECTION_STATE_CHANGED]({
|
|
4075
|
+
state: 'Failed',
|
|
4076
|
+
});
|
|
4077
|
+
assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
|
|
4078
|
+
|
|
4079
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
4080
|
+
name: 'client.ice.end',
|
|
4081
|
+
payload: {
|
|
4082
|
+
canProceed: false,
|
|
4083
|
+
icePhase: 'IN_MEETING',
|
|
4084
|
+
errors: [{}],
|
|
4085
|
+
},
|
|
4086
|
+
options: {
|
|
4087
|
+
meetingId: meeting.id,
|
|
4088
|
+
},
|
|
4089
|
+
});
|
|
4090
|
+
});
|
|
4091
|
+
});
|
|
4092
|
+
|
|
4002
4093
|
describe('should send correct metrics for ROAP_FAILURE event', () => {
|
|
4003
4094
|
const fakeErrorMessage = 'test error';
|
|
4004
4095
|
const fakeRootCauseName = 'root cause name';
|
|
@@ -4008,12 +4099,14 @@ describe('plugin-meetings', () => {
|
|
|
4008
4099
|
meeting.setupMediaConnectionListeners();
|
|
4009
4100
|
});
|
|
4010
4101
|
|
|
4011
|
-
const checkMetricSent = (event) => {
|
|
4012
|
-
assert.calledOnce(
|
|
4013
|
-
assert.calledWithMatch(
|
|
4014
|
-
event,
|
|
4015
|
-
|
|
4016
|
-
|
|
4102
|
+
const checkMetricSent = (event, error) => {
|
|
4103
|
+
assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
|
|
4104
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
4105
|
+
name: event,
|
|
4106
|
+
payload: {
|
|
4107
|
+
canProceed: false,
|
|
4108
|
+
},
|
|
4109
|
+
options: {showToUser: true, rawError: error, meetingId: meeting.id},
|
|
4017
4110
|
});
|
|
4018
4111
|
};
|
|
4019
4112
|
|
|
@@ -4047,7 +4140,7 @@ describe('plugin-meetings', () => {
|
|
|
4047
4140
|
|
|
4048
4141
|
eventListeners[Event.ROAP_FAILURE](fakeError);
|
|
4049
4142
|
|
|
4050
|
-
checkMetricSent(
|
|
4143
|
+
checkMetricSent('client.media-engine.local-sdp-generated', fakeError);
|
|
4051
4144
|
checkBehavioralMetricSent(
|
|
4052
4145
|
BEHAVIORAL_METRICS.PEERCONNECTION_FAILURE,
|
|
4053
4146
|
Errors.ErrorCode.SdpOfferCreationError,
|
|
@@ -4064,7 +4157,7 @@ describe('plugin-meetings', () => {
|
|
|
4064
4157
|
|
|
4065
4158
|
eventListeners[Event.ROAP_FAILURE](fakeError);
|
|
4066
4159
|
|
|
4067
|
-
checkMetricSent(
|
|
4160
|
+
checkMetricSent('client.media-engine.remote-sdp-received', fakeError);
|
|
4068
4161
|
checkBehavioralMetricSent(
|
|
4069
4162
|
BEHAVIORAL_METRICS.PEERCONNECTION_FAILURE,
|
|
4070
4163
|
Errors.ErrorCode.SdpOfferHandlingError,
|
|
@@ -4081,7 +4174,7 @@ describe('plugin-meetings', () => {
|
|
|
4081
4174
|
|
|
4082
4175
|
eventListeners[Event.ROAP_FAILURE](fakeError);
|
|
4083
4176
|
|
|
4084
|
-
checkMetricSent(
|
|
4177
|
+
checkMetricSent('client.media-engine.remote-sdp-received', fakeError);
|
|
4085
4178
|
checkBehavioralMetricSent(
|
|
4086
4179
|
BEHAVIORAL_METRICS.PEERCONNECTION_FAILURE,
|
|
4087
4180
|
Errors.ErrorCode.SdpAnswerHandlingError,
|
|
@@ -4096,7 +4189,7 @@ describe('plugin-meetings', () => {
|
|
|
4096
4189
|
|
|
4097
4190
|
eventListeners[Event.ROAP_FAILURE](fakeError);
|
|
4098
4191
|
|
|
4099
|
-
checkMetricSent(
|
|
4192
|
+
checkMetricSent('client.media-engine.local-sdp-generated', fakeError);
|
|
4100
4193
|
// expectedMetadataType is the error name in this case
|
|
4101
4194
|
checkBehavioralMetricSent(
|
|
4102
4195
|
BEHAVIORAL_METRICS.INVALID_ICE_CANDIDATE,
|
|
@@ -4114,7 +4207,7 @@ describe('plugin-meetings', () => {
|
|
|
4114
4207
|
|
|
4115
4208
|
eventListeners[Event.ROAP_FAILURE](fakeError);
|
|
4116
4209
|
|
|
4117
|
-
checkMetricSent(
|
|
4210
|
+
checkMetricSent('client.media-engine.local-sdp-generated', fakeError);
|
|
4118
4211
|
// expectedMetadataType is the error name in this case
|
|
4119
4212
|
checkBehavioralMetricSent(
|
|
4120
4213
|
BEHAVIORAL_METRICS.INVALID_ICE_CANDIDATE,
|
|
@@ -4147,10 +4240,10 @@ describe('plugin-meetings', () => {
|
|
|
4147
4240
|
roapMessage: {messageType: 'OK', seq: 1},
|
|
4148
4241
|
});
|
|
4149
4242
|
|
|
4150
|
-
assert.calledOnce(
|
|
4151
|
-
assert.calledWithMatch(
|
|
4152
|
-
|
|
4153
|
-
meetingId: meeting.id,
|
|
4243
|
+
assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
|
|
4244
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
4245
|
+
name: 'client.media-engine.remote-sdp-received',
|
|
4246
|
+
options: {meetingId: meeting.id},
|
|
4154
4247
|
});
|
|
4155
4248
|
|
|
4156
4249
|
assert.calledOnce(sendRoapOKStub);
|
|
@@ -4171,10 +4264,10 @@ describe('plugin-meetings', () => {
|
|
|
4171
4264
|
},
|
|
4172
4265
|
});
|
|
4173
4266
|
|
|
4174
|
-
assert.calledOnce(
|
|
4175
|
-
assert.calledWithMatch(
|
|
4176
|
-
|
|
4177
|
-
meetingId: meeting.id,
|
|
4267
|
+
assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
|
|
4268
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
4269
|
+
name: 'client.media-engine.local-sdp-generated',
|
|
4270
|
+
options: {meetingId: meeting.id},
|
|
4178
4271
|
});
|
|
4179
4272
|
|
|
4180
4273
|
assert.calledOnce(sendRoapMediaRequestStub);
|
|
@@ -4197,10 +4290,10 @@ describe('plugin-meetings', () => {
|
|
|
4197
4290
|
},
|
|
4198
4291
|
});
|
|
4199
4292
|
|
|
4200
|
-
assert.calledOnce(
|
|
4201
|
-
assert.calledWithMatch(
|
|
4202
|
-
|
|
4203
|
-
meetingId: meeting.id,
|
|
4293
|
+
assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
|
|
4294
|
+
assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
|
|
4295
|
+
name: 'client.media-engine.remote-sdp-received',
|
|
4296
|
+
options: {meetingId: meeting.id},
|
|
4204
4297
|
});
|
|
4205
4298
|
|
|
4206
4299
|
assert.calledOnce(sendRoapAnswerStub);
|
|
@@ -6796,66 +6889,6 @@ describe('plugin-meetings', () => {
|
|
|
6796
6889
|
await testEmit(false);
|
|
6797
6890
|
});
|
|
6798
6891
|
});
|
|
6799
|
-
|
|
6800
|
-
describe('getAnalyzerMetricsPrePayload', () => {
|
|
6801
|
-
it('should have #getAnalyzerMetricsPrePayload', () => {
|
|
6802
|
-
assert.exists(meeting.getAnalyzerMetricsPrePayload);
|
|
6803
|
-
});
|
|
6804
|
-
|
|
6805
|
-
beforeEach(() => {
|
|
6806
|
-
meeting.meetingRequest.getAnalyzerMetricsPrePayload = sinon
|
|
6807
|
-
.stub()
|
|
6808
|
-
.returns(Promise.resolve());
|
|
6809
|
-
meeting.webex.internal = {services: {get: sinon.stub().returns('Locus URL')}};
|
|
6810
|
-
meeting.correlationId = 'correlation-id';
|
|
6811
|
-
});
|
|
6812
|
-
|
|
6813
|
-
it('it should include meetingLookupUrl if provided', () => {
|
|
6814
|
-
const res = meeting.getAnalyzerMetricsPrePayload({
|
|
6815
|
-
meetingLookupUrl: 'https://service-url.com',
|
|
6816
|
-
event: 'client.meetinginfo.response',
|
|
6817
|
-
});
|
|
6818
|
-
|
|
6819
|
-
assert.deepEqual(res.event, {
|
|
6820
|
-
canProceed: true,
|
|
6821
|
-
eventData: {
|
|
6822
|
-
webClientDomain: '',
|
|
6823
|
-
},
|
|
6824
|
-
identifiers: {
|
|
6825
|
-
correlationId: 'correlation-id',
|
|
6826
|
-
deviceId: uuid3,
|
|
6827
|
-
locusUrl: 'Locus URL',
|
|
6828
|
-
meetingLookupUrl: 'https://service-url.com',
|
|
6829
|
-
orgId: undefined,
|
|
6830
|
-
userId: uuid1,
|
|
6831
|
-
},
|
|
6832
|
-
name: 'client.meetinginfo.response',
|
|
6833
|
-
});
|
|
6834
|
-
|
|
6835
|
-
assert.deepEqual(res.origin, {
|
|
6836
|
-
channel: undefined,
|
|
6837
|
-
loginType: undefined,
|
|
6838
|
-
userType: undefined,
|
|
6839
|
-
clientInfo: {
|
|
6840
|
-
browser: '',
|
|
6841
|
-
browserVersion: '',
|
|
6842
|
-
clientType: undefined,
|
|
6843
|
-
clientVersion: 'webex-js-sdk/undefined',
|
|
6844
|
-
localNetworkPrefix: null,
|
|
6845
|
-
os: 'other',
|
|
6846
|
-
osVersion: getOSVersion() || 'unknown',
|
|
6847
|
-
subClientType: undefined,
|
|
6848
|
-
},
|
|
6849
|
-
name: 'endpoint',
|
|
6850
|
-
networkType: 'unknown',
|
|
6851
|
-
userAgent: 'webex-js-sdk/test-undefined client=undefined; (os=linux/5)',
|
|
6852
|
-
});
|
|
6853
|
-
|
|
6854
|
-
assert.deepEqual(res.senderCountryCode, undefined);
|
|
6855
|
-
assert.deepEqual(res.version, 1);
|
|
6856
|
-
|
|
6857
|
-
});
|
|
6858
|
-
});
|
|
6859
6892
|
});
|
|
6860
6893
|
});
|
|
6861
6894
|
});
|