@webex/plugin-meetings 1.153.3 → 1.154.2
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/constants.js +13 -8
- package/dist/constants.js.map +1 -1
- package/dist/meeting/index.js +54 -41
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +24 -20
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +2 -1
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +8 -1
- package/dist/meetings/index.js.map +1 -1
- package/dist/metrics/config.js +3 -1
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/index.js +23 -9
- package/dist/metrics/index.js.map +1 -1
- package/dist/peer-connection-manager/index.js +22 -10
- package/dist/peer-connection-manager/index.js.map +1 -1
- package/dist/reconnection-manager/index.js +1 -1
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/handler.js +4 -4
- package/dist/roap/handler.js.map +1 -1
- package/package.json +5 -5
- package/src/constants.js +12 -6
- package/src/meeting/index.js +85 -68
- package/src/meeting/request.js +10 -5
- package/src/meeting/util.js +2 -1
- package/src/meetings/index.js +14 -3
- package/src/metrics/config.js +1 -0
- package/src/metrics/index.js +23 -9
- package/src/peer-connection-manager/index.js +29 -13
- package/src/reconnection-manager/index.js +3 -3
- package/src/roap/handler.js +5 -5
- package/test/unit/spec/meeting/index.js +20 -7
- package/test/unit/spec/meeting/request.js +53 -1
- package/test/unit/spec/meeting/utils.js +41 -0
- package/test/unit/spec/meetings/index.js +3 -1
- package/test/unit/spec/metrics/index.js +6 -6
- package/test/unit/spec/peerconnection-manager/index.js +5 -5
package/src/meeting/index.js
CHANGED
|
@@ -56,7 +56,7 @@ import {
|
|
|
56
56
|
MEETING_STATE,
|
|
57
57
|
MEETINGS,
|
|
58
58
|
METRICS_JOIN_TIMES_MAX_DURATION,
|
|
59
|
-
|
|
59
|
+
BEHAVIORAL_METRICS,
|
|
60
60
|
MQA_STATS,
|
|
61
61
|
NETWORK_STATUS,
|
|
62
62
|
ONLINE,
|
|
@@ -1057,8 +1057,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1057
1057
|
// https:// jira-eng-gpk2.cisco.com/jira/browse/SPARK-240520
|
|
1058
1058
|
// TODO: send custom parameter explaining why the inactivity happened
|
|
1059
1059
|
// refresh , no media or network got dsconnected or something else
|
|
1060
|
-
Metrics.
|
|
1061
|
-
|
|
1060
|
+
Metrics.sendBehavioralMetric(
|
|
1061
|
+
BEHAVIORAL_METRICS.DISCONNECT_DUE_TO_INACTIVITY,
|
|
1062
1062
|
{
|
|
1063
1063
|
correlation_id: this.correlationId,
|
|
1064
1064
|
locus_id: this.locusId
|
|
@@ -1950,8 +1950,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1950
1950
|
});
|
|
1951
1951
|
|
|
1952
1952
|
this.locusInfo.on(LOCUSINFO.EVENTS.MEDIA_INACTIVITY, () => {
|
|
1953
|
-
Metrics.
|
|
1954
|
-
|
|
1953
|
+
Metrics.sendBehavioralMetric(
|
|
1954
|
+
BEHAVIORAL_METRICS.MEETING_MEDIA_INACTIVE,
|
|
1955
1955
|
{
|
|
1956
1956
|
correlation_id: this.correlationId,
|
|
1957
1957
|
locus_id: this.locusId
|
|
@@ -2344,15 +2344,19 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2344
2344
|
* @memberof Meeting
|
|
2345
2345
|
*/
|
|
2346
2346
|
parseMeetingInfo(meetingInfo) {
|
|
2347
|
+
const webexMeetingInfo = meetingInfo?.body;
|
|
2348
|
+
|
|
2347
2349
|
// MeetingInfo will be undefined for 1:1 calls
|
|
2348
|
-
if (
|
|
2349
|
-
this.conversationUrl =
|
|
2350
|
-
this.locusUrl =
|
|
2351
|
-
this.setSipUri(this.config.experimental.enableUnifiedMeetings ?
|
|
2350
|
+
if (webexMeetingInfo && !(meetingInfo.errors && meetingInfo.errors.length > 0)) {
|
|
2351
|
+
this.conversationUrl = webexMeetingInfo.conversationUrl || this.conversationUrl;
|
|
2352
|
+
this.locusUrl = webexMeetingInfo.locusUrl || this.locusUrl;
|
|
2353
|
+
this.setSipUri(this.config.experimental.enableUnifiedMeetings ? webexMeetingInfo.sipUrl : webexMeetingInfo.sipMeetingUri || this.sipUri);
|
|
2352
2354
|
if (this.config.experimental.enableUnifiedMeetings) {
|
|
2353
|
-
this.meetingNumber =
|
|
2355
|
+
this.meetingNumber = webexMeetingInfo.meetingNumber;
|
|
2356
|
+
this.meetingJoinUrl = webexMeetingInfo.meetingJoinUrl;
|
|
2354
2357
|
}
|
|
2355
|
-
this.owner =
|
|
2358
|
+
this.owner = webexMeetingInfo.owner || webexMeetingInfo.hostId || this.owner;
|
|
2359
|
+
this.permissionToken = webexMeetingInfo.permissionToken;
|
|
2356
2360
|
}
|
|
2357
2361
|
}
|
|
2358
2362
|
|
|
@@ -2491,8 +2495,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2491
2495
|
}
|
|
2492
2496
|
else {
|
|
2493
2497
|
trackMediaID = null;
|
|
2494
|
-
Metrics.
|
|
2495
|
-
|
|
2498
|
+
Metrics.sendBehavioralMetric(
|
|
2499
|
+
BEHAVIORAL_METRICS.MUTE_AUDIO_FAILURE,
|
|
2496
2500
|
{
|
|
2497
2501
|
correlation_id: this.correlationId,
|
|
2498
2502
|
locus_id: this.locusUrl.split('/').pop()
|
|
@@ -2901,6 +2905,12 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2901
2905
|
event: eventType.MERCURY_CONNECTION_RESTORED,
|
|
2902
2906
|
meeting: this
|
|
2903
2907
|
});
|
|
2908
|
+
Metrics.sendBehavioralMetric(
|
|
2909
|
+
BEHAVIORAL_METRICS.MERCURY_CONNECTION_RESTORED,
|
|
2910
|
+
{
|
|
2911
|
+
correlation_id: this.correlationId
|
|
2912
|
+
}
|
|
2913
|
+
);
|
|
2904
2914
|
}
|
|
2905
2915
|
this.hasWebsocketConnected = true;
|
|
2906
2916
|
});
|
|
@@ -2911,8 +2921,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2911
2921
|
event: eventType.MERCURY_CONNECTION_LOST,
|
|
2912
2922
|
meeting: this
|
|
2913
2923
|
});
|
|
2914
|
-
Metrics.
|
|
2915
|
-
|
|
2924
|
+
Metrics.sendBehavioralMetric(
|
|
2925
|
+
BEHAVIORAL_METRICS.MERCURY_CONNECTION_FAILURE,
|
|
2916
2926
|
{
|
|
2917
2927
|
correlation_id: this.correlationId
|
|
2918
2928
|
}
|
|
@@ -2989,8 +2999,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2989
2999
|
data: {trigger: trigger.USER_INTERACTION, mediaType: mediaType.AUDIO}
|
|
2990
3000
|
});
|
|
2991
3001
|
}).catch((error) => {
|
|
2992
|
-
Metrics.
|
|
2993
|
-
|
|
3002
|
+
Metrics.sendBehavioralMetric(
|
|
3003
|
+
BEHAVIORAL_METRICS.MUTE_AUDIO_FAILURE,
|
|
2994
3004
|
{
|
|
2995
3005
|
correlation_id: this.correlationId,
|
|
2996
3006
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -3040,8 +3050,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3040
3050
|
data: {trigger: trigger.USER_INTERACTION, mediaType: mediaType.AUDIO}
|
|
3041
3051
|
});
|
|
3042
3052
|
}).catch((error) => {
|
|
3043
|
-
Metrics.
|
|
3044
|
-
|
|
3053
|
+
Metrics.sendBehavioralMetric(
|
|
3054
|
+
BEHAVIORAL_METRICS.UNMUTE_AUDIO_FAILURE,
|
|
3045
3055
|
{
|
|
3046
3056
|
correlation_id: this.correlationId,
|
|
3047
3057
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -3090,8 +3100,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3090
3100
|
data: {trigger: trigger.USER_INTERACTION, mediaType: mediaType.VIDEO}
|
|
3091
3101
|
});
|
|
3092
3102
|
}).catch((error) => {
|
|
3093
|
-
Metrics.
|
|
3094
|
-
|
|
3103
|
+
Metrics.sendBehavioralMetric(
|
|
3104
|
+
BEHAVIORAL_METRICS.MUTE_VIDEO_FAILURE,
|
|
3095
3105
|
{
|
|
3096
3106
|
correlation_id: this.correlationId,
|
|
3097
3107
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -3140,8 +3150,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3140
3150
|
data: {trigger: trigger.USER_INTERACTION, mediaType: mediaType.VIDEO}
|
|
3141
3151
|
});
|
|
3142
3152
|
}).catch((error) => {
|
|
3143
|
-
Metrics.
|
|
3144
|
-
|
|
3153
|
+
Metrics.sendBehavioralMetric(
|
|
3154
|
+
BEHAVIORAL_METRICS.UNMUTE_VIDEO_FAILURE,
|
|
3145
3155
|
{
|
|
3146
3156
|
correlation_id: this.correlationId,
|
|
3147
3157
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -3203,8 +3213,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3203
3213
|
.catch((error) => {
|
|
3204
3214
|
LoggerProxy.logger.error('Meeting:index#joinWithMedia --> ', error);
|
|
3205
3215
|
|
|
3206
|
-
Metrics.
|
|
3207
|
-
|
|
3216
|
+
Metrics.sendBehavioralMetric(
|
|
3217
|
+
BEHAVIORAL_METRICS.JOIN_WITH_MEDIA_FAILURE,
|
|
3208
3218
|
{
|
|
3209
3219
|
correlation_id: this.correlationId,
|
|
3210
3220
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -3293,8 +3303,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3293
3303
|
|
|
3294
3304
|
LoggerProxy.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);
|
|
3295
3305
|
|
|
3296
|
-
Metrics.
|
|
3297
|
-
|
|
3306
|
+
Metrics.sendBehavioralMetric(
|
|
3307
|
+
BEHAVIORAL_METRICS.MEETING_RECONNECT_FAILURE,
|
|
3298
3308
|
{
|
|
3299
3309
|
correlation_id: this.correlationId,
|
|
3300
3310
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -3359,8 +3369,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3359
3369
|
|
|
3360
3370
|
this.triggerStopReceivingTranscriptionEvent();
|
|
3361
3371
|
|
|
3362
|
-
Metrics.
|
|
3363
|
-
|
|
3372
|
+
Metrics.sendBehavioralMetric(
|
|
3373
|
+
BEHAVIORAL_METRICS.RECEIVE_TRANSCRIPTION_FAILURE,
|
|
3364
3374
|
{
|
|
3365
3375
|
correlation_id: this.correlationId,
|
|
3366
3376
|
reason: 'unexpected error: transcription LLM web socket connection error had occured.',
|
|
@@ -3423,8 +3433,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3423
3433
|
}
|
|
3424
3434
|
catch (error) {
|
|
3425
3435
|
LoggerProxy.logger.error(`Meeting:index#receiveTranscription --> ${error}`);
|
|
3426
|
-
Metrics.
|
|
3427
|
-
|
|
3436
|
+
Metrics.sendBehavioralMetric(
|
|
3437
|
+
BEHAVIORAL_METRICS.RECEIVE_TRANSCRIPTION_FAILURE,
|
|
3428
3438
|
{
|
|
3429
3439
|
correlation_id: this.correlationId,
|
|
3430
3440
|
reason: error.message,
|
|
@@ -3516,13 +3526,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3516
3526
|
data: {trigger: trigger.USER_INTERACTION}
|
|
3517
3527
|
});
|
|
3518
3528
|
|
|
3519
|
-
Metrics.sendOperationalMetric(
|
|
3520
|
-
METRICS_OPERATIONAL_MEASURES.JOIN_ATTEMPT,
|
|
3521
|
-
{
|
|
3522
|
-
correlation_id: this.correlationId
|
|
3523
|
-
}
|
|
3524
|
-
);
|
|
3525
|
-
|
|
3526
3529
|
LoggerProxy.logger.log('Meeting:index#join --> Joining a meeting');
|
|
3527
3530
|
|
|
3528
3531
|
if (this.meetingFiniteStateMachine.state === MEETING_STATE_MACHINE.STATES.ENDED) {
|
|
@@ -3593,6 +3596,12 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3593
3596
|
.then((join) => {
|
|
3594
3597
|
joinSuccess(join);
|
|
3595
3598
|
this.deferJoin = undefined;
|
|
3599
|
+
Metrics.sendBehavioralMetric(
|
|
3600
|
+
BEHAVIORAL_METRICS.JOIN_SUCCESS,
|
|
3601
|
+
{
|
|
3602
|
+
correlation_id: this.correlationId
|
|
3603
|
+
}
|
|
3604
|
+
);
|
|
3596
3605
|
|
|
3597
3606
|
return join;
|
|
3598
3607
|
}).then(async (join) => {
|
|
@@ -3616,8 +3625,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3616
3625
|
LoggerProxy.logger.error('Meeting:index#join --> Failed', error);
|
|
3617
3626
|
|
|
3618
3627
|
// TODO: change this to error codes and pre defined dictionary
|
|
3619
|
-
Metrics.
|
|
3620
|
-
|
|
3628
|
+
Metrics.sendBehavioralMetric(
|
|
3629
|
+
BEHAVIORAL_METRICS.JOIN_FAILURE,
|
|
3621
3630
|
{
|
|
3622
3631
|
correlation_id: this.correlationId,
|
|
3623
3632
|
reason: error.error?.message,
|
|
@@ -3690,8 +3699,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3690
3699
|
}).then((res) => {
|
|
3691
3700
|
this.locusInfo.onFullLocus(res.body.locus);
|
|
3692
3701
|
}).catch((error) => {
|
|
3693
|
-
Metrics.
|
|
3694
|
-
|
|
3702
|
+
Metrics.sendBehavioralMetric(
|
|
3703
|
+
BEHAVIORAL_METRICS.ADD_DIAL_IN_FAILURE,
|
|
3695
3704
|
{
|
|
3696
3705
|
correlation_id: this.correlationId,
|
|
3697
3706
|
dial_in_url: this.dialInUrl,
|
|
@@ -3729,8 +3738,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3729
3738
|
}).then((res) => {
|
|
3730
3739
|
this.locusInfo.onFullLocus(res.body.locus);
|
|
3731
3740
|
}).catch((error) => {
|
|
3732
|
-
Metrics.
|
|
3733
|
-
|
|
3741
|
+
Metrics.sendBehavioralMetric(
|
|
3742
|
+
BEHAVIORAL_METRICS.ADD_DIAL_OUT_FAILURE,
|
|
3734
3743
|
{
|
|
3735
3744
|
correlation_id: this.correlationId,
|
|
3736
3745
|
dial_out_url: this.dialOutUrl,
|
|
@@ -3956,10 +3965,10 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3956
3965
|
)
|
|
3957
3966
|
.catch((error) => {
|
|
3958
3967
|
// Whenever there is a failure when trying to access a user's device
|
|
3959
|
-
// report it as an
|
|
3968
|
+
// report it as an Behavioral metric
|
|
3960
3969
|
// This gives visibility into common errors and can help
|
|
3961
3970
|
// with further troubleshooting
|
|
3962
|
-
const metricName =
|
|
3971
|
+
const metricName = BEHAVIORAL_METRICS.GET_USER_MEDIA_FAILURE;
|
|
3963
3972
|
const data = {
|
|
3964
3973
|
correlation_id: this.correlationId,
|
|
3965
3974
|
locus_id: this.locusUrl?.split('/').pop(),
|
|
@@ -3970,7 +3979,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3970
3979
|
type: error.name
|
|
3971
3980
|
};
|
|
3972
3981
|
|
|
3973
|
-
Metrics.
|
|
3982
|
+
Metrics.sendBehavioralMetric(metricName, data, metadata);
|
|
3974
3983
|
throw new MediaError('Unable to retrieve media streams', error);
|
|
3975
3984
|
}));
|
|
3976
3985
|
}
|
|
@@ -4098,8 +4107,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4098
4107
|
.catch((error) => {
|
|
4099
4108
|
LoggerProxy.logger.error(`${LOG_HEADER} Error adding media , setting up peerconnection, `, error);
|
|
4100
4109
|
|
|
4101
|
-
Metrics.
|
|
4102
|
-
|
|
4110
|
+
Metrics.sendBehavioralMetric(
|
|
4111
|
+
BEHAVIORAL_METRICS.ADD_MEDIA_FAILURE,
|
|
4103
4112
|
{
|
|
4104
4113
|
correlation_id: this.correlationId,
|
|
4105
4114
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -4182,6 +4191,14 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4182
4191
|
this.floorGrantPending = true;
|
|
4183
4192
|
}
|
|
4184
4193
|
|
|
4194
|
+
Metrics.sendBehavioralMetric(
|
|
4195
|
+
BEHAVIORAL_METRICS.ADD_MEDIA_SUCCESS,
|
|
4196
|
+
{
|
|
4197
|
+
correlation_id: this.correlationId,
|
|
4198
|
+
locus_id: this.locusUrl.split('/').pop()
|
|
4199
|
+
}
|
|
4200
|
+
);
|
|
4201
|
+
|
|
4185
4202
|
return Promise.resolve();
|
|
4186
4203
|
}))
|
|
4187
4204
|
.catch((error) => {
|
|
@@ -4197,8 +4214,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4197
4214
|
|
|
4198
4215
|
LoggerProxy.logger.error(`${LOG_HEADER} Error adding media failed to initiate PC and send request, `, error);
|
|
4199
4216
|
|
|
4200
|
-
Metrics.
|
|
4201
|
-
|
|
4217
|
+
Metrics.sendBehavioralMetric(
|
|
4218
|
+
BEHAVIORAL_METRICS.ADD_MEDIA_FAILURE,
|
|
4202
4219
|
{
|
|
4203
4220
|
correlation_id: this.correlationId,
|
|
4204
4221
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -4351,8 +4368,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4351
4368
|
.catch((error) => {
|
|
4352
4369
|
LoggerProxy.logger.error(`${LOG_HEADER} Error updatedMedia, `, error);
|
|
4353
4370
|
|
|
4354
|
-
Metrics.
|
|
4355
|
-
|
|
4371
|
+
Metrics.sendBehavioralMetric(
|
|
4372
|
+
BEHAVIORAL_METRICS.UPDATE_MEDIA_FAILURE,
|
|
4356
4373
|
{
|
|
4357
4374
|
correlation_id: this.correlationId,
|
|
4358
4375
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -4750,8 +4767,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4750
4767
|
EVENTS.REQUEST_UPLOAD_LOGS,
|
|
4751
4768
|
this
|
|
4752
4769
|
);
|
|
4753
|
-
Metrics.
|
|
4754
|
-
|
|
4770
|
+
Metrics.sendBehavioralMetric(
|
|
4771
|
+
BEHAVIORAL_METRICS.MEETING_LEAVE_FAILURE,
|
|
4755
4772
|
{
|
|
4756
4773
|
correlation_id: this.correlationId,
|
|
4757
4774
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -4804,8 +4821,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4804
4821
|
.catch((error) => {
|
|
4805
4822
|
LoggerProxy.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
|
|
4806
4823
|
|
|
4807
|
-
Metrics.
|
|
4808
|
-
|
|
4824
|
+
Metrics.sendBehavioralMetric(
|
|
4825
|
+
BEHAVIORAL_METRICS.MEETING_START_WHITEBOARD_SHARE_FAILURE,
|
|
4809
4826
|
{
|
|
4810
4827
|
correlation_id: this.correlationId,
|
|
4811
4828
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -4844,8 +4861,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4844
4861
|
.catch((error) => {
|
|
4845
4862
|
LoggerProxy.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
|
|
4846
4863
|
|
|
4847
|
-
Metrics.
|
|
4848
|
-
|
|
4864
|
+
Metrics.sendBehavioralMetric(
|
|
4865
|
+
BEHAVIORAL_METRICS.STOP_WHITEBOARD_SHARE_FAILURE,
|
|
4849
4866
|
{
|
|
4850
4867
|
correlation_id: this.correlationId,
|
|
4851
4868
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -4891,8 +4908,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4891
4908
|
.catch((error) => {
|
|
4892
4909
|
LoggerProxy.logger.error('Meeting:index#share --> Error ', error);
|
|
4893
4910
|
|
|
4894
|
-
Metrics.
|
|
4895
|
-
|
|
4911
|
+
Metrics.sendBehavioralMetric(
|
|
4912
|
+
BEHAVIORAL_METRICS.MEETING_SHARE_FAILURE,
|
|
4896
4913
|
{
|
|
4897
4914
|
correlation_id: this.correlationId,
|
|
4898
4915
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -4954,8 +4971,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4954
4971
|
.catch((error) => {
|
|
4955
4972
|
LoggerProxy.logger.error('Meeting:index#stopFloorRequest --> Error ', error);
|
|
4956
4973
|
|
|
4957
|
-
Metrics.
|
|
4958
|
-
|
|
4974
|
+
Metrics.sendBehavioralMetric(
|
|
4975
|
+
BEHAVIORAL_METRICS.STOP_FLOOR_REQUEST_FAILURE,
|
|
4959
4976
|
{
|
|
4960
4977
|
correlation_id: this.correlationId,
|
|
4961
4978
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -5273,8 +5290,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5273
5290
|
|
|
5274
5291
|
LoggerProxy.logger.error(`Meeting:index#setMeetingQuality --> ${error.message}`);
|
|
5275
5292
|
|
|
5276
|
-
Metrics.
|
|
5277
|
-
|
|
5293
|
+
Metrics.sendBehavioralMetric(
|
|
5294
|
+
BEHAVIORAL_METRICS.SET_MEETING_QUALITY_FAILURE,
|
|
5278
5295
|
{
|
|
5279
5296
|
correlation_id: this.correlationId,
|
|
5280
5297
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -5317,13 +5334,13 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5317
5334
|
}))
|
|
5318
5335
|
.catch((error) => {
|
|
5319
5336
|
// Whenever there is a failure when trying to access a user's display
|
|
5320
|
-
// report it as an
|
|
5337
|
+
// report it as an Behavioral metric
|
|
5321
5338
|
// This gives visibility into common errors and can help
|
|
5322
5339
|
// with further troubleshooting
|
|
5323
5340
|
|
|
5324
5341
|
// This metrics will get erros for getDisplayMedia and share errors for now
|
|
5325
5342
|
// TODO: The getDisplayMedia errors need to be moved inside `media.getDisplayMedia`
|
|
5326
|
-
const metricName =
|
|
5343
|
+
const metricName = BEHAVIORAL_METRICS.GET_DISPLAY_MEDIA_FAILURE;
|
|
5327
5344
|
const data = {
|
|
5328
5345
|
correlation_id: this.correlationId,
|
|
5329
5346
|
locus_id: this.locusUrl.split('/').pop(),
|
|
@@ -5334,7 +5351,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
5334
5351
|
type: error.name
|
|
5335
5352
|
};
|
|
5336
5353
|
|
|
5337
|
-
Metrics.
|
|
5354
|
+
Metrics.sendBehavioralMetric(metricName, data, metadata);
|
|
5338
5355
|
throw new MediaError('Unable to retrieve display media stream', error);
|
|
5339
5356
|
});
|
|
5340
5357
|
}
|
package/src/meeting/request.js
CHANGED
|
@@ -50,8 +50,9 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
50
50
|
async joinMeeting(options) {
|
|
51
51
|
const {
|
|
52
52
|
asResourceOccupant,
|
|
53
|
-
|
|
53
|
+
inviteeAddress,
|
|
54
54
|
meetingNumber,
|
|
55
|
+
permissionToken,
|
|
55
56
|
deviceUrl,
|
|
56
57
|
locusUrl,
|
|
57
58
|
resourceId,
|
|
@@ -98,6 +99,10 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
98
99
|
body.moderator = moderator;
|
|
99
100
|
}
|
|
100
101
|
|
|
102
|
+
if (permissionToken) {
|
|
103
|
+
body.permissionToken = permissionToken;
|
|
104
|
+
}
|
|
105
|
+
|
|
101
106
|
if (pin !== undefined) {
|
|
102
107
|
body.pin = pin;
|
|
103
108
|
}
|
|
@@ -105,16 +110,16 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
105
110
|
if (locusUrl) {
|
|
106
111
|
url = `${locusUrl}/${PARTICIPANT}`;
|
|
107
112
|
}
|
|
108
|
-
else if (
|
|
113
|
+
else if (inviteeAddress || meetingNumber) {
|
|
109
114
|
try {
|
|
110
115
|
await this.webex.internal.services.waitForCatalog('postauth');
|
|
111
116
|
url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;
|
|
112
117
|
body.invitee = {
|
|
113
|
-
address:
|
|
118
|
+
address: inviteeAddress || `wbxmn:${meetingNumber}`
|
|
114
119
|
};
|
|
115
120
|
}
|
|
116
121
|
catch (e) {
|
|
117
|
-
LoggerProxy.logger.error(`Meeting:request#joinMeeting ${
|
|
122
|
+
LoggerProxy.logger.error(`Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`);
|
|
118
123
|
throw (e);
|
|
119
124
|
}
|
|
120
125
|
}
|
|
@@ -123,7 +128,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
123
128
|
// TODO: -- this will be resolved in SDK request
|
|
124
129
|
url = url.concat(`?${ALTERNATE_REDIRECT_TRUE}`);
|
|
125
130
|
|
|
126
|
-
if (resourceId ===
|
|
131
|
+
if (resourceId === inviteeAddress) {
|
|
127
132
|
body.callPreferences = {
|
|
128
133
|
requestedMedia: [_SLIDES_]
|
|
129
134
|
};
|
package/src/meeting/util.js
CHANGED
|
@@ -90,12 +90,13 @@ MeetingUtil.joinMeeting = (meeting, options) => {
|
|
|
90
90
|
// if Joining state termintate the request as user might click multiple times
|
|
91
91
|
return meeting.meetingRequest
|
|
92
92
|
.joinMeeting({
|
|
93
|
-
|
|
93
|
+
inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,
|
|
94
94
|
meetingNumber: meeting.meetingNumber,
|
|
95
95
|
deviceUrl: meeting.deviceUrl,
|
|
96
96
|
locusUrl: meeting.locusUrl,
|
|
97
97
|
correlationId: meeting.correlationId,
|
|
98
98
|
roapMessage: options.roapMessage,
|
|
99
|
+
permissionToken: meeting.permissionToken,
|
|
99
100
|
resourceId: options.resourceId || null,
|
|
100
101
|
moderator: options.moderator,
|
|
101
102
|
pin: options.pin,
|
package/src/meetings/index.js
CHANGED
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
MEETING_REMOVED_REASON,
|
|
39
39
|
_CONVERSATION_URL_,
|
|
40
40
|
CONVERSATION_URL,
|
|
41
|
-
|
|
41
|
+
BEHAVIORAL_METRICS
|
|
42
42
|
} from '../constants';
|
|
43
43
|
import MeetingInfo from '../meeting-info';
|
|
44
44
|
import MeetingInfoV2 from '../meeting-info/meeting-info-v2';
|
|
@@ -456,10 +456,21 @@ export default class Meetings extends WebexPlugin {
|
|
|
456
456
|
EVENT_TRIGGERS.MEETINGS_REGISTERED
|
|
457
457
|
);
|
|
458
458
|
this.registered = true;
|
|
459
|
+
Metrics.sendBehavioralMetric(
|
|
460
|
+
BEHAVIORAL_METRICS.MEETINGS_REGISTRATION_SUCCESS,
|
|
461
|
+
);
|
|
459
462
|
})
|
|
460
463
|
.catch((error) => {
|
|
461
464
|
LoggerProxy.logger.error(`Meetings:index#register --> ERROR, Unable to register, ${error.message}`);
|
|
462
465
|
|
|
466
|
+
Metrics.sendBehavioralMetric(
|
|
467
|
+
BEHAVIORAL_METRICS.MEETINGS_REGISTRATION_FAILED,
|
|
468
|
+
{
|
|
469
|
+
reason: error.message,
|
|
470
|
+
stack: error.stack
|
|
471
|
+
}
|
|
472
|
+
);
|
|
473
|
+
|
|
463
474
|
return Promise.reject(error);
|
|
464
475
|
});
|
|
465
476
|
}
|
|
@@ -542,8 +553,8 @@ export default class Meetings extends WebexPlugin {
|
|
|
542
553
|
}
|
|
543
554
|
);
|
|
544
555
|
|
|
545
|
-
Metrics.
|
|
546
|
-
|
|
556
|
+
Metrics.sendBehavioralMetric(
|
|
557
|
+
BEHAVIORAL_METRICS.UPLOAD_LOGS_FAILURE,
|
|
547
558
|
{
|
|
548
559
|
meetingId: options.meetingsId,
|
|
549
560
|
reason: uploadError.message,
|
package/src/metrics/config.js
CHANGED
package/src/metrics/index.js
CHANGED
|
@@ -14,7 +14,7 @@ import BrowserDetection from '../common/browser-detection';
|
|
|
14
14
|
|
|
15
15
|
import {
|
|
16
16
|
error, eventType, errorCodes as ERROR_CODE, OS_NAME, UNKNOWN, CLIENT_NAME,
|
|
17
|
-
mediaType
|
|
17
|
+
mediaType, PLATFORM
|
|
18
18
|
} from './config';
|
|
19
19
|
|
|
20
20
|
const OSMap = {
|
|
@@ -489,11 +489,11 @@ class Metrics {
|
|
|
489
489
|
}
|
|
490
490
|
|
|
491
491
|
/**
|
|
492
|
-
* Uploads given metric to the Metrics service as an
|
|
492
|
+
* Uploads given metric to the Metrics service as an Behavioral metric.
|
|
493
493
|
* Metadata about the environment such as browser, OS, SDK and their versions
|
|
494
494
|
* are automatically added when the metric is sent.
|
|
495
495
|
*
|
|
496
|
-
* The Metrics service will send an
|
|
496
|
+
* The Metrics service will send an Behavioral metric to InfluxDB for
|
|
497
497
|
* aggregation.
|
|
498
498
|
* See https://confluence-eng-gpk2.cisco.com/conf/display/WBXT/Getting+started+with+Metrics+Service.
|
|
499
499
|
*
|
|
@@ -503,12 +503,24 @@ class Metrics {
|
|
|
503
503
|
*
|
|
504
504
|
* @returns {void}
|
|
505
505
|
*/
|
|
506
|
-
|
|
506
|
+
sendBehavioralMetric(metricName, metricFields = {}, metricTags = {}) {
|
|
507
507
|
const fields = {
|
|
508
508
|
...metricFields,
|
|
509
509
|
browser_version: getBrowserVersion(),
|
|
510
510
|
os_version: getOSVersion(),
|
|
511
|
-
sdk_version: this.webex.version
|
|
511
|
+
sdk_version: this.webex.version,
|
|
512
|
+
platform: PLATFORM
|
|
513
|
+
};
|
|
514
|
+
|
|
515
|
+
const context = {
|
|
516
|
+
app: {
|
|
517
|
+
version: this.webex.version
|
|
518
|
+
},
|
|
519
|
+
locale: 'en-US',
|
|
520
|
+
os: {
|
|
521
|
+
name: getOSName(),
|
|
522
|
+
version: getOSVersion()
|
|
523
|
+
}
|
|
512
524
|
};
|
|
513
525
|
|
|
514
526
|
const tags = {
|
|
@@ -517,17 +529,19 @@ class Metrics {
|
|
|
517
529
|
org_id: this.webex.credentials.getOrgId(),
|
|
518
530
|
os: getOSName(),
|
|
519
531
|
domain: window.location.hostname,
|
|
520
|
-
client_id: this.webex.credentials.config.client_id
|
|
532
|
+
client_id: this.webex.credentials.config.client_id,
|
|
533
|
+
user_id: this.webex.internal.device.userId
|
|
521
534
|
};
|
|
522
535
|
|
|
523
536
|
if (!metricName) {
|
|
524
|
-
throw Error('Missing
|
|
537
|
+
throw Error('Missing behavioral metric name. Please provide one');
|
|
525
538
|
}
|
|
526
539
|
|
|
527
540
|
this.webex.internal.metrics.submitClientMetrics(metricName, {
|
|
528
|
-
type: ['operational'],
|
|
541
|
+
type: ['behavioral', 'operational'],
|
|
529
542
|
fields,
|
|
530
|
-
tags
|
|
543
|
+
tags,
|
|
544
|
+
context
|
|
531
545
|
});
|
|
532
546
|
}
|
|
533
547
|
}
|