@webex/internal-plugin-metrics 3.8.1-next.3 → 3.8.1-next.5
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 +49 -0
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.js +204 -49
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js +6 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
- package/dist/call-diagnostic/config.js +3 -1
- package/dist/call-diagnostic/config.js.map +1 -1
- package/dist/metrics.js +1 -1
- package/dist/metrics.types.js.map +1 -1
- package/dist/new-metrics.js +43 -1
- package/dist/new-metrics.js.map +1 -1
- package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +15 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +135 -5
- package/dist/types/call-diagnostic/config.d.ts +2 -0
- package/dist/types/metrics.types.d.ts +17 -6
- package/dist/types/new-metrics.d.ts +19 -2
- package/package.json +12 -12
- package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +58 -0
- package/src/call-diagnostic/call-diagnostic-metrics.ts +207 -26
- package/src/call-diagnostic/call-diagnostic-metrics.util.ts +6 -0
- package/src/call-diagnostic/config.ts +3 -0
- package/src/metrics.types.ts +22 -5
- package/src/new-metrics.ts +52 -1
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +20 -1
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +167 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +226 -11
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +6 -0
- package/test/unit/spec/new-metrics.ts +67 -2
- package/test/unit/spec/prelogin-metrics-batcher.ts +1 -0
|
@@ -359,6 +359,24 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
359
359
|
return undefined;
|
|
360
360
|
}
|
|
361
361
|
|
|
362
|
+
/**
|
|
363
|
+
* Click To Interstitial With User Delay
|
|
364
|
+
* @returns - latency
|
|
365
|
+
*/
|
|
366
|
+
}, {
|
|
367
|
+
key: "getClickToInterstitialWithUserDelay",
|
|
368
|
+
value: function getClickToInterstitialWithUserDelay() {
|
|
369
|
+
// for normal join (where green join button exists before interstitial, i.e reminder, space list etc)
|
|
370
|
+
if (this.latencyTimestamps.get('internal.client.meeting.click.joinbutton')) {
|
|
371
|
+
return this.getDiffBetweenTimestamps('internal.client.meeting.click.joinbutton', 'internal.client.meeting.interstitial-window.showed');
|
|
372
|
+
}
|
|
373
|
+
var clickToInterstitialWithUserDelayLatency = this.precomputedLatencies.get('internal.click.to.interstitial.with.user.delay');
|
|
374
|
+
if (typeof clickToInterstitialWithUserDelayLatency === 'number') {
|
|
375
|
+
return clickToInterstitialWithUserDelayLatency;
|
|
376
|
+
}
|
|
377
|
+
return undefined;
|
|
378
|
+
}
|
|
379
|
+
|
|
362
380
|
/**
|
|
363
381
|
* Interstitial To Join Ok
|
|
364
382
|
* @returns - latency
|
|
@@ -413,6 +431,21 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
413
431
|
return undefined;
|
|
414
432
|
}
|
|
415
433
|
|
|
434
|
+
/**
|
|
435
|
+
* Total JMT With User Delay
|
|
436
|
+
* @returns - latency
|
|
437
|
+
*/
|
|
438
|
+
}, {
|
|
439
|
+
key: "getTotalJMTWithUserDelay",
|
|
440
|
+
value: function getTotalJMTWithUserDelay() {
|
|
441
|
+
var clickToInterstitialWithUserDelay = this.getClickToInterstitialWithUserDelay();
|
|
442
|
+
var interstitialToJoinOk = this.getInterstitialToJoinOK();
|
|
443
|
+
if (typeof clickToInterstitialWithUserDelay === 'number' && typeof interstitialToJoinOk === 'number') {
|
|
444
|
+
return clickToInterstitialWithUserDelay + interstitialToJoinOk;
|
|
445
|
+
}
|
|
446
|
+
return undefined;
|
|
447
|
+
}
|
|
448
|
+
|
|
416
449
|
/**
|
|
417
450
|
* Join Conf JMT
|
|
418
451
|
* @returns - latency
|
|
@@ -450,6 +483,22 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
450
483
|
return undefined;
|
|
451
484
|
}
|
|
452
485
|
|
|
486
|
+
/**
|
|
487
|
+
* Total Media JMT With User Delay
|
|
488
|
+
* @returns - latency
|
|
489
|
+
*/
|
|
490
|
+
}, {
|
|
491
|
+
key: "getTotalMediaJMTWithUserDelay",
|
|
492
|
+
value: function getTotalMediaJMTWithUserDelay() {
|
|
493
|
+
var clickToInterstitialWithUserDelay = this.getClickToInterstitialWithUserDelay();
|
|
494
|
+
var interstitialToJoinOk = this.getInterstitialToJoinOK();
|
|
495
|
+
var joinConfJMT = this.getJoinConfJMT();
|
|
496
|
+
if (clickToInterstitialWithUserDelay && interstitialToJoinOk && joinConfJMT) {
|
|
497
|
+
return clickToInterstitialWithUserDelay + interstitialToJoinOk + joinConfJMT;
|
|
498
|
+
}
|
|
499
|
+
return undefined;
|
|
500
|
+
}
|
|
501
|
+
|
|
453
502
|
/**
|
|
454
503
|
* Client JMT
|
|
455
504
|
* @returns - latency
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","CallDiagnosticLatencies","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","latencyTimestamps","_map","precomputedLatencies","_createClass2","key","value","clearTimestamps","clear","setMeetingId","meetingId","getMeeting","webex","meetings","getBasicMeetingInformation","undefined","saveTimestamp","_ref","_ref$value","Date","getTime","_ref$options","options","saveFirstTimestampOnly","set","delete","saveLatency","accumulate","existingValue","get","measureLatency","callback","_this2","start","performance","now","finally","has","getDiffBetweenTimestamps","a","b","end","getMeetingInfoReqResp","getShowInterstitialTime","getU2CTime","u2cLatency","Math","floor","getRegisterWDMDeviceJMT","getCallInitJoinReq","getJoinReqResp","getTurnDiscoveryTime","getLocalSDPGenRemoteSDPRecv","getICESetupTime","getAudioICESetupTime","getVideoICESetupTime","getShareICESetupTime","getStayLobbyTime","getPageJMT","latency","getDownloadTimeJMT","getClickToInterstitial","clickToInterstitialLatency","getInterstitialToJoinOK","getCallInitMediaEngineReady","getInterstitialToMediaOKJMT","interstitialJoinClickTimestamp","connectedMedia","lobbyTimeLatency","lobbyTime","getTotalJMT","clickToInterstitial","interstitialToJoinOk","getJoinConfJMT","joinReqResp","ICESetupTime","getTotalMediaJMT","joinConfJMT","_this$getMeeting","totalMediaJMT","allowMediaInLobby","getClientJMT","getAudioJoinRespRxStart","getVideoJoinRespRxStart","getReachabilityClustersReqResp","reachablityClusterReqResp","getAudioJoinRespTxStart","getVideoJoinRespTxStart","getExchangeCITokenJMT","exchangeCITokenJMT","getRefreshCaptchaReqResp","refreshCaptchaReqResp","getDownloadIntelligenceModelsReqResp","downloadIntelligenceModelsReqResp","getOtherAppApiReqResp","otherAppApiJMT","WebexPlugin"],"sources":["call-diagnostic-metrics-latencies.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport {MetricEventNames, PreComputedLatencies} from '../metrics.types';\n\n// we only care about client event and feature event for now\n\n/**\n * @description Helper class to store latencies timestamp and to calculate various latencies for CA.\n * @exports\n * @class CallDiagnosticLatencies\n */\nexport default class CallDiagnosticLatencies extends WebexPlugin {\n latencyTimestamps: Map<MetricEventNames, number>;\n precomputedLatencies: Map<PreComputedLatencies, number>;\n // meetingId that the current latencies are for\n private meetingId?: string;\n\n /**\n * @constructor\n */\n constructor(...args) {\n super(...args);\n this.latencyTimestamps = new Map();\n this.precomputedLatencies = new Map();\n }\n\n /**\n * Clear timestamps\n */\n public clearTimestamps() {\n this.latencyTimestamps.clear();\n this.precomputedLatencies.clear();\n }\n\n /**\n * Associate current latencies with a meeting id\n * @param meetingId\n */\n private setMeetingId(meetingId: string) {\n this.meetingId = meetingId;\n }\n\n /**\n * Returns the meeting object associated with current latencies\n * @returns meeting object\n */\n private getMeeting() {\n if (this.meetingId) {\n // @ts-ignore\n return this.webex.meetings.getBasicMeetingInformation(this.meetingId);\n }\n\n return undefined;\n }\n\n /**\n * Store timestamp value\n * @param key - key\n * @param value - value\n * @param options - store options\n * @throws\n * @returns\n */\n public saveTimestamp({\n key,\n value = new Date().getTime(),\n options = {},\n }: {\n key: MetricEventNames;\n value?: number;\n options?: {meetingId?: string};\n }) {\n // save the meetingId so we can use the meeting object in latency calculations if needed\n const {meetingId} = options;\n if (meetingId) {\n this.setMeetingId(meetingId);\n }\n // for some events we're only interested in the first timestamp not last\n // as these events can happen multiple times\n if (\n key === 'client.media.rx.start' ||\n key === 'client.media.tx.start' ||\n key === 'internal.client.meetinginfo.request' ||\n key === 'internal.client.meetinginfo.response' ||\n key === 'client.media-engine.remote-sdp-received'\n ) {\n this.saveFirstTimestampOnly(key, value);\n } else {\n this.latencyTimestamps.set(key, value);\n // new offer/answer so reset the remote SDP timestamp\n if (key === 'client.media-engine.local-sdp-generated') {\n this.latencyTimestamps.delete('client.media-engine.remote-sdp-received');\n }\n }\n }\n\n /**\n * Store precomputed latency value\n * @param key - key\n * @param value - value\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @throws\n * @returns\n */\n public saveLatency(key: PreComputedLatencies, value: number, accumulate = false) {\n const existingValue = accumulate ? this.precomputedLatencies.get(key) || 0 : 0;\n this.precomputedLatencies.set(key, value + existingValue);\n }\n\n /**\n * Measure latency for a request\n * @param callback - callback for which you would like to measure latency\n * @param key - key\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @returns\n */\n public measureLatency(\n callback: () => Promise<unknown>,\n key: PreComputedLatencies,\n accumulate = false\n ) {\n const start = performance.now();\n\n return callback().finally(() => {\n this.saveLatency(key, performance.now() - start, accumulate);\n });\n }\n\n /**\n * Store only the first timestamp value for the given key\n * @param key - key\n * @param value -value\n * @throws\n * @returns\n */\n saveFirstTimestampOnly(key: MetricEventNames, value: number = new Date().getTime()) {\n if (this.latencyTimestamps.has(key)) {\n return;\n }\n this.latencyTimestamps.set(key, value);\n }\n\n /**\n * Helper to calculate end - start\n * @param a start\n * @param b end\n * @returns latency\n */\n public getDiffBetweenTimestamps(a: MetricEventNames, b: MetricEventNames) {\n const start = this.latencyTimestamps.get(a);\n const end = this.latencyTimestamps.get(b);\n\n if (typeof start === 'number' && typeof end === 'number') {\n return end - start;\n }\n\n return undefined;\n }\n\n /**\n * Meeting Info Request\n * @note Meeting Info request happen not just in the join phase. CA requires\n * metrics around meeting info request that are only part of join phase.\n * This internal.* event is used to track the real timestamps\n * (when the actual request/response happen). This is because the actual CA event is\n * sent inside the join method on the meeting object based on some logic, but that's not exactly when\n * those events are actually fired. The logic only confirms that they have happened, and we send them over.\n * @returns - latency\n */\n public getMeetingInfoReqResp() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meetinginfo.request',\n 'internal.client.meetinginfo.response'\n );\n }\n\n /**\n * Interstitial Time\n * @returns - latency\n */\n public getShowInterstitialTime() {\n return this.getDiffBetweenTimestamps(\n 'client.interstitial-window.start-launch',\n 'internal.client.interstitial-window.click.joinbutton'\n );\n }\n\n /**\n * getU2CTime\n * @returns - latency\n */\n public getU2CTime() {\n const u2cLatency = this.precomputedLatencies.get('internal.get.u2c.time');\n\n return typeof u2cLatency === 'number' ? Math.floor(u2cLatency) : undefined;\n }\n\n /**\n * Device Register Time\n * @returns - latency\n */\n public getRegisterWDMDeviceJMT() {\n return this.getDiffBetweenTimestamps(\n 'internal.register.device.request',\n 'internal.register.device.response'\n );\n }\n\n /**\n * Call Init Join Request\n * @returns - latency\n */\n public getCallInitJoinReq() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.request'\n );\n }\n\n /**\n * Locus Join Request\n * @returns - latency\n */\n public getJoinReqResp() {\n return this.getDiffBetweenTimestamps('client.locus.join.request', 'client.locus.join.response');\n }\n\n /**\n * Time taken to do turn discovery\n * @returns - latency\n */\n public getTurnDiscoveryTime() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.add-media.turn-discovery.start',\n 'internal.client.add-media.turn-discovery.end'\n );\n }\n\n /**\n * Local SDP Generated Remote SDP REceived\n * @returns - latency\n */\n public getLocalSDPGenRemoteSDPRecv() {\n return this.getDiffBetweenTimestamps(\n 'client.media-engine.local-sdp-generated',\n 'client.media-engine.remote-sdp-received'\n );\n }\n\n /**\n * ICE Setup Time\n * @returns - latency\n */\n public getICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Audio ICE time\n * @returns - latency\n */\n public getAudioICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Video ICE Time\n * @returns - latency\n */\n public getVideoICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Share ICE Time\n * @returns - latency\n */\n public getShareICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Stay Lobby Time\n * @returns - latency\n */\n public getStayLobbyTime() {\n return this.getDiffBetweenTimestamps(\n 'client.locus.join.response',\n 'internal.host.meeting.participant.admitted'\n );\n }\n\n /**\n * Page JMT\n * @returns - latency\n */\n public getPageJMT() {\n const latency = this.precomputedLatencies.get('internal.client.pageJMT');\n\n return typeof latency === 'number' ? latency : undefined;\n }\n\n /**\n * Download Time JMT\n * @returns - latency\n */\n public getDownloadTimeJMT() {\n const latency = this.precomputedLatencies.get('internal.download.time');\n\n return typeof latency === 'number' ? latency : undefined;\n }\n\n /**\n * Click To Interstitial\n * @returns - latency\n */\n public getClickToInterstitial() {\n // for normal join (where green join button exists before interstitial, i.e reminder, space list etc)\n if (this.latencyTimestamps.get('internal.client.meeting.click.joinbutton')) {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'internal.client.meeting.interstitial-window.showed'\n );\n }\n\n const clickToInterstitialLatency = this.precomputedLatencies.get(\n 'internal.click.to.interstitial'\n );\n\n if (typeof clickToInterstitialLatency === 'number') {\n return clickToInterstitialLatency;\n }\n\n return undefined;\n }\n\n /**\n * Interstitial To Join Ok\n * @returns - latency\n */\n public getInterstitialToJoinOK() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.response'\n );\n }\n\n /**\n * Call Init To MediaEngineReady\n * @returns - latency\n */\n public getCallInitMediaEngineReady() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.media-engine.ready'\n );\n }\n\n /**\n * Interstitial To Media Ok\n * @returns - latency\n */\n public getInterstitialToMediaOKJMT() {\n const interstitialJoinClickTimestamp = this.latencyTimestamps.get(\n 'internal.client.interstitial-window.click.joinbutton'\n );\n\n // get the first timestamp\n const connectedMedia = this.latencyTimestamps.get('client.ice.end');\n\n const lobbyTimeLatency = this.getStayLobbyTime();\n const lobbyTime = typeof lobbyTimeLatency === 'number' ? lobbyTimeLatency : 0;\n\n if (interstitialJoinClickTimestamp && connectedMedia) {\n return connectedMedia - interstitialJoinClickTimestamp - lobbyTime;\n }\n\n return undefined;\n }\n\n /**\n * Total JMT\n * @returns - latency\n */\n public getTotalJMT() {\n const clickToInterstitial = this.getClickToInterstitial();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n\n if (typeof clickToInterstitial === 'number' && typeof interstitialToJoinOk === 'number') {\n return clickToInterstitial + interstitialToJoinOk;\n }\n\n return undefined;\n }\n\n /**\n * Join Conf JMT\n * @returns - latency\n */\n public getJoinConfJMT() {\n const joinReqResp = this.getJoinReqResp();\n const ICESetupTime = this.getICESetupTime();\n\n if (joinReqResp && ICESetupTime) {\n return joinReqResp + ICESetupTime;\n }\n\n return undefined;\n }\n\n /**\n * Total Media JMT\n * @returns - latency\n */\n public getTotalMediaJMT() {\n const clickToInterstitial = this.getClickToInterstitial();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n const lobbyTime = this.getStayLobbyTime();\n\n if (clickToInterstitial && interstitialToJoinOk && joinConfJMT) {\n const totalMediaJMT = clickToInterstitial + interstitialToJoinOk + joinConfJMT;\n if (this.getMeeting()?.allowMediaInLobby) {\n return totalMediaJMT;\n }\n\n return totalMediaJMT - lobbyTime;\n }\n\n return undefined;\n }\n\n /**\n * Client JMT\n * @returns - latency\n */\n public getClientJMT() {\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n\n if (typeof interstitialToJoinOk === 'number' && typeof joinConfJMT === 'number') {\n return interstitialToJoinOk - joinConfJMT;\n }\n\n return undefined;\n }\n\n /**\n * Audio setup delay receive\n */\n public getAudioJoinRespRxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.rx.start');\n }\n\n /**\n * Video setup delay receive\n */\n public getVideoJoinRespRxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.rx.start');\n }\n\n /**\n * Total latency for all get cluster request.\n */\n public getReachabilityClustersReqResp() {\n const reachablityClusterReqResp = this.precomputedLatencies.get('internal.get.cluster.time');\n\n return typeof reachablityClusterReqResp === 'number'\n ? Math.floor(reachablityClusterReqResp)\n : undefined;\n }\n\n /**\n * Audio setup delay transmit\n */\n public getAudioJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Video setup delay transmit\n */\n public getVideoJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Total latency for all exchange ci token.\n */\n public getExchangeCITokenJMT() {\n const exchangeCITokenJMT = this.precomputedLatencies.get('internal.exchange.ci.token.time');\n\n return typeof exchangeCITokenJMT === 'number' ? Math.floor(exchangeCITokenJMT) : undefined;\n }\n\n /**\n * Total latency for all refresh captcha requests.\n */\n public getRefreshCaptchaReqResp() {\n const refreshCaptchaReqResp = this.precomputedLatencies.get('internal.refresh.captcha.time');\n\n return typeof refreshCaptchaReqResp === 'number'\n ? Math.floor(refreshCaptchaReqResp)\n : undefined;\n }\n\n /**\n * Get the latency for downloading intelligence models.\n * @returns - latency\n */\n public getDownloadIntelligenceModelsReqResp() {\n const downloadIntelligenceModelsReqResp = this.precomputedLatencies.get(\n 'internal.api.fetch.intelligence.models'\n );\n\n return typeof downloadIntelligenceModelsReqResp === 'number'\n ? Math.floor(downloadIntelligenceModelsReqResp)\n : undefined;\n }\n\n /**\n * Get the total latency for all other app API requests.\n * Excludes meeting info, because it's measured separately.\n * @returns - latency\n */\n public getOtherAppApiReqResp() {\n const otherAppApiJMT = this.precomputedLatencies.get('internal.other.app.api.time');\n\n return otherAppApiJMT > 0 ? Math.floor(otherAppApiJMT) : undefined;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","CallDiagnosticLatencies","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","latencyTimestamps","_map","precomputedLatencies","_createClass2","key","value","clearTimestamps","clear","setMeetingId","meetingId","getMeeting","webex","meetings","getBasicMeetingInformation","undefined","saveTimestamp","_ref","_ref$value","Date","getTime","_ref$options","options","saveFirstTimestampOnly","set","delete","saveLatency","accumulate","existingValue","get","measureLatency","callback","_this2","start","performance","now","finally","has","getDiffBetweenTimestamps","a","b","end","getMeetingInfoReqResp","getShowInterstitialTime","getU2CTime","u2cLatency","Math","floor","getRegisterWDMDeviceJMT","getCallInitJoinReq","getJoinReqResp","getTurnDiscoveryTime","getLocalSDPGenRemoteSDPRecv","getICESetupTime","getAudioICESetupTime","getVideoICESetupTime","getShareICESetupTime","getStayLobbyTime","getPageJMT","latency","getDownloadTimeJMT","getClickToInterstitial","clickToInterstitialLatency","getClickToInterstitialWithUserDelay","clickToInterstitialWithUserDelayLatency","getInterstitialToJoinOK","getCallInitMediaEngineReady","getInterstitialToMediaOKJMT","interstitialJoinClickTimestamp","connectedMedia","lobbyTimeLatency","lobbyTime","getTotalJMT","clickToInterstitial","interstitialToJoinOk","getTotalJMTWithUserDelay","clickToInterstitialWithUserDelay","getJoinConfJMT","joinReqResp","ICESetupTime","getTotalMediaJMT","joinConfJMT","_this$getMeeting","totalMediaJMT","allowMediaInLobby","getTotalMediaJMTWithUserDelay","getClientJMT","getAudioJoinRespRxStart","getVideoJoinRespRxStart","getReachabilityClustersReqResp","reachablityClusterReqResp","getAudioJoinRespTxStart","getVideoJoinRespTxStart","getExchangeCITokenJMT","exchangeCITokenJMT","getRefreshCaptchaReqResp","refreshCaptchaReqResp","getDownloadIntelligenceModelsReqResp","downloadIntelligenceModelsReqResp","getOtherAppApiReqResp","otherAppApiJMT","WebexPlugin"],"sources":["call-diagnostic-metrics-latencies.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport {MetricEventNames, PreComputedLatencies} from '../metrics.types';\n\n// we only care about client event and feature event for now\n\n/**\n * @description Helper class to store latencies timestamp and to calculate various latencies for CA.\n * @exports\n * @class CallDiagnosticLatencies\n */\nexport default class CallDiagnosticLatencies extends WebexPlugin {\n latencyTimestamps: Map<MetricEventNames, number>;\n precomputedLatencies: Map<PreComputedLatencies, number>;\n // meetingId that the current latencies are for\n private meetingId?: string;\n\n /**\n * @constructor\n */\n constructor(...args) {\n super(...args);\n this.latencyTimestamps = new Map();\n this.precomputedLatencies = new Map();\n }\n\n /**\n * Clear timestamps\n */\n public clearTimestamps() {\n this.latencyTimestamps.clear();\n this.precomputedLatencies.clear();\n }\n\n /**\n * Associate current latencies with a meeting id\n * @param meetingId\n */\n private setMeetingId(meetingId: string) {\n this.meetingId = meetingId;\n }\n\n /**\n * Returns the meeting object associated with current latencies\n * @returns meeting object\n */\n private getMeeting() {\n if (this.meetingId) {\n // @ts-ignore\n return this.webex.meetings.getBasicMeetingInformation(this.meetingId);\n }\n\n return undefined;\n }\n\n /**\n * Store timestamp value\n * @param key - key\n * @param value - value\n * @param options - store options\n * @throws\n * @returns\n */\n public saveTimestamp({\n key,\n value = new Date().getTime(),\n options = {},\n }: {\n key: MetricEventNames;\n value?: number;\n options?: {meetingId?: string};\n }) {\n // save the meetingId so we can use the meeting object in latency calculations if needed\n const {meetingId} = options;\n if (meetingId) {\n this.setMeetingId(meetingId);\n }\n // for some events we're only interested in the first timestamp not last\n // as these events can happen multiple times\n if (\n key === 'client.media.rx.start' ||\n key === 'client.media.tx.start' ||\n key === 'internal.client.meetinginfo.request' ||\n key === 'internal.client.meetinginfo.response' ||\n key === 'client.media-engine.remote-sdp-received'\n ) {\n this.saveFirstTimestampOnly(key, value);\n } else {\n this.latencyTimestamps.set(key, value);\n // new offer/answer so reset the remote SDP timestamp\n if (key === 'client.media-engine.local-sdp-generated') {\n this.latencyTimestamps.delete('client.media-engine.remote-sdp-received');\n }\n }\n }\n\n /**\n * Store precomputed latency value\n * @param key - key\n * @param value - value\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @throws\n * @returns\n */\n public saveLatency(key: PreComputedLatencies, value: number, accumulate = false) {\n const existingValue = accumulate ? this.precomputedLatencies.get(key) || 0 : 0;\n this.precomputedLatencies.set(key, value + existingValue);\n }\n\n /**\n * Measure latency for a request\n * @param callback - callback for which you would like to measure latency\n * @param key - key\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @returns\n */\n public measureLatency(\n callback: () => Promise<unknown>,\n key: PreComputedLatencies,\n accumulate = false\n ) {\n const start = performance.now();\n\n return callback().finally(() => {\n this.saveLatency(key, performance.now() - start, accumulate);\n });\n }\n\n /**\n * Store only the first timestamp value for the given key\n * @param key - key\n * @param value -value\n * @throws\n * @returns\n */\n saveFirstTimestampOnly(key: MetricEventNames, value: number = new Date().getTime()) {\n if (this.latencyTimestamps.has(key)) {\n return;\n }\n this.latencyTimestamps.set(key, value);\n }\n\n /**\n * Helper to calculate end - start\n * @param a start\n * @param b end\n * @returns latency\n */\n public getDiffBetweenTimestamps(a: MetricEventNames, b: MetricEventNames) {\n const start = this.latencyTimestamps.get(a);\n const end = this.latencyTimestamps.get(b);\n\n if (typeof start === 'number' && typeof end === 'number') {\n return end - start;\n }\n\n return undefined;\n }\n\n /**\n * Meeting Info Request\n * @note Meeting Info request happen not just in the join phase. CA requires\n * metrics around meeting info request that are only part of join phase.\n * This internal.* event is used to track the real timestamps\n * (when the actual request/response happen). This is because the actual CA event is\n * sent inside the join method on the meeting object based on some logic, but that's not exactly when\n * those events are actually fired. The logic only confirms that they have happened, and we send them over.\n * @returns - latency\n */\n public getMeetingInfoReqResp() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meetinginfo.request',\n 'internal.client.meetinginfo.response'\n );\n }\n\n /**\n * Interstitial Time\n * @returns - latency\n */\n public getShowInterstitialTime() {\n return this.getDiffBetweenTimestamps(\n 'client.interstitial-window.start-launch',\n 'internal.client.interstitial-window.click.joinbutton'\n );\n }\n\n /**\n * getU2CTime\n * @returns - latency\n */\n public getU2CTime() {\n const u2cLatency = this.precomputedLatencies.get('internal.get.u2c.time');\n\n return typeof u2cLatency === 'number' ? Math.floor(u2cLatency) : undefined;\n }\n\n /**\n * Device Register Time\n * @returns - latency\n */\n public getRegisterWDMDeviceJMT() {\n return this.getDiffBetweenTimestamps(\n 'internal.register.device.request',\n 'internal.register.device.response'\n );\n }\n\n /**\n * Call Init Join Request\n * @returns - latency\n */\n public getCallInitJoinReq() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.request'\n );\n }\n\n /**\n * Locus Join Request\n * @returns - latency\n */\n public getJoinReqResp() {\n return this.getDiffBetweenTimestamps('client.locus.join.request', 'client.locus.join.response');\n }\n\n /**\n * Time taken to do turn discovery\n * @returns - latency\n */\n public getTurnDiscoveryTime() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.add-media.turn-discovery.start',\n 'internal.client.add-media.turn-discovery.end'\n );\n }\n\n /**\n * Local SDP Generated Remote SDP REceived\n * @returns - latency\n */\n public getLocalSDPGenRemoteSDPRecv() {\n return this.getDiffBetweenTimestamps(\n 'client.media-engine.local-sdp-generated',\n 'client.media-engine.remote-sdp-received'\n );\n }\n\n /**\n * ICE Setup Time\n * @returns - latency\n */\n public getICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Audio ICE time\n * @returns - latency\n */\n public getAudioICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Video ICE Time\n * @returns - latency\n */\n public getVideoICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Share ICE Time\n * @returns - latency\n */\n public getShareICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Stay Lobby Time\n * @returns - latency\n */\n public getStayLobbyTime() {\n return this.getDiffBetweenTimestamps(\n 'client.locus.join.response',\n 'internal.host.meeting.participant.admitted'\n );\n }\n\n /**\n * Page JMT\n * @returns - latency\n */\n public getPageJMT() {\n const latency = this.precomputedLatencies.get('internal.client.pageJMT');\n\n return typeof latency === 'number' ? latency : undefined;\n }\n\n /**\n * Download Time JMT\n * @returns - latency\n */\n public getDownloadTimeJMT() {\n const latency = this.precomputedLatencies.get('internal.download.time');\n\n return typeof latency === 'number' ? latency : undefined;\n }\n\n /**\n * Click To Interstitial\n * @returns - latency\n */\n public getClickToInterstitial() {\n // for normal join (where green join button exists before interstitial, i.e reminder, space list etc)\n if (this.latencyTimestamps.get('internal.client.meeting.click.joinbutton')) {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'internal.client.meeting.interstitial-window.showed'\n );\n }\n\n const clickToInterstitialLatency = this.precomputedLatencies.get(\n 'internal.click.to.interstitial'\n );\n\n if (typeof clickToInterstitialLatency === 'number') {\n return clickToInterstitialLatency;\n }\n\n return undefined;\n }\n\n /**\n * Click To Interstitial With User Delay\n * @returns - latency\n */\n public getClickToInterstitialWithUserDelay() {\n // for normal join (where green join button exists before interstitial, i.e reminder, space list etc)\n if (this.latencyTimestamps.get('internal.client.meeting.click.joinbutton')) {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'internal.client.meeting.interstitial-window.showed'\n );\n }\n\n const clickToInterstitialWithUserDelayLatency = this.precomputedLatencies.get(\n 'internal.click.to.interstitial.with.user.delay'\n );\n\n if (typeof clickToInterstitialWithUserDelayLatency === 'number') {\n return clickToInterstitialWithUserDelayLatency;\n }\n\n return undefined;\n }\n\n /**\n * Interstitial To Join Ok\n * @returns - latency\n */\n public getInterstitialToJoinOK() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.response'\n );\n }\n\n /**\n * Call Init To MediaEngineReady\n * @returns - latency\n */\n public getCallInitMediaEngineReady() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.media-engine.ready'\n );\n }\n\n /**\n * Interstitial To Media Ok\n * @returns - latency\n */\n public getInterstitialToMediaOKJMT() {\n const interstitialJoinClickTimestamp = this.latencyTimestamps.get(\n 'internal.client.interstitial-window.click.joinbutton'\n );\n\n // get the first timestamp\n const connectedMedia = this.latencyTimestamps.get('client.ice.end');\n\n const lobbyTimeLatency = this.getStayLobbyTime();\n const lobbyTime = typeof lobbyTimeLatency === 'number' ? lobbyTimeLatency : 0;\n\n if (interstitialJoinClickTimestamp && connectedMedia) {\n return connectedMedia - interstitialJoinClickTimestamp - lobbyTime;\n }\n\n return undefined;\n }\n\n /**\n * Total JMT\n * @returns - latency\n */\n public getTotalJMT() {\n const clickToInterstitial = this.getClickToInterstitial();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n\n if (typeof clickToInterstitial === 'number' && typeof interstitialToJoinOk === 'number') {\n return clickToInterstitial + interstitialToJoinOk;\n }\n\n return undefined;\n }\n\n /**\n * Total JMT With User Delay\n * @returns - latency\n */\n public getTotalJMTWithUserDelay() {\n const clickToInterstitialWithUserDelay = this.getClickToInterstitialWithUserDelay();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n\n if (\n typeof clickToInterstitialWithUserDelay === 'number' &&\n typeof interstitialToJoinOk === 'number'\n ) {\n return clickToInterstitialWithUserDelay + interstitialToJoinOk;\n }\n\n return undefined;\n }\n\n /**\n * Join Conf JMT\n * @returns - latency\n */\n public getJoinConfJMT() {\n const joinReqResp = this.getJoinReqResp();\n const ICESetupTime = this.getICESetupTime();\n\n if (joinReqResp && ICESetupTime) {\n return joinReqResp + ICESetupTime;\n }\n\n return undefined;\n }\n\n /**\n * Total Media JMT\n * @returns - latency\n */\n public getTotalMediaJMT() {\n const clickToInterstitial = this.getClickToInterstitial();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n const lobbyTime = this.getStayLobbyTime();\n\n if (clickToInterstitial && interstitialToJoinOk && joinConfJMT) {\n const totalMediaJMT = clickToInterstitial + interstitialToJoinOk + joinConfJMT;\n if (this.getMeeting()?.allowMediaInLobby) {\n return totalMediaJMT;\n }\n\n return totalMediaJMT - lobbyTime;\n }\n\n return undefined;\n }\n\n /**\n * Total Media JMT With User Delay\n * @returns - latency\n */\n public getTotalMediaJMTWithUserDelay() {\n const clickToInterstitialWithUserDelay = this.getClickToInterstitialWithUserDelay();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n\n if (clickToInterstitialWithUserDelay && interstitialToJoinOk && joinConfJMT) {\n return clickToInterstitialWithUserDelay + interstitialToJoinOk + joinConfJMT;\n }\n\n return undefined;\n }\n\n /**\n * Client JMT\n * @returns - latency\n */\n public getClientJMT() {\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n\n if (typeof interstitialToJoinOk === 'number' && typeof joinConfJMT === 'number') {\n return interstitialToJoinOk - joinConfJMT;\n }\n\n return undefined;\n }\n\n /**\n * Audio setup delay receive\n */\n public getAudioJoinRespRxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.rx.start');\n }\n\n /**\n * Video setup delay receive\n */\n public getVideoJoinRespRxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.rx.start');\n }\n\n /**\n * Total latency for all get cluster request.\n */\n public getReachabilityClustersReqResp() {\n const reachablityClusterReqResp = this.precomputedLatencies.get('internal.get.cluster.time');\n\n return typeof reachablityClusterReqResp === 'number'\n ? Math.floor(reachablityClusterReqResp)\n : undefined;\n }\n\n /**\n * Audio setup delay transmit\n */\n public getAudioJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Video setup delay transmit\n */\n public getVideoJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Total latency for all exchange ci token.\n */\n public getExchangeCITokenJMT() {\n const exchangeCITokenJMT = this.precomputedLatencies.get('internal.exchange.ci.token.time');\n\n return typeof exchangeCITokenJMT === 'number' ? Math.floor(exchangeCITokenJMT) : undefined;\n }\n\n /**\n * Total latency for all refresh captcha requests.\n */\n public getRefreshCaptchaReqResp() {\n const refreshCaptchaReqResp = this.precomputedLatencies.get('internal.refresh.captcha.time');\n\n return typeof refreshCaptchaReqResp === 'number'\n ? Math.floor(refreshCaptchaReqResp)\n : undefined;\n }\n\n /**\n * Get the latency for downloading intelligence models.\n * @returns - latency\n */\n public getDownloadIntelligenceModelsReqResp() {\n const downloadIntelligenceModelsReqResp = this.precomputedLatencies.get(\n 'internal.api.fetch.intelligence.models'\n );\n\n return typeof downloadIntelligenceModelsReqResp === 'number'\n ? Math.floor(downloadIntelligenceModelsReqResp)\n : undefined;\n }\n\n /**\n * Get the total latency for all other app API requests.\n * Excludes meeting info, because it's measured separately.\n * @returns - latency\n */\n public getOtherAppApiReqResp() {\n const otherAppApiJMT = this.precomputedLatencies.get('internal.other.app.api.time');\n\n return otherAppApiJMT > 0 ? Math.floor(otherAppApiJMT) : undefined;\n }\n}\n"],"mappings":"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"}
|
|
@@ -72,6 +72,7 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
72
72
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasLoggedBrowserSerial", void 0);
|
|
73
73
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "device", void 0);
|
|
74
74
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "delayedClientEvents", []);
|
|
75
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "delayedClientFeatureEvents", []);
|
|
75
76
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "eventErrorCache", new _weakMap.default());
|
|
76
77
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isMercuryConnected", false);
|
|
77
78
|
// the default validator before piping an event to the batcher
|
|
@@ -388,14 +389,91 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
388
389
|
}
|
|
389
390
|
|
|
390
391
|
/**
|
|
391
|
-
*
|
|
392
|
+
* Create feature event
|
|
393
|
+
* @param name
|
|
394
|
+
* @param payload
|
|
395
|
+
* @param options
|
|
396
|
+
* @returns
|
|
397
|
+
*/
|
|
398
|
+
}, {
|
|
399
|
+
key: "prepareClientFeatureEvent",
|
|
400
|
+
value: function prepareClientFeatureEvent(_ref3) {
|
|
401
|
+
var name = _ref3.name,
|
|
402
|
+
payload = _ref3.payload,
|
|
403
|
+
options = _ref3.options;
|
|
404
|
+
var meetingId = options.meetingId,
|
|
405
|
+
correlationId = options.correlationId;
|
|
406
|
+
var featureEventObject;
|
|
407
|
+
|
|
408
|
+
// events that will most likely happen in join phase
|
|
409
|
+
if (meetingId) {
|
|
410
|
+
featureEventObject = this.createFeatureEventObjectInMeeting({
|
|
411
|
+
name: name,
|
|
412
|
+
options: options
|
|
413
|
+
});
|
|
414
|
+
} else {
|
|
415
|
+
throw new Error('Not implemented');
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// merge any new properties, or override existing ones
|
|
419
|
+
featureEventObject = (0, _lodash.merge)(featureEventObject, payload);
|
|
420
|
+
|
|
421
|
+
// append client event data to the call diagnostic event
|
|
422
|
+
var featureEvent = this.prepareDiagnosticEvent(featureEventObject, options);
|
|
423
|
+
return featureEvent;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/**
|
|
392
427
|
* Submit Feature Event
|
|
428
|
+
* submit to business_ucf
|
|
393
429
|
* @returns
|
|
394
430
|
*/
|
|
395
431
|
}, {
|
|
396
432
|
key: "submitFeatureEvent",
|
|
397
|
-
value: function submitFeatureEvent() {
|
|
398
|
-
|
|
433
|
+
value: function submitFeatureEvent(_ref4) {
|
|
434
|
+
var name = _ref4.name,
|
|
435
|
+
payload = _ref4.payload,
|
|
436
|
+
options = _ref4.options,
|
|
437
|
+
delaySubmitEvent = _ref4.delaySubmitEvent;
|
|
438
|
+
if (delaySubmitEvent) {
|
|
439
|
+
// Preserve the time when the event was triggered if delaying the submission to Call Features
|
|
440
|
+
var delayedOptions = _objectSpread(_objectSpread({}, options), {}, {
|
|
441
|
+
triggeredTime: new Date().toISOString()
|
|
442
|
+
});
|
|
443
|
+
this.delayedClientFeatureEvents.push({
|
|
444
|
+
name: name,
|
|
445
|
+
payload: payload,
|
|
446
|
+
options: delayedOptions
|
|
447
|
+
});
|
|
448
|
+
return _promise.default.resolve();
|
|
449
|
+
}
|
|
450
|
+
this.logger.log(_config2.CALL_FEATURE_LOG_IDENTIFIER, 'CallFeatureMetrics: @submitFeatureEvent. Submit Client Feature Event CA event.', "name: ".concat(name));
|
|
451
|
+
var featureEvent = this.prepareClientFeatureEvent({
|
|
452
|
+
name: name,
|
|
453
|
+
payload: payload,
|
|
454
|
+
options: options
|
|
455
|
+
});
|
|
456
|
+
this.validator({
|
|
457
|
+
type: 'ce',
|
|
458
|
+
event: featureEvent
|
|
459
|
+
});
|
|
460
|
+
return this.submitToCallFeatures(featureEvent);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Submit Feature Event
|
|
465
|
+
* type is business
|
|
466
|
+
* @param event
|
|
467
|
+
*/
|
|
468
|
+
}, {
|
|
469
|
+
key: "submitToCallFeatures",
|
|
470
|
+
value: function submitToCallFeatures(event) {
|
|
471
|
+
// build metrics-a event type
|
|
472
|
+
var finalEvent = {
|
|
473
|
+
eventPayload: event,
|
|
474
|
+
type: ['business']
|
|
475
|
+
};
|
|
476
|
+
return this.callDiagnosticEventsBatcher.request(finalEvent);
|
|
399
477
|
}
|
|
400
478
|
|
|
401
479
|
/**
|
|
@@ -407,10 +485,10 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
407
485
|
*/
|
|
408
486
|
}, {
|
|
409
487
|
key: "submitMQE",
|
|
410
|
-
value: function submitMQE(
|
|
411
|
-
var name =
|
|
412
|
-
payload =
|
|
413
|
-
options =
|
|
488
|
+
value: function submitMQE(_ref5) {
|
|
489
|
+
var name = _ref5.name,
|
|
490
|
+
payload = _ref5.payload,
|
|
491
|
+
options = _ref5.options;
|
|
414
492
|
var meetingId = options.meetingId,
|
|
415
493
|
mediaConnections = options.mediaConnections,
|
|
416
494
|
webexConferenceIdStr = options.webexConferenceIdStr,
|
|
@@ -489,13 +567,13 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
489
567
|
*/
|
|
490
568
|
}, {
|
|
491
569
|
key: "getErrorPayloadForClientErrorCode",
|
|
492
|
-
value: function getErrorPayloadForClientErrorCode(
|
|
493
|
-
var clientErrorCode =
|
|
494
|
-
serviceErrorCode =
|
|
495
|
-
serviceErrorName =
|
|
496
|
-
rawErrorMessage =
|
|
497
|
-
payloadOverrides =
|
|
498
|
-
httpStatusCode =
|
|
570
|
+
value: function getErrorPayloadForClientErrorCode(_ref6) {
|
|
571
|
+
var clientErrorCode = _ref6.clientErrorCode,
|
|
572
|
+
serviceErrorCode = _ref6.serviceErrorCode,
|
|
573
|
+
serviceErrorName = _ref6.serviceErrorName,
|
|
574
|
+
rawErrorMessage = _ref6.rawErrorMessage,
|
|
575
|
+
payloadOverrides = _ref6.payloadOverrides,
|
|
576
|
+
httpStatusCode = _ref6.httpStatusCode;
|
|
499
577
|
var error;
|
|
500
578
|
if (clientErrorCode) {
|
|
501
579
|
var partialParsedError = _config2.CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];
|
|
@@ -639,19 +717,20 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
639
717
|
}
|
|
640
718
|
|
|
641
719
|
/**
|
|
642
|
-
* Create
|
|
643
|
-
* @param
|
|
644
|
-
* @param
|
|
645
|
-
* @param
|
|
720
|
+
* Create common object for in meeting events
|
|
721
|
+
* @param name
|
|
722
|
+
* @param options
|
|
723
|
+
* @param eventType - 'client' | 'feature'
|
|
646
724
|
* @returns object
|
|
647
725
|
*/
|
|
648
726
|
}, {
|
|
649
|
-
key: "
|
|
650
|
-
value: function
|
|
727
|
+
key: "createCommonEventObjectInMeeting",
|
|
728
|
+
value: function createCommonEventObjectInMeeting(_ref7) {
|
|
651
729
|
var _this$webex$meetings2, _this$webex$meetings3, _this$webex$meetings4, _options$joinFlowVers, _meeting$callStateFor;
|
|
652
|
-
var name =
|
|
653
|
-
options =
|
|
654
|
-
|
|
730
|
+
var name = _ref7.name,
|
|
731
|
+
options = _ref7.options,
|
|
732
|
+
_ref7$eventType = _ref7.eventType,
|
|
733
|
+
eventType = _ref7$eventType === void 0 ? 'client' : _ref7$eventType;
|
|
655
734
|
var meetingId = options.meetingId,
|
|
656
735
|
mediaConnections = options.mediaConnections,
|
|
657
736
|
globalMeetingId = options.globalMeetingId,
|
|
@@ -661,9 +740,9 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
661
740
|
// @ts-ignore
|
|
662
741
|
var meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);
|
|
663
742
|
if (!meeting) {
|
|
664
|
-
console.warn('Attempt to send
|
|
743
|
+
console.warn('Attempt to send common event but no meeting was found...', "name: ".concat(name, ", meetingId: ").concat(meetingId));
|
|
665
744
|
// @ts-ignore
|
|
666
|
-
this.webex.internal.metrics.submitClientMetrics(_config2.CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {
|
|
745
|
+
this.webex.internal.metrics.submitClientMetrics(eventType === 'feature' ? _config2.CALL_FEATURE_EVENT_FAILED_TO_SEND : _config2.CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {
|
|
667
746
|
fields: {
|
|
668
747
|
meetingId: meetingId,
|
|
669
748
|
name: name
|
|
@@ -681,15 +760,13 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
681
760
|
sessionCorrelationId: sessionCorrelationId
|
|
682
761
|
});
|
|
683
762
|
|
|
684
|
-
// create
|
|
685
|
-
var
|
|
763
|
+
// create common event object structur
|
|
764
|
+
var commonEventObject = _objectSpread(_objectSpread(_objectSpread({
|
|
686
765
|
name: name,
|
|
687
766
|
canProceed: true,
|
|
688
767
|
identifiers: identifiers,
|
|
689
|
-
errors: errors,
|
|
690
768
|
eventData: {
|
|
691
|
-
webClientDomain: window.location.hostname
|
|
692
|
-
isMercuryConnected: this.isMercuryConnected
|
|
769
|
+
webClientDomain: window.location.hostname
|
|
693
770
|
},
|
|
694
771
|
userType: meeting.getCurUserType(),
|
|
695
772
|
loginType: 'loginType' in meeting.callStateForMetrics ? meeting.callStateForMetrics.loginType : this.getCurLoginType(),
|
|
@@ -707,16 +784,68 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
707
784
|
});
|
|
708
785
|
var joinFlowVersion = (_options$joinFlowVers = options.joinFlowVersion) !== null && _options$joinFlowVers !== void 0 ? _options$joinFlowVers : (_meeting$callStateFor = meeting.callStateForMetrics) === null || _meeting$callStateFor === void 0 ? void 0 : _meeting$callStateFor.joinFlowVersion;
|
|
709
786
|
if (joinFlowVersion) {
|
|
710
|
-
|
|
787
|
+
// @ts-ignore
|
|
788
|
+
commonEventObject.joinFlowVersion = joinFlowVersion;
|
|
711
789
|
}
|
|
712
790
|
var meetingJoinedTime = meeting.isoLocalClientMeetingJoinTime;
|
|
713
791
|
if (meetingJoinedTime) {
|
|
714
|
-
|
|
792
|
+
// @ts-ignore
|
|
793
|
+
commonEventObject.meetingJoinedTime = meetingJoinedTime;
|
|
715
794
|
}
|
|
716
795
|
if (options.meetingJoinPhase) {
|
|
717
|
-
|
|
796
|
+
// @ts-ignore
|
|
797
|
+
commonEventObject.meetingJoinPhase = options.meetingJoinPhase;
|
|
718
798
|
}
|
|
719
|
-
return
|
|
799
|
+
return commonEventObject;
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
/**
|
|
803
|
+
* Create client event object for in meeting events
|
|
804
|
+
* @param arg - create args
|
|
805
|
+
* @param arg.event - event key
|
|
806
|
+
* @param arg.options - options
|
|
807
|
+
* @returns object
|
|
808
|
+
*/
|
|
809
|
+
}, {
|
|
810
|
+
key: "createClientEventObjectInMeeting",
|
|
811
|
+
value: function createClientEventObjectInMeeting(_ref8) {
|
|
812
|
+
var name = _ref8.name,
|
|
813
|
+
options = _ref8.options,
|
|
814
|
+
errors = _ref8.errors;
|
|
815
|
+
var commonObject = this.createCommonEventObjectInMeeting({
|
|
816
|
+
name: name,
|
|
817
|
+
options: options,
|
|
818
|
+
eventType: 'client'
|
|
819
|
+
});
|
|
820
|
+
if (!commonObject) return undefined;
|
|
821
|
+
return _objectSpread(_objectSpread({}, commonObject), {}, {
|
|
822
|
+
errors: errors,
|
|
823
|
+
eventData: _objectSpread(_objectSpread({}, commonObject.eventData), {}, {
|
|
824
|
+
isMercuryConnected: this.isMercuryConnected
|
|
825
|
+
})
|
|
826
|
+
});
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
/**
|
|
830
|
+
* Create feature event object for in meeting function event
|
|
831
|
+
* @param name
|
|
832
|
+
* @param options
|
|
833
|
+
* @returns object
|
|
834
|
+
*/
|
|
835
|
+
}, {
|
|
836
|
+
key: "createFeatureEventObjectInMeeting",
|
|
837
|
+
value: function createFeatureEventObjectInMeeting(_ref9) {
|
|
838
|
+
var name = _ref9.name,
|
|
839
|
+
options = _ref9.options;
|
|
840
|
+
var commonObject = this.createCommonEventObjectInMeeting({
|
|
841
|
+
name: name,
|
|
842
|
+
options: options,
|
|
843
|
+
eventType: 'feature'
|
|
844
|
+
});
|
|
845
|
+
if (!commonObject) return undefined;
|
|
846
|
+
return _objectSpread(_objectSpread({}, commonObject), {}, {
|
|
847
|
+
key: 'UcfFeatureUsage'
|
|
848
|
+
});
|
|
720
849
|
}
|
|
721
850
|
|
|
722
851
|
/**
|
|
@@ -728,11 +857,11 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
728
857
|
*/
|
|
729
858
|
}, {
|
|
730
859
|
key: "createClientEventObjectPreMeeting",
|
|
731
|
-
value: function createClientEventObjectPreMeeting(
|
|
860
|
+
value: function createClientEventObjectPreMeeting(_ref10) {
|
|
732
861
|
var _this$webex$meetings5, _this$webex$meetings6, _this$webex$meetings7;
|
|
733
|
-
var name =
|
|
734
|
-
options =
|
|
735
|
-
errors =
|
|
862
|
+
var name = _ref10.name,
|
|
863
|
+
options = _ref10.options,
|
|
864
|
+
errors = _ref10.errors;
|
|
736
865
|
var correlationId = options.correlationId,
|
|
737
866
|
globalMeetingId = options.globalMeetingId,
|
|
738
867
|
webexConferenceIdStr = options.webexConferenceIdStr,
|
|
@@ -788,10 +917,10 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
788
917
|
*/
|
|
789
918
|
}, {
|
|
790
919
|
key: "prepareClientEvent",
|
|
791
|
-
value: function prepareClientEvent(
|
|
792
|
-
var name =
|
|
793
|
-
payload =
|
|
794
|
-
options =
|
|
920
|
+
value: function prepareClientEvent(_ref11) {
|
|
921
|
+
var name = _ref11.name,
|
|
922
|
+
payload = _ref11.payload,
|
|
923
|
+
options = _ref11.options;
|
|
795
924
|
var meetingId = options.meetingId,
|
|
796
925
|
correlationId = options.correlationId,
|
|
797
926
|
rawError = options.rawError;
|
|
@@ -847,11 +976,11 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
847
976
|
*/
|
|
848
977
|
}, {
|
|
849
978
|
key: "submitClientEvent",
|
|
850
|
-
value: function submitClientEvent(
|
|
851
|
-
var name =
|
|
852
|
-
payload =
|
|
853
|
-
options =
|
|
854
|
-
delaySubmitEvent =
|
|
979
|
+
value: function submitClientEvent(_ref12) {
|
|
980
|
+
var name = _ref12.name,
|
|
981
|
+
payload = _ref12.payload,
|
|
982
|
+
options = _ref12.options,
|
|
983
|
+
delaySubmitEvent = _ref12.delaySubmitEvent;
|
|
855
984
|
if (delaySubmitEvent) {
|
|
856
985
|
// Preserve the time when the event was triggered if delaying the submission to Call Diagnostics
|
|
857
986
|
var delayedOptions = _objectSpread(_objectSpread({}, options), {}, {
|
|
@@ -906,6 +1035,32 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
906
1035
|
return _promise.default.all(promises);
|
|
907
1036
|
}
|
|
908
1037
|
|
|
1038
|
+
/**
|
|
1039
|
+
* Submit Delayed feature Event CA events. Clears submitDelayedClientFeatureEvents array after submission.
|
|
1040
|
+
*/
|
|
1041
|
+
}, {
|
|
1042
|
+
key: "submitDelayedClientFeatureEvents",
|
|
1043
|
+
value: function submitDelayedClientFeatureEvents(overrides) {
|
|
1044
|
+
var _this3 = this;
|
|
1045
|
+
this.logger.log(_config2.CALL_FEATURE_LOG_IDENTIFIER, 'CallDiagnosticMetrics: @submitDelayedClientFeatureEvents. Submitting delayed feature events.');
|
|
1046
|
+
if (this.delayedClientFeatureEvents.length === 0) {
|
|
1047
|
+
return _promise.default.resolve();
|
|
1048
|
+
}
|
|
1049
|
+
var promises = this.delayedClientFeatureEvents.map(function (delayedSubmitClientEventParams) {
|
|
1050
|
+
var name = delayedSubmitClientEventParams.name,
|
|
1051
|
+
payload = delayedSubmitClientEventParams.payload,
|
|
1052
|
+
options = delayedSubmitClientEventParams.options;
|
|
1053
|
+
var optionsWithOverrides = _objectSpread(_objectSpread({}, options), overrides);
|
|
1054
|
+
return _this3.submitFeatureEvent({
|
|
1055
|
+
name: name,
|
|
1056
|
+
payload: payload,
|
|
1057
|
+
options: optionsWithOverrides
|
|
1058
|
+
});
|
|
1059
|
+
});
|
|
1060
|
+
this.delayedClientFeatureEvents = [];
|
|
1061
|
+
return _promise.default.all(promises);
|
|
1062
|
+
}
|
|
1063
|
+
|
|
909
1064
|
/**
|
|
910
1065
|
* Prepare the event and send the request to metrics-a service.
|
|
911
1066
|
* @param event
|
|
@@ -934,12 +1089,12 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
934
1089
|
* @throws
|
|
935
1090
|
*/
|
|
936
1091
|
function () {
|
|
937
|
-
var _buildClientEventFetchRequestOptions = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(
|
|
1092
|
+
var _buildClientEventFetchRequestOptions = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref13) {
|
|
938
1093
|
var name, payload, options, clientEvent, diagnosticEvent, request;
|
|
939
1094
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
940
1095
|
while (1) switch (_context.prev = _context.next) {
|
|
941
1096
|
case 0:
|
|
942
|
-
name =
|
|
1097
|
+
name = _ref13.name, payload = _ref13.payload, options = _ref13.options;
|
|
943
1098
|
this.logger.log(_config2.CALL_DIAGNOSTIC_LOG_IDENTIFIER, 'CallDiagnosticMetrics: @buildClientEventFetchRequestOptions. Building request options object for fetch()...', "name: ".concat(name));
|
|
944
1099
|
clientEvent = this.prepareClientEvent({
|
|
945
1100
|
name: name,
|