@webex/internal-plugin-metrics 3.0.0-beta.163 → 3.0.0-beta.165
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/call-diagnostic/call-diagnostic-metrics-batcher.js +2 -2
- package/dist/call-diagnostic/call-diagnostic-metrics-batcher.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +10 -0
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
- package/dist/metrics.js +1 -1
- package/dist/types/batcher.d.ts +2 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics-batcher.d.ts +2 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +154 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +324 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics.util.d.ts +31 -0
- package/dist/types/call-diagnostic/config.d.ts +57 -0
- package/dist/types/call-diagnostic/generated-types-temp/ClientEvent.d.ts +1112 -0
- package/dist/types/call-diagnostic/generated-types-temp/Event.d.ts +4851 -0
- package/dist/types/call-diagnostic/generated-types-temp/MediaQualityEvent.d.ts +2121 -0
- package/dist/types/client-metrics-batcher.d.ts +2 -0
- package/dist/types/config.d.ts +35 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/metrics.d.ts +3 -0
- package/dist/types/metrics.types.d.ts +89 -0
- package/dist/types/new-metrics.d.ts +83 -0
- package/package.json +8 -8
- package/src/call-diagnostic/call-diagnostic-metrics-batcher.ts +2 -1
- package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +11 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +2 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +6 -0
|
@@ -69,10 +69,10 @@ var CallDiagnosticEventsBatcher = _batcher.default.extend({
|
|
|
69
69
|
case 'client.media.rx.start':
|
|
70
70
|
joinTimes.localSDPGenRemoteSDPRecv = cdl.getLocalSDPGenRemoteSDPRecv();
|
|
71
71
|
break;
|
|
72
|
-
|
|
73
|
-
// TODO: Figure out equivalent for WEBRTC
|
|
74
72
|
case 'client.media-engine.ready':
|
|
75
73
|
joinTimes.totalMediaJMT = cdl.getTotalMediaJMT();
|
|
74
|
+
joinTimes.interstitialToMediaOKJMT = cdl.getInterstitialToMediaOKJMT();
|
|
75
|
+
joinTimes.callInitMediaEngineReady = cdl.getInterstitialToMediaOKJMT(); // same as interstitialToMediaOKJMT
|
|
76
76
|
break;
|
|
77
77
|
case 'client.mediaquality.event':
|
|
78
78
|
audioSetupDelay.joinRespRxStart = cdl.getAudioJoinRespRxStart();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CallDiagnosticEventsBatcher","Batcher","extend","namespace","getBuildType","webClientDomain","includes","process","env","NODE_ENV","prepareItem","item","origin","buildType","event","eventData","networkType","eventName","eventPayload","name","joinTimes","audioSetupDelay","videoSetupDelay","cdl","webex","internal","newMetrics","callDiagnosticLatencies","meetingInfoReqResp","getMeetingInfoReqResp","clickToInterstitial","getClickToInterstitial","showInterstitialTime","getShowInterstitialTime","callInitJoinReq","getCallInitJoinReq","joinReqResp","getJoinReqResp","joinReqSentReceived","getJoinRespSentReceived","pageJmt","getPageJMT","interstitialToJoinOK","getInterstitialToJoinOK","totalJmt","getTotalJMT","ICESetupTime","getICESetupTime","audioICESetupTime","getAudioICESetupTime","videoICESetupTime","getVideoICESetupTime","shareICESetupTime","getShareICESetupTime","localSDPGenRemoteSDPRecv","getLocalSDPGenRemoteSDPRecv","totalMediaJMT","getTotalMediaJMT","joinRespRxStart","getAudioJoinRespRxStart","joinRespTxStart","getAudioJoinRespTxStart","getVideoJoinRespRxStart","getVideoJoinRespTxStart","resolve","prepareRequest","queue","forEach","originTime","sent","Date","toISOString","submitHttpRequest","payload","request","method","service","resource","body","metrics"],"sources":["call-diagnostic-metrics-batcher.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\nimport {isEmpty, merge} from 'lodash';\nimport Batcher from '../batcher';\nimport {\n ClientEvent,\n MetricEventNames,\n MediaQualityEventAudioSetupDelayPayload,\n MediaQualityEventVideoSetupDelayPayload,\n} from '../metrics.types';\n\nconst CallDiagnosticEventsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n /**\n * @param webClientDomain\n * @returns\n */\n getBuildType(webClientDomain) {\n if (\n webClientDomain?.includes('localhost') ||\n webClientDomain?.includes('127.0.0.1') ||\n process.env.NODE_ENV !== 'production'\n ) {\n return 'test';\n }\n\n return process.env.NODE_ENV === 'production' ? 'prod' : 'test';\n },\n\n /**\n * Prepare item\n * @param item\n * @returns\n */\n prepareItem(item) {\n const origin = {\n buildType: this.getBuildType(item.event?.eventData?.webClientDomain),\n networkType: 'unknown',\n };\n\n // check event names and append latencies?\n const eventName = item.eventPayload?.event?.name as MetricEventNames;\n const joinTimes: ClientEvent['payload']['joinTimes'] = {};\n const audioSetupDelay: MediaQualityEventAudioSetupDelayPayload = {};\n const videoSetupDelay: MediaQualityEventVideoSetupDelayPayload = {};\n\n const cdl = this.webex.internal.newMetrics.callDiagnosticLatencies;\n\n switch (eventName) {\n case 'client.interstitial-window.launched':\n joinTimes.meetingInfoReqResp = cdl.getMeetingInfoReqResp();\n joinTimes.clickToInterstitial = cdl.getClickToInterstitial();\n break;\n\n case 'client.call.initiated':\n joinTimes.meetingInfoReqResp = cdl.getMeetingInfoReqResp();\n joinTimes.showInterstitialTime = cdl.getShowInterstitialTime();\n break;\n\n case 'client.locus.join.response':\n joinTimes.meetingInfoReqResp = cdl.getMeetingInfoReqResp();\n joinTimes.callInitJoinReq = cdl.getCallInitJoinReq();\n joinTimes.joinReqResp = cdl.getJoinReqResp();\n joinTimes.joinReqSentReceived = cdl.getJoinRespSentReceived();\n joinTimes.pageJmt = cdl.getPageJMT();\n joinTimes.clickToInterstitial = cdl.getClickToInterstitial();\n joinTimes.interstitialToJoinOK = cdl.getInterstitialToJoinOK();\n joinTimes.totalJmt = cdl.getTotalJMT();\n break;\n\n case 'client.ice.end':\n joinTimes.ICESetupTime = cdl.getICESetupTime();\n joinTimes.audioICESetupTime = cdl.getAudioICESetupTime();\n joinTimes.videoICESetupTime = cdl.getVideoICESetupTime();\n joinTimes.shareICESetupTime = cdl.getShareICESetupTime();\n break;\n\n case 'client.media.rx.start':\n joinTimes.localSDPGenRemoteSDPRecv = cdl.getLocalSDPGenRemoteSDPRecv();\n break;\n\n
|
|
1
|
+
{"version":3,"names":["CallDiagnosticEventsBatcher","Batcher","extend","namespace","getBuildType","webClientDomain","includes","process","env","NODE_ENV","prepareItem","item","origin","buildType","event","eventData","networkType","eventName","eventPayload","name","joinTimes","audioSetupDelay","videoSetupDelay","cdl","webex","internal","newMetrics","callDiagnosticLatencies","meetingInfoReqResp","getMeetingInfoReqResp","clickToInterstitial","getClickToInterstitial","showInterstitialTime","getShowInterstitialTime","callInitJoinReq","getCallInitJoinReq","joinReqResp","getJoinReqResp","joinReqSentReceived","getJoinRespSentReceived","pageJmt","getPageJMT","interstitialToJoinOK","getInterstitialToJoinOK","totalJmt","getTotalJMT","ICESetupTime","getICESetupTime","audioICESetupTime","getAudioICESetupTime","videoICESetupTime","getVideoICESetupTime","shareICESetupTime","getShareICESetupTime","localSDPGenRemoteSDPRecv","getLocalSDPGenRemoteSDPRecv","totalMediaJMT","getTotalMediaJMT","interstitialToMediaOKJMT","getInterstitialToMediaOKJMT","callInitMediaEngineReady","joinRespRxStart","getAudioJoinRespRxStart","joinRespTxStart","getAudioJoinRespTxStart","getVideoJoinRespRxStart","getVideoJoinRespTxStart","resolve","prepareRequest","queue","forEach","originTime","sent","Date","toISOString","submitHttpRequest","payload","request","method","service","resource","body","metrics"],"sources":["call-diagnostic-metrics-batcher.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\nimport {isEmpty, merge} from 'lodash';\nimport Batcher from '../batcher';\nimport {\n ClientEvent,\n MetricEventNames,\n MediaQualityEventAudioSetupDelayPayload,\n MediaQualityEventVideoSetupDelayPayload,\n} from '../metrics.types';\n\nconst CallDiagnosticEventsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n /**\n * @param webClientDomain\n * @returns\n */\n getBuildType(webClientDomain) {\n if (\n webClientDomain?.includes('localhost') ||\n webClientDomain?.includes('127.0.0.1') ||\n process.env.NODE_ENV !== 'production'\n ) {\n return 'test';\n }\n\n return process.env.NODE_ENV === 'production' ? 'prod' : 'test';\n },\n\n /**\n * Prepare item\n * @param item\n * @returns\n */\n prepareItem(item) {\n const origin = {\n buildType: this.getBuildType(item.event?.eventData?.webClientDomain),\n networkType: 'unknown',\n };\n\n // check event names and append latencies?\n const eventName = item.eventPayload?.event?.name as MetricEventNames;\n const joinTimes: ClientEvent['payload']['joinTimes'] = {};\n const audioSetupDelay: MediaQualityEventAudioSetupDelayPayload = {};\n const videoSetupDelay: MediaQualityEventVideoSetupDelayPayload = {};\n\n const cdl = this.webex.internal.newMetrics.callDiagnosticLatencies;\n\n switch (eventName) {\n case 'client.interstitial-window.launched':\n joinTimes.meetingInfoReqResp = cdl.getMeetingInfoReqResp();\n joinTimes.clickToInterstitial = cdl.getClickToInterstitial();\n break;\n\n case 'client.call.initiated':\n joinTimes.meetingInfoReqResp = cdl.getMeetingInfoReqResp();\n joinTimes.showInterstitialTime = cdl.getShowInterstitialTime();\n break;\n\n case 'client.locus.join.response':\n joinTimes.meetingInfoReqResp = cdl.getMeetingInfoReqResp();\n joinTimes.callInitJoinReq = cdl.getCallInitJoinReq();\n joinTimes.joinReqResp = cdl.getJoinReqResp();\n joinTimes.joinReqSentReceived = cdl.getJoinRespSentReceived();\n joinTimes.pageJmt = cdl.getPageJMT();\n joinTimes.clickToInterstitial = cdl.getClickToInterstitial();\n joinTimes.interstitialToJoinOK = cdl.getInterstitialToJoinOK();\n joinTimes.totalJmt = cdl.getTotalJMT();\n break;\n\n case 'client.ice.end':\n joinTimes.ICESetupTime = cdl.getICESetupTime();\n joinTimes.audioICESetupTime = cdl.getAudioICESetupTime();\n joinTimes.videoICESetupTime = cdl.getVideoICESetupTime();\n joinTimes.shareICESetupTime = cdl.getShareICESetupTime();\n break;\n\n case 'client.media.rx.start':\n joinTimes.localSDPGenRemoteSDPRecv = cdl.getLocalSDPGenRemoteSDPRecv();\n break;\n\n case 'client.media-engine.ready':\n joinTimes.totalMediaJMT = cdl.getTotalMediaJMT();\n joinTimes.interstitialToMediaOKJMT = cdl.getInterstitialToMediaOKJMT();\n joinTimes.callInitMediaEngineReady = cdl.getInterstitialToMediaOKJMT(); // same as interstitialToMediaOKJMT\n break;\n\n case 'client.mediaquality.event':\n audioSetupDelay.joinRespRxStart = cdl.getAudioJoinRespRxStart();\n audioSetupDelay.joinRespTxStart = cdl.getAudioJoinRespTxStart();\n videoSetupDelay.joinRespRxStart = cdl.getVideoJoinRespRxStart();\n videoSetupDelay.joinRespTxStart = cdl.getVideoJoinRespTxStart();\n }\n\n if (!isEmpty(joinTimes)) {\n item.eventPayload.event = merge(item.eventPayload.event, {joinTimes});\n }\n\n if (!isEmpty(audioSetupDelay)) {\n item.eventPayload.event = merge(item.eventPayload.event, {audioSetupDelay});\n }\n\n if (!isEmpty(videoSetupDelay)) {\n item.eventPayload.event = merge(item.eventPayload.event, {videoSetupDelay});\n }\n\n item.eventPayload.origin = Object.assign(origin, item.eventPayload.origin);\n\n return Promise.resolve(item);\n },\n\n /**\n * Prepare request, add time sensitive date etc.\n * @param queue\n * @returns\n */\n prepareRequest(queue) {\n // Add sent timestamp\n queue.forEach((item) => {\n item.eventPayload.originTime = item.eventPayload.originTime || {};\n item.eventPayload.originTime.sent = new Date().toISOString();\n });\n\n return Promise.resolve(queue);\n },\n\n /**\n *\n * @param payload\n * @returns\n */\n submitHttpRequest(payload) {\n return this.webex.request({\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: payload,\n },\n });\n },\n});\n\nexport default CallDiagnosticEventsBatcher;\n"],"mappings":"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"}
|
|
@@ -287,6 +287,16 @@ var CallDiagnosticLatencies = /*#__PURE__*/function () {
|
|
|
287
287
|
return undefined;
|
|
288
288
|
}
|
|
289
289
|
|
|
290
|
+
/**
|
|
291
|
+
* Interstitial To Media OK JMT
|
|
292
|
+
* @returns - latency
|
|
293
|
+
*/
|
|
294
|
+
}, {
|
|
295
|
+
key: "getInterstitialToMediaOKJMT",
|
|
296
|
+
value: function getInterstitialToMediaOKJMT() {
|
|
297
|
+
return this.getDiffBetweenTimestamps('internal.client.interstitial-window.click.joinbutton', 'client.media-engine.ready');
|
|
298
|
+
}
|
|
299
|
+
|
|
290
300
|
/**
|
|
291
301
|
* Audio setup delay receive
|
|
292
302
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CallDiagnosticLatencies","latencyTimestamps","clear","key","value","Date","getTime","set","a","b","start","get","end","undefined","getDiffBetweenTimestamps","clickToInterstitial","getClickToInterstitial","interstitialToJoinOk","getInterstitialToJoinOK","joinReqResp","getJoinReqResp","ICESetupTime","getICESetupTime","joinConfJMT","getJoinConfJMT","stayLobbyTime","getStayLobbyTime"],"sources":["call-diagnostic-metrics-latencies.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\nimport {MetricEventNames} 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 {\n latencyTimestamps: Map<MetricEventNames, number>;\n\n /**\n * @constructor\n */\n constructor() {\n this.latencyTimestamps = new Map();\n }\n\n /**\n * Clear timestamps\n */\n public clearTimestamps() {\n this.latencyTimestamps.clear();\n }\n\n /**\n * Store timestamp value\n * @param key - key\n * @param value -value\n * @throws\n * @returns\n */\n public saveTimestamp(key: MetricEventNames, value: number = new Date().getTime()) {\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 if (start && end) {\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 'internal.client.interstitial-window.launched',\n 'internal.client.interstitial-window.click.joinbutton'\n );\n }\n\n /**\n * Call Init Join Request\n * @returns - latency\n */\n public getCallInitJoinReq() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.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 * Locus Join Response Sent Received\n * @returns - latency\n */\n public getJoinRespSentReceived() {\n // TODO: not clear SPARK-440554\n return undefined;\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 return this.latencyTimestamps.get('internal.client.pageJMT.received') || undefined;\n }\n\n /**\n * Click To Interstitial\n * @returns - latency\n */\n public getClickToInterstitial() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'internal.client.meeting.interstitial-window.showed'\n );\n }\n\n /**\n * Interstitial To Join Ok\n * @returns - latency\n */\n public getInterstitialToJoinOK() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'client.locus.join.response'\n );\n }\n\n /**\n * Interstitial To Media Ok\n * @returns - latency\n */\n public getInterstitialToMediaOK() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'sdk.media-flow.started'\n );\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 (clickToInterstitial && interstitialToJoinOk) {\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 stayLobbyTime = this.getStayLobbyTime() || 0;\n\n if (clickToInterstitial && interstitialToJoinOk && joinConfJMT) {\n return clickToInterstitial + interstitialToJoinOk + joinConfJMT - stayLobbyTime;\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 (interstitialToJoinOk && joinConfJMT) {\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 * 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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["CallDiagnosticLatencies","latencyTimestamps","clear","key","value","Date","getTime","set","a","b","start","get","end","undefined","getDiffBetweenTimestamps","clickToInterstitial","getClickToInterstitial","interstitialToJoinOk","getInterstitialToJoinOK","joinReqResp","getJoinReqResp","ICESetupTime","getICESetupTime","joinConfJMT","getJoinConfJMT","stayLobbyTime","getStayLobbyTime"],"sources":["call-diagnostic-metrics-latencies.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\nimport {MetricEventNames} 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 {\n latencyTimestamps: Map<MetricEventNames, number>;\n\n /**\n * @constructor\n */\n constructor() {\n this.latencyTimestamps = new Map();\n }\n\n /**\n * Clear timestamps\n */\n public clearTimestamps() {\n this.latencyTimestamps.clear();\n }\n\n /**\n * Store timestamp value\n * @param key - key\n * @param value -value\n * @throws\n * @returns\n */\n public saveTimestamp(key: MetricEventNames, value: number = new Date().getTime()) {\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 if (start && end) {\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 'internal.client.interstitial-window.launched',\n 'internal.client.interstitial-window.click.joinbutton'\n );\n }\n\n /**\n * Call Init Join Request\n * @returns - latency\n */\n public getCallInitJoinReq() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.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 * Locus Join Response Sent Received\n * @returns - latency\n */\n public getJoinRespSentReceived() {\n // TODO: not clear SPARK-440554\n return undefined;\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 return this.latencyTimestamps.get('internal.client.pageJMT.received') || undefined;\n }\n\n /**\n * Click To Interstitial\n * @returns - latency\n */\n public getClickToInterstitial() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'internal.client.meeting.interstitial-window.showed'\n );\n }\n\n /**\n * Interstitial To Join Ok\n * @returns - latency\n */\n public getInterstitialToJoinOK() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'client.locus.join.response'\n );\n }\n\n /**\n * Interstitial To Media Ok\n * @returns - latency\n */\n public getInterstitialToMediaOK() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'sdk.media-flow.started'\n );\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 (clickToInterstitial && interstitialToJoinOk) {\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 stayLobbyTime = this.getStayLobbyTime() || 0;\n\n if (clickToInterstitial && interstitialToJoinOk && joinConfJMT) {\n return clickToInterstitial + interstitialToJoinOk + joinConfJMT - stayLobbyTime;\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 (interstitialToJoinOk && joinConfJMT) {\n return interstitialToJoinOk + joinConfJMT;\n }\n\n return undefined;\n }\n\n /**\n * Interstitial To Media OK JMT\n * @returns - latency\n */\n public getInterstitialToMediaOKJMT() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.media-engine.ready'\n );\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 * 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"],"mappings":"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"}
|
package/dist/metrics.js
CHANGED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { MetricEventNames } from '../metrics.types';
|
|
2
|
+
/**
|
|
3
|
+
* @description Helper class to store latencies timestamp and to calculate various latencies for CA.
|
|
4
|
+
* @exports
|
|
5
|
+
* @class CallDiagnosticLatencies
|
|
6
|
+
*/
|
|
7
|
+
export default class CallDiagnosticLatencies {
|
|
8
|
+
latencyTimestamps: Map<MetricEventNames, number>;
|
|
9
|
+
/**
|
|
10
|
+
* @constructor
|
|
11
|
+
*/
|
|
12
|
+
constructor();
|
|
13
|
+
/**
|
|
14
|
+
* Clear timestamps
|
|
15
|
+
*/
|
|
16
|
+
clearTimestamps(): void;
|
|
17
|
+
/**
|
|
18
|
+
* Store timestamp value
|
|
19
|
+
* @param key - key
|
|
20
|
+
* @param value -value
|
|
21
|
+
* @throws
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
saveTimestamp(key: MetricEventNames, value?: number): void;
|
|
25
|
+
/**
|
|
26
|
+
* Helper to calculate end - start
|
|
27
|
+
* @param a start
|
|
28
|
+
* @param b end
|
|
29
|
+
* @returns latency
|
|
30
|
+
*/
|
|
31
|
+
getDiffBetweenTimestamps(a: MetricEventNames, b: MetricEventNames): number;
|
|
32
|
+
/**
|
|
33
|
+
* Meeting Info Request
|
|
34
|
+
* @note Meeting Info request happen not just in the join phase. CA requires
|
|
35
|
+
* metrics around meeting info request that are only part of join phase.
|
|
36
|
+
* This internal.* event is used to track the real timestamps
|
|
37
|
+
* (when the actual request/response happen). This is because the actual CA event is
|
|
38
|
+
* sent inside the join method on the meeting object based on some logic, but that's not exactly when
|
|
39
|
+
* those events are actually fired. The logic only confirms that they have happened, and we send them over.
|
|
40
|
+
* @returns - latency
|
|
41
|
+
*/
|
|
42
|
+
getMeetingInfoReqResp(): number;
|
|
43
|
+
/**
|
|
44
|
+
* Interstitial Time
|
|
45
|
+
* @returns - latency
|
|
46
|
+
*/
|
|
47
|
+
getShowInterstitialTime(): number;
|
|
48
|
+
/**
|
|
49
|
+
* Call Init Join Request
|
|
50
|
+
* @returns - latency
|
|
51
|
+
*/
|
|
52
|
+
getCallInitJoinReq(): number;
|
|
53
|
+
/**
|
|
54
|
+
* Locus Join Request
|
|
55
|
+
* @returns - latency
|
|
56
|
+
*/
|
|
57
|
+
getJoinReqResp(): number;
|
|
58
|
+
/**
|
|
59
|
+
* Locus Join Response Sent Received
|
|
60
|
+
* @returns - latency
|
|
61
|
+
*/
|
|
62
|
+
getJoinRespSentReceived(): any;
|
|
63
|
+
/**
|
|
64
|
+
* Local SDP Generated Remote SDP REceived
|
|
65
|
+
* @returns - latency
|
|
66
|
+
*/
|
|
67
|
+
getLocalSDPGenRemoteSDPRecv(): number;
|
|
68
|
+
/**
|
|
69
|
+
* ICE Setup Time
|
|
70
|
+
* @returns - latency
|
|
71
|
+
*/
|
|
72
|
+
getICESetupTime(): number;
|
|
73
|
+
/**
|
|
74
|
+
* Audio ICE time
|
|
75
|
+
* @returns - latency
|
|
76
|
+
*/
|
|
77
|
+
getAudioICESetupTime(): number;
|
|
78
|
+
/**
|
|
79
|
+
* Video ICE Time
|
|
80
|
+
* @returns - latency
|
|
81
|
+
*/
|
|
82
|
+
getVideoICESetupTime(): number;
|
|
83
|
+
/**
|
|
84
|
+
* Share ICE Time
|
|
85
|
+
* @returns - latency
|
|
86
|
+
*/
|
|
87
|
+
getShareICESetupTime(): number;
|
|
88
|
+
/**
|
|
89
|
+
* Stay Lobby Time
|
|
90
|
+
* @returns - latency
|
|
91
|
+
*/
|
|
92
|
+
getStayLobbyTime(): number;
|
|
93
|
+
/**
|
|
94
|
+
* Page JMT
|
|
95
|
+
* @returns - latency
|
|
96
|
+
*/
|
|
97
|
+
getPageJMT(): number;
|
|
98
|
+
/**
|
|
99
|
+
* Click To Interstitial
|
|
100
|
+
* @returns - latency
|
|
101
|
+
*/
|
|
102
|
+
getClickToInterstitial(): number;
|
|
103
|
+
/**
|
|
104
|
+
* Interstitial To Join Ok
|
|
105
|
+
* @returns - latency
|
|
106
|
+
*/
|
|
107
|
+
getInterstitialToJoinOK(): number;
|
|
108
|
+
/**
|
|
109
|
+
* Interstitial To Media Ok
|
|
110
|
+
* @returns - latency
|
|
111
|
+
*/
|
|
112
|
+
getInterstitialToMediaOK(): number;
|
|
113
|
+
/**
|
|
114
|
+
* Total JMT
|
|
115
|
+
* @returns - latency
|
|
116
|
+
*/
|
|
117
|
+
getTotalJMT(): number;
|
|
118
|
+
/**
|
|
119
|
+
* Join Conf JMT
|
|
120
|
+
* @returns - latency
|
|
121
|
+
*/
|
|
122
|
+
getJoinConfJMT(): number;
|
|
123
|
+
/**
|
|
124
|
+
* Total Media JMT
|
|
125
|
+
* @returns - latency
|
|
126
|
+
*/
|
|
127
|
+
getTotalMediaJMT(): number;
|
|
128
|
+
/**
|
|
129
|
+
* Client JMT
|
|
130
|
+
* @returns - latency
|
|
131
|
+
*/
|
|
132
|
+
getClientJMT(): number;
|
|
133
|
+
/**
|
|
134
|
+
* Interstitial To Media OK JMT
|
|
135
|
+
* @returns - latency
|
|
136
|
+
*/
|
|
137
|
+
getInterstitialToMediaOKJMT(): number;
|
|
138
|
+
/**
|
|
139
|
+
* Audio setup delay receive
|
|
140
|
+
*/
|
|
141
|
+
getAudioJoinRespRxStart(): number;
|
|
142
|
+
/**
|
|
143
|
+
* Video setup delay receive
|
|
144
|
+
*/
|
|
145
|
+
getVideoJoinRespRxStart(): number;
|
|
146
|
+
/**
|
|
147
|
+
* Audio setup delay transmit
|
|
148
|
+
*/
|
|
149
|
+
getAudioJoinRespTxStart(): number;
|
|
150
|
+
/**
|
|
151
|
+
* Video setup delay transmit
|
|
152
|
+
*/
|
|
153
|
+
getVideoJoinRespTxStart(): number;
|
|
154
|
+
}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { StatelessWebexPlugin } from '@webex/webex-core';
|
|
2
|
+
import { Event, ClientType, SubClientType, NetworkType, ClientEvent, SubmitClientEventOptions, MediaQualityEvent, SubmitMQEOptions, SubmitMQEPayload, ClientEventError, ClientEventPayload } from '../metrics.types';
|
|
3
|
+
type GetOriginOptions = {
|
|
4
|
+
clientType: ClientType;
|
|
5
|
+
subClientType: SubClientType;
|
|
6
|
+
networkType?: NetworkType;
|
|
7
|
+
};
|
|
8
|
+
type GetIdentifiersOptions = {
|
|
9
|
+
meeting?: any;
|
|
10
|
+
mediaConnections?: any[];
|
|
11
|
+
correlationId?: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* @description Util class to handle Call Analyzer Metrics
|
|
15
|
+
* @export
|
|
16
|
+
* @class CallDiagnosticMetrics
|
|
17
|
+
*/
|
|
18
|
+
export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
19
|
+
private callDiagnosticEventsBatcher;
|
|
20
|
+
/**
|
|
21
|
+
* Constructor
|
|
22
|
+
* @param args
|
|
23
|
+
*/
|
|
24
|
+
constructor(...args: any[]);
|
|
25
|
+
/**
|
|
26
|
+
* Returns the login type of the current user
|
|
27
|
+
* @returns one of 'login-ci','unverified-guest', null
|
|
28
|
+
*/
|
|
29
|
+
getCurLoginType(): "login-ci" | "unverified-guest";
|
|
30
|
+
/**
|
|
31
|
+
* Get origin object for Call Diagnostic Event payload.
|
|
32
|
+
* @param options
|
|
33
|
+
* @param meetingId
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
getOrigin(options: GetOriginOptions, meetingId?: string): {
|
|
37
|
+
name: "antares" | "beech" | "breakout" | "cb" | "cloudproxy" | "edonus" | "endpoint" | "givr" | "hecate" | "hedge" | "hesiod" | "homer" | "superhomer" | "l2sip" | "linus" | "locus" | "mcc" | "mcs" | "mercury" | "mes" | "mjs" | "mmp" | "mygdon" | "orpheus" | "page" | "poros" | "rhesos" | "terminus" | "tpgw" | "ucc" | "wdm" | "webexivr";
|
|
38
|
+
userAgent: string;
|
|
39
|
+
buildType?: "debug" | "test" | "prod" | "tap" | "analyzer-test";
|
|
40
|
+
upgradeChannel?: string;
|
|
41
|
+
instanceId?: string;
|
|
42
|
+
networkType: "unknown" | "wifi" | "ethernet" | "cellular";
|
|
43
|
+
localIP?: string;
|
|
44
|
+
usingProxy?: boolean;
|
|
45
|
+
mediaEngineSoftwareVersion?: string;
|
|
46
|
+
environment?: string;
|
|
47
|
+
newEnvironment?: string;
|
|
48
|
+
clientInfo?: {
|
|
49
|
+
os: "windows" | "mac" | "ios" | "android" | "chrome" | "linux" | "other" | "uwp-arm64";
|
|
50
|
+
osVersion: string;
|
|
51
|
+
localIP?: string;
|
|
52
|
+
gatewayIP?: string;
|
|
53
|
+
macAddress?: string;
|
|
54
|
+
localNetworkPrefix?: string;
|
|
55
|
+
publicNetworkPrefix?: string;
|
|
56
|
+
browserLaunchMethod?: "activex" | "npapi" | "extension" | "cwsapi" | "java" | "tfs" | "webacd" | "url-handler" | "thinclient";
|
|
57
|
+
clientLaunchMethod?: "url-handler" | "universal-link" | "voice-command" | "notification" | "manual" | "teams-cross-launch";
|
|
58
|
+
browser?: string;
|
|
59
|
+
browserVersion?: string;
|
|
60
|
+
clientType?: "SIP" | "MEETING_CENTER" | "EVENT_CENTER" | "TRAINING_CENTER" | "TEAMS_CLIENT" | "TEAMS_DEVICE" | "TEAMS_SHARE" | "RECORDING" | "CLOUD_AWARE_SIP" | "TEAMS_WXC_CLIENT" | "WXC_CLIENT" | "WXC_DEVICE" | "WEBEX_JS_SDK" | "VOICEA_CLIENT" | "CISCO_SIP_GW" | "WEBEX_SDK" | "CPAAS_THIRD_PARTY_SDK" | "WXC_THIRD_PARTY";
|
|
61
|
+
subClientType?: "DESKTOP_APP" | "DESKTOP_APP_VDI" | "DEVICE_CURRENT" | "DEVICE_LEGACY_2020" | "HVDI_APP" | "MOBILE_APP" | "VDI_APP" | "WEB_APP" | "MOBILE_NETWORK" | "HOLOGRAM_HEADSET_APP";
|
|
62
|
+
clientVersion?: string;
|
|
63
|
+
localClientVersion?: string;
|
|
64
|
+
modelNumber?: string;
|
|
65
|
+
joinFirstUpdateLater?: "ep-enabled" | "sp-enabled" | "not-enabled";
|
|
66
|
+
standbyUsed?: boolean;
|
|
67
|
+
prefetchDocShowUsed?: boolean;
|
|
68
|
+
fastJoinUsed?: boolean;
|
|
69
|
+
clientDownloadSize?: number;
|
|
70
|
+
clientDownloadFileCount?: number;
|
|
71
|
+
nodeId?: number;
|
|
72
|
+
machineInfo?: string;
|
|
73
|
+
parentAppName?: string;
|
|
74
|
+
parentAppInPermitList?: boolean;
|
|
75
|
+
meetingSiteType?: "train" | "webex-11" | "orion";
|
|
76
|
+
CDNEnabled?: boolean;
|
|
77
|
+
clientMajorVersion?: string;
|
|
78
|
+
majorVersion?: number;
|
|
79
|
+
minorVersion?: number;
|
|
80
|
+
revision?: number;
|
|
81
|
+
isValidClientVersion?: boolean;
|
|
82
|
+
cpuInfo?: {
|
|
83
|
+
description: string;
|
|
84
|
+
clockSpeedGigaHertz: number;
|
|
85
|
+
numberOfCores: number;
|
|
86
|
+
architecture: "unknown" | "intel32" | "intel64" | "amd32" | "amd64" | "arm32" | "arm64";
|
|
87
|
+
staticPerformance?: string;
|
|
88
|
+
};
|
|
89
|
+
shareType?: "cb-normal-share" | "ce-airplay-share" | "ce-direct-share" | "ce-gui-loopback-share" | "ce-input-source-share" | "ce-input-source-share-hdmi" | "ce-input-source-share-usbc" | "ce-jpg-share" | "ce-miracast-share" | "mcs-normal-share" | "mcs-normal-audio-share" | "mcs-hfps-share" | "mcs-hfps-audio-share";
|
|
90
|
+
videoDisplayMode?: "grid-view" | "active-speaker-view";
|
|
91
|
+
videoLayoutType?: "stack" | "stackWithShare" | "sideBySide" | "sideBySideWithShare" | "grid" | "floatingActive" | "floatingThumbnail" | "floatingGrid" | "overlay" | "focus" | "prominent" | "focusWithShare" | "prominentWithShare" | "equal" | "equalWithShare";
|
|
92
|
+
videoRenderType?: "wme" | "client_d3d" | "client_gdi";
|
|
93
|
+
vdiInfo?: unknown;
|
|
94
|
+
is64BitsClient?: boolean;
|
|
95
|
+
webexAppVersion?: string;
|
|
96
|
+
launch32BitsReason?: "forcewin32" | "disablewin64" | "platform_win32" | "platform_arm" | "platform_unknown" | "version_below_41.11";
|
|
97
|
+
inMeetingUpdate?: boolean;
|
|
98
|
+
mtaVersion?: string;
|
|
99
|
+
isWarholOpening?: boolean;
|
|
100
|
+
};
|
|
101
|
+
isHybridMedia?: boolean;
|
|
102
|
+
originData?: {};
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Gather identifier details for call diagnostic payload.
|
|
106
|
+
* @throws Error if initialization fails.
|
|
107
|
+
* @param options
|
|
108
|
+
*/
|
|
109
|
+
getIdentifiers(options: GetIdentifiersOptions): {
|
|
110
|
+
attendeeId?: string;
|
|
111
|
+
breakoutGroupId?: string;
|
|
112
|
+
breakoutMoveId?: string;
|
|
113
|
+
breakoutSessionId?: string;
|
|
114
|
+
confluenceId?: string;
|
|
115
|
+
cpaasIdentifiers?: {
|
|
116
|
+
imiTenantId: string;
|
|
117
|
+
devClientId: string;
|
|
118
|
+
imiServiceId: string;
|
|
119
|
+
imiAppId: string;
|
|
120
|
+
sessionId: string;
|
|
121
|
+
sessionInstanceId: string;
|
|
122
|
+
};
|
|
123
|
+
csdmDeviceUrl?: string;
|
|
124
|
+
destinationBreakoutSessionId?: string;
|
|
125
|
+
destinationLocusSessionId?: string;
|
|
126
|
+
destinationLocusUrl?: string;
|
|
127
|
+
destinationVenueId?: string;
|
|
128
|
+
deviceId?: string;
|
|
129
|
+
ivrCallId?: string;
|
|
130
|
+
ivrDialogId?: string;
|
|
131
|
+
ivrId?: string;
|
|
132
|
+
locusId?: string;
|
|
133
|
+
locusSessionId?: string;
|
|
134
|
+
locusStartTime?: string;
|
|
135
|
+
locusUrl?: string;
|
|
136
|
+
mediaAgentAlias?: string;
|
|
137
|
+
mediaAgentGroupId?: string;
|
|
138
|
+
meetClusterName?: string;
|
|
139
|
+
meetingLookupUrl?: string;
|
|
140
|
+
meetingOrgId?: string;
|
|
141
|
+
msteamsTenantGuid?: string;
|
|
142
|
+
msteamsConferenceId?: string;
|
|
143
|
+
oauth2ClientId?: string;
|
|
144
|
+
orgId?: string;
|
|
145
|
+
roomId?: string;
|
|
146
|
+
sipCallId?: string;
|
|
147
|
+
sipSessionId?: {
|
|
148
|
+
local?: string;
|
|
149
|
+
remote?: string;
|
|
150
|
+
};
|
|
151
|
+
sipUri?: string;
|
|
152
|
+
subConfId?: string;
|
|
153
|
+
tenantId?: string;
|
|
154
|
+
trackingId?: string;
|
|
155
|
+
userId?: string;
|
|
156
|
+
venueId?: string;
|
|
157
|
+
venueUrl?: string;
|
|
158
|
+
whiteboardUrl?: string;
|
|
159
|
+
webexConferenceId?: number;
|
|
160
|
+
webexClusterName?: string;
|
|
161
|
+
webexConferenceIdStr?: string;
|
|
162
|
+
webexDataCenter?: string;
|
|
163
|
+
webexGuestId?: number;
|
|
164
|
+
webexMeetingId?: number;
|
|
165
|
+
webexNodeId?: number;
|
|
166
|
+
webexSiteId?: number;
|
|
167
|
+
webexSiteName?: string;
|
|
168
|
+
webexUserId?: number;
|
|
169
|
+
webexWebDomain?: string;
|
|
170
|
+
correlationId: string;
|
|
171
|
+
} | {
|
|
172
|
+
attendeeId?: string;
|
|
173
|
+
breakoutGroupId?: string;
|
|
174
|
+
breakoutMoveId?: string;
|
|
175
|
+
breakoutSessionId?: string;
|
|
176
|
+
confluenceId?: string;
|
|
177
|
+
cpaasIdentifiers?: {
|
|
178
|
+
imiTenantId: string;
|
|
179
|
+
devClientId: string;
|
|
180
|
+
imiServiceId: string;
|
|
181
|
+
imiAppId: string;
|
|
182
|
+
sessionId: string;
|
|
183
|
+
sessionInstanceId: string;
|
|
184
|
+
};
|
|
185
|
+
csdmDeviceUrl?: string;
|
|
186
|
+
destinationBreakoutSessionId?: string;
|
|
187
|
+
destinationLocusSessionId?: string;
|
|
188
|
+
destinationLocusUrl?: string;
|
|
189
|
+
destinationVenueId?: string;
|
|
190
|
+
deviceId?: string;
|
|
191
|
+
ivrCallId?: string;
|
|
192
|
+
ivrDialogId?: string;
|
|
193
|
+
ivrId?: string;
|
|
194
|
+
locusId?: string;
|
|
195
|
+
locusSessionId?: string;
|
|
196
|
+
locusStartTime?: string;
|
|
197
|
+
locusUrl?: string;
|
|
198
|
+
mediaAgentAlias?: string;
|
|
199
|
+
mediaAgentGroupId?: string;
|
|
200
|
+
meetClusterName?: string;
|
|
201
|
+
meetingLookupUrl?: string;
|
|
202
|
+
meetingOrgId?: string;
|
|
203
|
+
msteamsTenantGuid?: string;
|
|
204
|
+
msteamsConferenceId?: string;
|
|
205
|
+
oauth2ClientId?: string;
|
|
206
|
+
orgId?: string;
|
|
207
|
+
provisionalCorrelationId?: string;
|
|
208
|
+
roomId?: string;
|
|
209
|
+
sipCallId?: string;
|
|
210
|
+
sipSessionId?: {
|
|
211
|
+
local?: string;
|
|
212
|
+
remote?: string;
|
|
213
|
+
};
|
|
214
|
+
sipUri?: string;
|
|
215
|
+
subConfId?: string;
|
|
216
|
+
tenantId?: string;
|
|
217
|
+
trackingId?: string;
|
|
218
|
+
userId?: string;
|
|
219
|
+
venueId?: string;
|
|
220
|
+
venueUrl?: string;
|
|
221
|
+
whiteboardUrl?: string;
|
|
222
|
+
webexConferenceId?: number;
|
|
223
|
+
webexClusterName?: string;
|
|
224
|
+
webexConferenceIdStr?: string;
|
|
225
|
+
webexDataCenter?: string;
|
|
226
|
+
webexGuestId?: number;
|
|
227
|
+
webexMeetingId?: number;
|
|
228
|
+
webexNodeId?: number;
|
|
229
|
+
webexSiteId?: number;
|
|
230
|
+
webexSiteName?: string;
|
|
231
|
+
webexUserId?: number;
|
|
232
|
+
webexWebDomain?: string;
|
|
233
|
+
correlationId: string;
|
|
234
|
+
};
|
|
235
|
+
/**
|
|
236
|
+
* Create diagnostic event, which can hold client event, feature event or MQE event data.
|
|
237
|
+
* This just initiates the shared properties that are required for all the 3 event categories.
|
|
238
|
+
* @param eventData
|
|
239
|
+
* @param options
|
|
240
|
+
* @returns
|
|
241
|
+
*/
|
|
242
|
+
prepareDiagnosticEvent(eventData: Event['event'], options: any): Event;
|
|
243
|
+
/**
|
|
244
|
+
* TODO: NOT IMPLEMENTED
|
|
245
|
+
* Submit Feature Event
|
|
246
|
+
* @returns
|
|
247
|
+
*/
|
|
248
|
+
submitFeatureEvent(): void;
|
|
249
|
+
/**
|
|
250
|
+
* Submit Media Quality Event
|
|
251
|
+
* @param args - submit params
|
|
252
|
+
* @param arg.name - event key
|
|
253
|
+
* @param arg.payload - additional payload to be merge with the default payload
|
|
254
|
+
* @param arg.options - options
|
|
255
|
+
*/
|
|
256
|
+
submitMQE({ name, payload, options, }: {
|
|
257
|
+
name: MediaQualityEvent['name'];
|
|
258
|
+
payload: SubmitMQEPayload;
|
|
259
|
+
options: SubmitMQEOptions;
|
|
260
|
+
}): void;
|
|
261
|
+
/**
|
|
262
|
+
* Return Client Event payload by client error code
|
|
263
|
+
* @param arg - get error arg
|
|
264
|
+
* @param arg.clientErrorCode
|
|
265
|
+
* @param arg.serviceErrorCode
|
|
266
|
+
* @returns
|
|
267
|
+
*/
|
|
268
|
+
getErrorPayloadForClientErrorCode({ clientErrorCode, serviceErrorCode, }: {
|
|
269
|
+
clientErrorCode: number;
|
|
270
|
+
serviceErrorCode: any;
|
|
271
|
+
}): ClientEventError;
|
|
272
|
+
/**
|
|
273
|
+
* Generate error payload for Client Event
|
|
274
|
+
* @param rawError
|
|
275
|
+
*/
|
|
276
|
+
generateClientEventErrorPayload(rawError: any): {
|
|
277
|
+
fatal: boolean;
|
|
278
|
+
category: "other" | "signaling" | "media" | "expected";
|
|
279
|
+
errorDescription?: string;
|
|
280
|
+
errorCode?: number;
|
|
281
|
+
errorCodeStr?: string;
|
|
282
|
+
httpCode?: number;
|
|
283
|
+
errorData?: {};
|
|
284
|
+
shownToUser: boolean;
|
|
285
|
+
serviceErrorCode?: number;
|
|
286
|
+
name: "other" | "media-engine" | "ice.failed" | "locus.response" | "locus.leave" | "client.leave" | "media-device" | "media-sca";
|
|
287
|
+
};
|
|
288
|
+
/**
|
|
289
|
+
* Create client event object for in meeting events
|
|
290
|
+
* @param arg - create args
|
|
291
|
+
* @param arg.event - event key
|
|
292
|
+
* @param arg.options - options
|
|
293
|
+
* @returns object
|
|
294
|
+
*/
|
|
295
|
+
private createClientEventObjectInMeeting;
|
|
296
|
+
/**
|
|
297
|
+
* Create client event object for pre meeting events
|
|
298
|
+
* @param arg - create args
|
|
299
|
+
* @param arg.event - event key
|
|
300
|
+
* @param arg.options - payload
|
|
301
|
+
* @returns object
|
|
302
|
+
*/
|
|
303
|
+
private createClientEventObjectPreMeeting;
|
|
304
|
+
/**
|
|
305
|
+
* Submit Client Event CA event.
|
|
306
|
+
* @param arg - submit params
|
|
307
|
+
* @param arg.event - event key
|
|
308
|
+
* @param arg.payload - additional payload to be merged with default payload
|
|
309
|
+
* @param arg.options - payload
|
|
310
|
+
* @throws
|
|
311
|
+
*/
|
|
312
|
+
submitClientEvent({ name, payload, options, }: {
|
|
313
|
+
name: ClientEvent['name'];
|
|
314
|
+
payload?: ClientEventPayload;
|
|
315
|
+
options: SubmitClientEventOptions;
|
|
316
|
+
}): void;
|
|
317
|
+
/**
|
|
318
|
+
* Prepare the event and send the request to metrics-a service.
|
|
319
|
+
* @param event
|
|
320
|
+
* @returns promise
|
|
321
|
+
*/
|
|
322
|
+
submitToCallDiagnostics(event: Event): Promise<void>;
|
|
323
|
+
}
|
|
324
|
+
export {};
|