From 3f537268e88ba6370ba2e48b354d1a84746b2944 Mon Sep 17 00:00:00 2001 From: Taymoor Khan Date: Mon, 6 Dec 2021 13:43:41 -0800 Subject: [PATCH] feat(meetings): add callInitiateJoinReq joinTime metric --- .../plugin-meetings/src/meeting/index.js | 56 +++++++++++++++++-- .../plugin-meetings/src/metrics/index.js | 9 +++ 2 files changed, 60 insertions(+), 5 deletions(-) diff --git a/packages/node_modules/@webex/plugin-meetings/src/meeting/index.js b/packages/node_modules/@webex/plugin-meetings/src/meeting/index.js index 70f67b618a2..1783c9d30d7 100644 --- a/packages/node_modules/@webex/plugin-meetings/src/meeting/index.js +++ b/packages/node_modules/@webex/plugin-meetings/src/meeting/index.js @@ -1075,6 +1075,15 @@ export default class Meeting extends StatelessWebexPlugin { }; } + const callInitiateJoinReq = this.getCallInitiateJoinReq(); + + if (callInitiateJoinReq) { + options.joinTimes = { + ...options.joinTimes, + callInitiateJoinReq + }; + } + if (options.type === MQA_STATS.CA_TYPE) { payload = Metrics.initMediaPayload(options.event, identifiers, options); } @@ -3381,12 +3390,13 @@ export default class Meeting extends StatelessWebexPlugin { } } - return MeetingUtil.joinMeetingOptions(this, options).then((join) => { - this.meetingFiniteStateMachine.join(); - LoggerProxy.logger.log('Meeting:index#join --> Success'); + return MeetingUtil.joinMeetingOptions(this, options) + .then((join) => { + this.meetingFiniteStateMachine.join(); + LoggerProxy.logger.log('Meeting:index#join --> Success'); - return join; - }) + return join; + }) .then((join) => { joinSuccess(join); this.deferJoin = undefined; @@ -5305,4 +5315,40 @@ export default class Meeting extends StatelessWebexPlugin { return undefined; } + + /** + * + * @returns {undefined} + */ + setStartCallInitiateJoinReq() { + this.startCallInitiateJoinReq = performance.now(); + this.endCallInitiateJoinReq = undefined; + } + + /** + * + * @returns {undefined} + */ + setEndCallInitiateJoinReq() { + this.endCallInitiateJoinReq = performance.now(); + } + + /** + * + * @returns {string} duration between call initiate and sending join request to locus + */ + getCallInitiateJoinReq() { + const start = this.startCallInitiateJoinReq; + const end = this.endCallInitiateJoinReq; + + if (start && end) { + const calculatedDelay = end - start; + + return calculatedDelay > METRICS_JOIN_TIMES_MAX_DURATION ? + undefined : + calculatedDelay; + } + + return undefined; + } } diff --git a/packages/node_modules/@webex/plugin-meetings/src/metrics/index.js b/packages/node_modules/@webex/plugin-meetings/src/metrics/index.js index 511e47ab21c..ff08bda0252 100644 --- a/packages/node_modules/@webex/plugin-meetings/src/metrics/index.js +++ b/packages/node_modules/@webex/plugin-meetings/src/metrics/index.js @@ -48,6 +48,12 @@ const getLocalNetworkPrefix = (localIp) => { const triggerTimers = ({event, meeting, data}) => { switch (event) { + case eventType.CALL_INITIATED: + meeting.setStartCallInitiateJoinReq(); + break; + case eventType.LOCUS_JOIN_REQUEST: + meeting.setEndCallInitiateJoinReq(); + break; case eventType.LOCUS_JOIN_RESPONSE: meeting.setStartSetupDelay(mediaType.AUDIO); meeting.setStartSetupDelay(mediaType.VIDEO); @@ -235,6 +241,9 @@ class Metrics { if (options.recoveredBy) { payload.event.recoveredBy = options.recoveredBy; } + if (options.joinTimes) { + payload.event.joinTimes = options.joinTimes; + } } return payload;