@webex/plugin-meetings 3.4.0-next.8 → 3.4.0-next.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meetings/index.js +4 -2
- package/dist/meetings/index.js.map +1 -1
- package/dist/reachability/index.js +22 -17
- package/dist/reachability/index.js.map +1 -1
- package/dist/reconnection-manager/index.js +1 -1
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/types/meetings/index.d.ts +2 -1
- package/dist/types/reachability/index.d.ts +3 -1
- package/dist/webinar/index.js +1 -1
- package/package.json +3 -3
- package/src/meetings/index.ts +4 -3
- package/src/reachability/index.ts +7 -1
- package/src/reconnection-manager/index.ts +1 -1
- package/test/unit/spec/meetings/index.js +30 -3
- package/test/unit/spec/reachability/index.ts +52 -14
|
@@ -101,6 +101,7 @@ var Reachability = exports.default = /*#__PURE__*/function (_EventsScope) {
|
|
|
101
101
|
xtls: 0
|
|
102
102
|
}
|
|
103
103
|
});
|
|
104
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastTrigger", void 0);
|
|
104
105
|
_this.webex = webex;
|
|
105
106
|
|
|
106
107
|
/**
|
|
@@ -169,6 +170,7 @@ var Reachability = exports.default = /*#__PURE__*/function (_EventsScope) {
|
|
|
169
170
|
}()
|
|
170
171
|
/**
|
|
171
172
|
* Gets a list of media clusters from the backend and performs reachability checks on all the clusters
|
|
173
|
+
* @param {string} trigger - explains the reason for starting reachability
|
|
172
174
|
* @returns {Promise<ReachabilityResults>} reachability results
|
|
173
175
|
* @public
|
|
174
176
|
* @memberof Reachability
|
|
@@ -177,44 +179,46 @@ var Reachability = exports.default = /*#__PURE__*/function (_EventsScope) {
|
|
|
177
179
|
}, {
|
|
178
180
|
key: "gatherReachability",
|
|
179
181
|
value: (function () {
|
|
180
|
-
var _gatherReachability = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
182
|
+
var _gatherReachability = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(trigger) {
|
|
181
183
|
var _yield$this$getCluste, clusters, joinCookie;
|
|
182
184
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
183
185
|
while (1) switch (_context2.prev = _context2.next) {
|
|
184
186
|
case 0:
|
|
185
187
|
_context2.prev = 0;
|
|
188
|
+
this.lastTrigger = trigger;
|
|
189
|
+
|
|
186
190
|
// kick off ip version detection. For now we don't await it, as we're doing it
|
|
187
191
|
// to gather the timings and send them with our reachability metrics
|
|
188
192
|
// @ts-ignore
|
|
189
193
|
this.webex.internal.device.ipNetworkDetector.detect();
|
|
190
|
-
_context2.next =
|
|
194
|
+
_context2.next = 5;
|
|
191
195
|
return this.getClusters();
|
|
192
|
-
case
|
|
196
|
+
case 5:
|
|
193
197
|
_yield$this$getCluste = _context2.sent;
|
|
194
198
|
clusters = _yield$this$getCluste.clusters;
|
|
195
199
|
joinCookie = _yield$this$getCluste.joinCookie;
|
|
196
|
-
_context2.next =
|
|
200
|
+
_context2.next = 10;
|
|
197
201
|
return this.webex.boundedStorage.put(this.namespace, _constants.REACHABILITY.localStorageJoinCookie, (0, _stringify.default)(joinCookie));
|
|
198
|
-
case
|
|
202
|
+
case 10:
|
|
199
203
|
this.reachabilityDefer = new _common.Defer();
|
|
200
204
|
|
|
201
205
|
// Perform Reachability Check
|
|
202
|
-
_context2.next =
|
|
206
|
+
_context2.next = 13;
|
|
203
207
|
return this.performReachabilityChecks(clusters);
|
|
204
|
-
case
|
|
208
|
+
case 13:
|
|
205
209
|
return _context2.abrupt("return", this.reachabilityDefer.promise);
|
|
206
|
-
case
|
|
207
|
-
_context2.prev =
|
|
210
|
+
case 16:
|
|
211
|
+
_context2.prev = 16;
|
|
208
212
|
_context2.t0 = _context2["catch"](0);
|
|
209
213
|
_loggerProxy.default.logger.error("Reachability:index#gatherReachability --> Error:", _context2.t0);
|
|
210
214
|
return _context2.abrupt("return", {});
|
|
211
|
-
case
|
|
215
|
+
case 20:
|
|
212
216
|
case "end":
|
|
213
217
|
return _context2.stop();
|
|
214
218
|
}
|
|
215
|
-
}, _callee2, this, [[0,
|
|
219
|
+
}, _callee2, this, [[0, 16]]);
|
|
216
220
|
}));
|
|
217
|
-
function gatherReachability() {
|
|
221
|
+
function gatherReachability(_x) {
|
|
218
222
|
return _gatherReachability.apply(this, arguments);
|
|
219
223
|
}
|
|
220
224
|
return gatherReachability;
|
|
@@ -677,7 +681,8 @@ var Reachability = exports.default = /*#__PURE__*/function (_EventsScope) {
|
|
|
677
681
|
firstMdns: this.webex.internal.device.ipNetworkDetector.firstMdns,
|
|
678
682
|
// @ts-ignore
|
|
679
683
|
totalTime: this.webex.internal.device.ipNetworkDetector.totalTime
|
|
680
|
-
}
|
|
684
|
+
},
|
|
685
|
+
trigger: this.lastTrigger
|
|
681
686
|
};
|
|
682
687
|
_metrics.default.sendBehavioralMetric(_constants2.default.REACHABILITY_COMPLETED, _metrics.default.prepareMetricFields(stats));
|
|
683
688
|
case 4:
|
|
@@ -750,7 +755,7 @@ var Reachability = exports.default = /*#__PURE__*/function (_EventsScope) {
|
|
|
750
755
|
}
|
|
751
756
|
}, _callee8, this);
|
|
752
757
|
}));
|
|
753
|
-
function storeResults(
|
|
758
|
+
function storeResults(_x2) {
|
|
754
759
|
return _storeResults.apply(this, arguments);
|
|
755
760
|
}
|
|
756
761
|
return storeResults;
|
|
@@ -898,7 +903,7 @@ var Reachability = exports.default = /*#__PURE__*/function (_EventsScope) {
|
|
|
898
903
|
}
|
|
899
904
|
}, _callee9);
|
|
900
905
|
}));
|
|
901
|
-
return function (
|
|
906
|
+
return function (_x4) {
|
|
902
907
|
return _ref4.apply(this, arguments);
|
|
903
908
|
};
|
|
904
909
|
}());
|
|
@@ -918,7 +923,7 @@ var Reachability = exports.default = /*#__PURE__*/function (_EventsScope) {
|
|
|
918
923
|
}
|
|
919
924
|
}, _callee10);
|
|
920
925
|
}));
|
|
921
|
-
return function (
|
|
926
|
+
return function (_x5) {
|
|
922
927
|
return _ref5.apply(this, arguments);
|
|
923
928
|
};
|
|
924
929
|
}());
|
|
@@ -930,7 +935,7 @@ var Reachability = exports.default = /*#__PURE__*/function (_EventsScope) {
|
|
|
930
935
|
}
|
|
931
936
|
}, _callee11, this);
|
|
932
937
|
}));
|
|
933
|
-
function performReachabilityChecks(
|
|
938
|
+
function performReachabilityChecks(_x3) {
|
|
934
939
|
return _performReachabilityChecks.apply(this, arguments);
|
|
935
940
|
}
|
|
936
941
|
return performReachabilityChecks;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_lodash","require","_common","_loggerProxy","_interopRequireDefault","_util","_constants","_request","_clusterReachability","_eventsScope","_constants2","_metrics","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","OVERALL_TIMEOUT","Reachability","exports","_EventsScope","_inherits2","_super","webex","_this","_classCallCheck2","_assertThisInitialized2","REACHABILITY","namespace","videoMesh","udp","public","tcp","xtls","reachabilityRequest","ReachabilityRequest","clusterReachability","_createClass2","key","value","_getClusters","_asyncToGenerator2","_regenerator","mark","_callee","isRetry","_yield$this$reachabil","clusters","joinCookie","_args","wrap","_callee$","_context","prev","next","undefined","getClusters","MeetingUtil","getIpVersion","sent","abrupt","t0","LoggerProxy","logger","error","concat","stop","_gatherReachability","_callee2","_yield$this$getCluste","_callee2$","_context2","internal","device","ipNetworkDetector","detect","boundedStorage","put","localStorageJoinCookie","_stringify","reachabilityDefer","Defer","performReachabilityChecks","promise","gatherReachability","_getReachabilityMetrics","_callee3","stats","updateStats","resultsJson","results","_callee3$","_context3","reachability_public_udp_success","reachability_public_udp_failed","reachability_public_tcp_success","reachability_public_tcp_failed","reachability_public_xtls_success","reachability_public_xtls_failed","reachability_vmn_udp_success","reachability_vmn_udp_failed","reachability_vmn_tcp_success","reachability_vmn_tcp_failed","reachability_vmn_xtls_success","reachability_vmn_xtls_failed","clusterType","outcome","get","localStorageResult","JSON","parse","_values","isVideoMesh","warn","getReachabilityMetrics","mapTransportResultToBackendDataFormat","transportResult","output","_i","_Object$entries","_entries","_Object$entries$_i","_slicedToArray2","reachable","untested","latencyInMilliseconds","toString","_getReachabilityResults","_callee4","_this2","allClusterResults","_callee4$","_context4","mapValues","clusterResult","getReachabilityResults","_isAnyPublicClusterReachable","_callee5","reachabilityData","reachabilityResults","_callee5$","_context5","catch","some","_result$udp","_result$tcp","isAnyPublicClusterReachable","_isWebexMediaBackendUnreachable","_callee6","unreachable","protocols","_callee6$","_context6","tested","_keys","protocol","_result$protocol","_result$protocol2","every","isWebexMediaBackendUnreachable","getUnreachableClusters","unreachableList","_ref","_ref2","getResult","name","logUnreachableClusters","list","_ref3","log","areAllPublicClusterResultsReady","isEqual","expectedResultsCount","resultsCount","areAllResultsReady","resolveReachabilityPromise","_this$reachabilityDef","vmnTimer","clearTimeout","publicCloudTimer","resolve","abortClusterReachability","abort","getStatistics","values","map","min","max","average","Math","_toConsumableArray2","mean","_sendMetric","_callee7","_callee7$","_context7","vmn","ipver","firstIpV4","firstIpV6","firstMdns","totalTime","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","REACHABILITY_COMPLETED","prepareMetricFields","sendMetric","startTimers","_this3","setTimeout","overallTimer","emit","file","function","_storeResults","_callee8","_callee8$","_context8","storeResults","_x","resetResultCounters","_performReachabilityChecks","_callee11","clusterList","_this4","isFirstResult","_callee11$","_context11","config","meetings","experimental","enableTcpReachability","enableTlsReachability","cluster","includeTcpReachability","includeTlsReachability","ClusterReachability","on","Events","resultReady","_ref4","_callee9","data","clientMediaIPs","_callee9$","_context9","_x3","clientMediaIpsUpdated","_ref5","_callee10","_callee10$","_context10","_x4","start","_x2","EventsScope"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable class-methods-use-this */\nimport {isEqual, mapValues, mean} from 'lodash';\n\nimport {Defer} from '@webex/common';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport {REACHABILITY} from '../constants';\n\nimport ReachabilityRequest, {ClusterList} from './request';\nimport {\n ClientMediaIpsUpdatedEventData,\n ClusterReachability,\n ClusterReachabilityResult,\n Events,\n ResultEventData,\n TransportResult,\n} from './clusterReachability';\nimport EventsScope from '../common/events/events-scope';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport Metrics from '../metrics';\n\nexport type ReachabilityMetrics = {\n reachability_public_udp_success: number;\n reachability_public_udp_failed: number;\n reachability_public_tcp_success: number;\n reachability_public_tcp_failed: number;\n reachability_public_xtls_success: number;\n reachability_public_xtls_failed: number;\n reachability_vmn_udp_success: number;\n reachability_vmn_udp_failed: number;\n reachability_vmn_tcp_success: number;\n reachability_vmn_tcp_failed: number;\n reachability_vmn_xtls_success: number;\n reachability_vmn_xtls_failed: number;\n};\n\n/**\n * This is the type that matches what backend expects us to send to them. It is a bit weird, because\n * it uses strings instead of booleans and numbers, but that's what they require.\n */\nexport type TransportResultForBackend = {\n reachable?: 'true' | 'false';\n latencyInMilliseconds?: string;\n clientMediaIPs?: string[];\n untested?: 'true';\n};\n\nexport type ReachabilityResultForBackend = {\n udp: TransportResultForBackend;\n tcp: TransportResultForBackend;\n xtls: TransportResultForBackend;\n};\n\n// this is the type that is required by the backend when we send them reachability results\nexport type ReachabilityResultsForBackend = Record<string, ReachabilityResultForBackend>;\n\n// this is the type used by Reachability class internally and stored in local storage\nexport type ReachabilityResults = Record<\n string,\n ClusterReachabilityResult & {\n isVideoMesh?: boolean;\n }\n>;\n\n// timeouts in seconds\nconst DEFAULT_TIMEOUT = 3;\nconst VIDEO_MESH_TIMEOUT = 1;\nconst OVERALL_TIMEOUT = 15;\n\n/**\n * @class Reachability\n * @export\n */\nexport default class Reachability extends EventsScope {\n namespace = REACHABILITY.namespace;\n webex: object;\n reachabilityRequest: ReachabilityRequest;\n clusterReachability: {\n [key: string]: ClusterReachability;\n };\n\n reachabilityDefer?: Defer;\n\n vmnTimer?: ReturnType<typeof setTimeout>;\n publicCloudTimer?: ReturnType<typeof setTimeout>;\n overallTimer?: ReturnType<typeof setTimeout>;\n\n expectedResultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n resultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n\n /**\n * Creates an instance of Reachability.\n * @param {object} webex\n * @memberof Reachability\n */\n constructor(webex: object) {\n super();\n this.webex = webex;\n\n /**\n * internal request object for the server\n * @instance\n * @type {Array}\n * @private\n * @memberof Reachability\n */\n this.reachabilityRequest = new ReachabilityRequest(this.webex);\n\n this.clusterReachability = {};\n }\n\n /**\n * Fetches the list of media clusters from the backend\n * @param {boolean} isRetry\n * @private\n * @returns {Promise<{clusters: ClusterList, joinCookie: any}>}\n */\n async getClusters(isRetry = false): Promise<{clusters: ClusterList; joinCookie: any}> {\n try {\n const {clusters, joinCookie} = await this.reachabilityRequest.getClusters(\n MeetingUtil.getIpVersion(this.webex)\n );\n\n return {clusters, joinCookie};\n } catch (error) {\n if (isRetry) {\n throw error;\n }\n\n LoggerProxy.logger.error(\n `Reachability:index#getClusters --> Failed with error: ${error}, retrying...`\n );\n\n return this.getClusters(true);\n }\n }\n\n /**\n * Gets a list of media clusters from the backend and performs reachability checks on all the clusters\n * @returns {Promise<ReachabilityResults>} reachability results\n * @public\n * @memberof Reachability\n */\n public async gatherReachability(): Promise<ReachabilityResults> {\n // Fetch clusters and measure latency\n try {\n // kick off ip version detection. For now we don't await it, as we're doing it\n // to gather the timings and send them with our reachability metrics\n // @ts-ignore\n this.webex.internal.device.ipNetworkDetector.detect();\n\n const {clusters, joinCookie} = await this.getClusters();\n\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageJoinCookie,\n JSON.stringify(joinCookie)\n );\n\n this.reachabilityDefer = new Defer();\n\n // Perform Reachability Check\n await this.performReachabilityChecks(clusters);\n\n return this.reachabilityDefer.promise;\n } catch (error) {\n LoggerProxy.logger.error(`Reachability:index#gatherReachability --> Error:`, error);\n\n return {};\n }\n }\n\n /**\n * Returns statistics about last reachability results. The returned value is an object\n * with a flat list of properties so that it can be easily sent with metrics\n *\n * @returns {Promise} Promise with metrics values, it never rejects/throws.\n */\n async getReachabilityMetrics(): Promise<ReachabilityMetrics> {\n const stats: ReachabilityMetrics = {\n reachability_public_udp_success: 0,\n reachability_public_udp_failed: 0,\n reachability_public_tcp_success: 0,\n reachability_public_tcp_failed: 0,\n reachability_public_xtls_success: 0,\n reachability_public_xtls_failed: 0,\n reachability_vmn_udp_success: 0,\n reachability_vmn_udp_failed: 0,\n reachability_vmn_tcp_success: 0,\n reachability_vmn_tcp_failed: 0,\n reachability_vmn_xtls_success: 0,\n reachability_vmn_xtls_failed: 0,\n };\n\n const updateStats = (clusterType: 'public' | 'vmn', result: ClusterReachabilityResult) => {\n if (result.udp && result.udp.result !== 'untested') {\n const outcome = result.udp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_udp_${outcome}`] += 1;\n }\n if (result.tcp && result.tcp.result !== 'untested') {\n const outcome = result.tcp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_tcp_${outcome}`] += 1;\n }\n if (result.xtls && result.xtls.result !== 'untested') {\n const outcome = result.xtls.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_xtls_${outcome}`] += 1;\n }\n };\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const results: ReachabilityResults = JSON.parse(resultsJson);\n\n Object.values(results).forEach((result) => {\n updateStats(result.isVideoMesh ? 'vmn' : 'public', result);\n });\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Roap:request#getReachabilityMetrics --> Error parsing reachability data: ',\n e\n );\n }\n\n return stats;\n }\n\n /**\n * Maps our internal transport result to the format that backend expects\n * @param {TransportResult} transportResult\n * @returns {TransportResultForBackend}\n */\n private mapTransportResultToBackendDataFormat(\n transportResult: TransportResult\n ): TransportResultForBackend {\n const output: TransportResultForBackend = {};\n\n for (const [key, value] of Object.entries(transportResult)) {\n switch (key) {\n case 'result':\n switch (value) {\n case 'reachable':\n output.reachable = 'true';\n break;\n case 'unreachable':\n output.reachable = 'false';\n break;\n case 'untested':\n output.untested = 'true';\n break;\n }\n break;\n case 'latencyInMilliseconds':\n output.latencyInMilliseconds = value.toString();\n break;\n default:\n output[key] = value;\n }\n }\n\n return output;\n }\n\n /**\n * Reachability results as an object in the format that backend expects\n *\n * @returns {any} reachability results that need to be sent to the backend\n */\n async getReachabilityResults(): Promise<ReachabilityResultsForBackend | undefined> {\n let results: ReachabilityResultsForBackend;\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const allClusterResults: ReachabilityResults = JSON.parse(resultsJson);\n\n results = mapValues(allClusterResults, (clusterResult) => ({\n udp: this.mapTransportResultToBackendDataFormat(clusterResult.udp || {result: 'untested'}),\n tcp: this.mapTransportResultToBackendDataFormat(clusterResult.tcp || {result: 'untested'}),\n xtls: this.mapTransportResultToBackendDataFormat(\n clusterResult.xtls || {result: 'untested'}\n ),\n }));\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Roap:request#attachReachabilityData --> Error parsing reachability data: ',\n e\n );\n }\n\n return results;\n }\n\n /**\n * fetches reachability data and checks for cluster reachability\n * @returns {boolean}\n * @public\n * @memberof Reachability\n */\n async isAnyPublicClusterReachable() {\n let reachable = false;\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n reachable = Object.values(reachabilityResults).some(\n (result) =>\n !result.isVideoMesh &&\n (result.udp?.result === 'reachable' || result.tcp?.result === 'reachable')\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return reachable;\n }\n\n /**\n * Returns true only if ALL protocols (UDP, TCP and TLS) have been tested and none\n * of the media clusters where reachable with any of the protocols. This is done\n * irrespective of the config, so for example:\n * if config.meetings.experimental.enableTlsReachability === false,\n * it will return false, because TLS reachability won't be tested,\n * so we can't say for sure that media backend is unreachable over TLS.\n *\n * @returns {boolean}\n */\n async isWebexMediaBackendUnreachable() {\n let unreachable = false;\n\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n const protocols = {\n udp: {tested: false, reachable: undefined},\n tcp: {tested: false, reachable: undefined},\n xtls: {tested: false, reachable: undefined},\n };\n\n Object.values(reachabilityResults).forEach((result) => {\n Object.keys(protocols).forEach((protocol) => {\n if (\n result[protocol]?.result === 'reachable' ||\n result[protocol]?.result === 'unreachable'\n ) {\n protocols[protocol].tested = true;\n\n // we need at least 1 'reachable' result to mark the whole protocol as reachable\n if (result[protocol].result === 'reachable') {\n protocols[protocol].reachable = true;\n }\n }\n });\n });\n\n unreachable = Object.values(protocols).every(\n (protocol) => protocol.tested && !protocol.reachable\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return unreachable;\n }\n\n /**\n * Get list of all unreachable clusters\n * @returns {array} Unreachable clusters\n * @private\n * @memberof Reachability\n */\n private getUnreachableClusters(): Array<{name: string; protocol: string}> {\n const unreachableList = [];\n\n Object.entries(this.clusterReachability).forEach(([key, clusterReachability]) => {\n const result = clusterReachability.getResult();\n\n if (result.udp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'udp'});\n }\n if (result.tcp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'tcp'});\n }\n if (result.xtls.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'xtls'});\n }\n });\n\n return unreachableList;\n }\n\n /**\n * Make a log of unreachable clusters.\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private logUnreachableClusters() {\n const list = this.getUnreachableClusters();\n\n list.forEach(({name, protocol}) => {\n LoggerProxy.logger.log(\n `Reachability:index#logUnreachableClusters --> failed to reach ${name} over ${protocol}`\n );\n });\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the public clusters\n * In other words, it means that all public clusters are reachable over each protocol,\n * because we only get a \"result\" if we managed to reach a cluster\n *\n * @returns {boolean}\n */\n private areAllPublicClusterResultsReady() {\n return isEqual(this.expectedResultsCount.public, this.resultsCount.public);\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the clusters\n *\n * @returns {boolean}\n */\n private areAllResultsReady() {\n return isEqual(this.expectedResultsCount, this.resultsCount);\n }\n\n /**\n * Resolves the promise returned by gatherReachability() method\n * @returns {void}\n */\n private resolveReachabilityPromise() {\n if (this.vmnTimer) {\n clearTimeout(this.vmnTimer);\n }\n if (this.publicCloudTimer) {\n clearTimeout(this.publicCloudTimer);\n }\n\n this.logUnreachableClusters();\n this.reachabilityDefer?.resolve();\n }\n\n /**\n * Aborts all cluster reachability checks that are in progress\n *\n * @returns {void}\n */\n private abortClusterReachability() {\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n clusterReachability.abort();\n });\n }\n\n /**\n * Helper function for calculating min/max/average values of latency\n *\n * @param {Array<any>} results\n * @param {string} protocol\n * @param {boolean} isVideoMesh\n * @returns {{min:number, max: number, average: number}}\n */\n protected getStatistics(\n results: Array<ClusterReachabilityResult & {isVideoMesh: boolean}>,\n protocol: 'udp' | 'tcp' | 'xtls',\n isVideoMesh: boolean\n ) {\n const values = results\n .filter((result) => result.isVideoMesh === isVideoMesh)\n .filter((result) => result[protocol].result === 'reachable')\n .map((result) => result[protocol].latencyInMilliseconds);\n\n if (values.length === 0) {\n return {\n min: -1,\n max: -1,\n average: -1,\n };\n }\n\n return {\n min: Math.min(...values),\n max: Math.max(...values),\n average: mean(values),\n };\n }\n\n /**\n * Sends a metric with all the statistics about how long reachability took\n *\n * @returns {void}\n */\n protected async sendMetric() {\n const results = [];\n\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n results.push({\n ...clusterReachability.getResult(),\n isVideoMesh: clusterReachability.isVideoMesh,\n });\n });\n\n const stats = {\n vmn: {\n udp: this.getStatistics(results, 'udp', true),\n },\n public: {\n udp: this.getStatistics(results, 'udp', false),\n tcp: this.getStatistics(results, 'tcp', false),\n xtls: this.getStatistics(results, 'xtls', false),\n },\n ipver: {\n // @ts-ignore\n firstIpV4: this.webex.internal.device.ipNetworkDetector.firstIpV4,\n // @ts-ignore\n firstIpV6: this.webex.internal.device.ipNetworkDetector.firstIpV6,\n // @ts-ignore\n firstMdns: this.webex.internal.device.ipNetworkDetector.firstMdns,\n // @ts-ignore\n totalTime: this.webex.internal.device.ipNetworkDetector.totalTime,\n },\n };\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.REACHABILITY_COMPLETED,\n Metrics.prepareMetricFields(stats)\n );\n }\n\n /**\n * Starts all the timers used for various timeouts\n *\n * @returns {void}\n */\n private startTimers() {\n this.vmnTimer = setTimeout(() => {\n this.vmnTimer = undefined;\n // if we are only missing VMN results, then we don't want to wait for them any longer\n // as they are likely to fail if users are not on corporate network\n if (this.areAllPublicClusterResultsReady()) {\n LoggerProxy.logger.log(\n 'Reachability:index#startTimers --> Reachability checks timed out (VMN timeout)'\n );\n\n this.resolveReachabilityPromise();\n }\n }, VIDEO_MESH_TIMEOUT * 1000);\n\n this.publicCloudTimer = setTimeout(() => {\n this.publicCloudTimer = undefined;\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks timed out (${DEFAULT_TIMEOUT}s)`\n );\n\n // resolve the promise, so that the client won't be blocked waiting on meetings.register() for too long\n this.resolveReachabilityPromise();\n }, DEFAULT_TIMEOUT * 1000);\n\n this.overallTimer = setTimeout(() => {\n this.overallTimer = undefined;\n this.abortClusterReachability();\n this.emit(\n {\n file: 'reachability',\n function: 'overallTimer timeout',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks fully timed out (${OVERALL_TIMEOUT}s)`\n );\n }, OVERALL_TIMEOUT * 1000);\n }\n\n /**\n * Stores given reachability results in local storage\n *\n * @param {ReachabilityResults} results\n * @returns {Promise<void>}\n */\n private async storeResults(results: ReachabilityResults) {\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageResult,\n JSON.stringify(results)\n );\n }\n\n /**\n * Resets all the internal counters that keep track of the results\n *\n * @returns {void}\n */\n private resetResultCounters() {\n this.expectedResultsCount.videoMesh.udp = 0;\n this.expectedResultsCount.public.udp = 0;\n this.expectedResultsCount.public.tcp = 0;\n this.expectedResultsCount.public.xtls = 0;\n\n this.resultsCount.videoMesh.udp = 0;\n this.resultsCount.public.udp = 0;\n this.resultsCount.public.tcp = 0;\n this.resultsCount.public.xtls = 0;\n }\n\n /**\n * Performs reachability checks for all clusters\n * @param {ClusterList} clusterList\n * @returns {Promise<void>} promise that's resolved as soon as the checks are started\n */\n private async performReachabilityChecks(clusterList: ClusterList) {\n const results: ReachabilityResults = {};\n\n this.clusterReachability = {};\n\n if (!clusterList || !Object.keys(clusterList).length) {\n return;\n }\n\n LoggerProxy.logger.log(\n `Reachability:index#performReachabilityChecks --> doing UDP${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability ? ',TCP' : ''\n }${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability ? ',TLS' : ''\n } reachability checks`\n );\n\n this.resetResultCounters();\n this.startTimers();\n\n // sanitize the urls in the clusterList\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n // Linus doesn't support TCP reachability checks on video mesh nodes\n const includeTcpReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability && !cluster.isVideoMesh;\n\n if (!includeTcpReachability) {\n cluster.tcp = [];\n }\n\n // Linus doesn't support xTLS reachability checks on video mesh nodes\n const includeTlsReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability && !cluster.isVideoMesh;\n\n if (!includeTlsReachability) {\n cluster.xtls = [];\n }\n\n // initialize the result for this cluster\n results[key] = {\n udp: {result: cluster.udp.length > 0 ? 'unreachable' : 'untested'},\n tcp: {result: cluster.tcp.length > 0 ? 'unreachable' : 'untested'},\n xtls: {result: cluster.xtls.length > 0 ? 'unreachable' : 'untested'},\n isVideoMesh: cluster.isVideoMesh,\n };\n\n // update expected results counters to include this cluster\n this.expectedResultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'].udp +=\n cluster.udp.length;\n if (!cluster.isVideoMesh) {\n this.expectedResultsCount.public.tcp += cluster.tcp.length;\n this.expectedResultsCount.public.xtls += cluster.xtls.length;\n }\n });\n\n const isFirstResult = {\n udp: true,\n tcp: true,\n xtls: true,\n };\n\n // save the initialized results (in case we don't get any \"resultReady\" events at all)\n await this.storeResults(results);\n\n // now start the reachability on all the clusters\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n this.clusterReachability[key] = new ClusterReachability(key, cluster);\n this.clusterReachability[key].on(Events.resultReady, async (data: ResultEventData) => {\n const {protocol, result, clientMediaIPs, latencyInMilliseconds} = data;\n\n if (isFirstResult[protocol]) {\n this.emit(\n {\n file: 'reachability',\n function: 'resultReady event handler',\n },\n 'reachability:firstResultAvailable',\n {\n protocol,\n }\n );\n isFirstResult[protocol] = false;\n }\n this.resultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'][protocol] += 1;\n\n const areAllResultsReady = this.areAllResultsReady();\n\n results[key][protocol].result = result;\n results[key][protocol].clientMediaIPs = clientMediaIPs;\n results[key][protocol].latencyInMilliseconds = latencyInMilliseconds;\n\n await this.storeResults(results);\n\n if (areAllResultsReady) {\n clearTimeout(this.overallTimer);\n this.overallTimer = undefined;\n this.emit(\n {\n file: 'reachability',\n function: 'performReachabilityChecks',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#gatherReachability --> Reachability checks fully completed`\n );\n this.resolveReachabilityPromise();\n }\n });\n\n // clientMediaIps can be updated independently from the results, so we need to listen for them too\n this.clusterReachability[key].on(\n Events.clientMediaIpsUpdated,\n async (data: ClientMediaIpsUpdatedEventData) => {\n results[key][data.protocol].clientMediaIPs = data.clientMediaIPs;\n\n await this.storeResults(results);\n }\n );\n\n this.clusterReachability[key].start(); // not awaiting on purpose\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_lodash","require","_common","_loggerProxy","_interopRequireDefault","_util","_constants","_request","_clusterReachability","_eventsScope","_constants2","_metrics","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","OVERALL_TIMEOUT","Reachability","exports","_EventsScope","_inherits2","_super","webex","_this","_classCallCheck2","_assertThisInitialized2","REACHABILITY","namespace","videoMesh","udp","public","tcp","xtls","reachabilityRequest","ReachabilityRequest","clusterReachability","_createClass2","key","value","_getClusters","_asyncToGenerator2","_regenerator","mark","_callee","isRetry","_yield$this$reachabil","clusters","joinCookie","_args","wrap","_callee$","_context","prev","next","undefined","getClusters","MeetingUtil","getIpVersion","sent","abrupt","t0","LoggerProxy","logger","error","concat","stop","_gatherReachability","_callee2","trigger","_yield$this$getCluste","_callee2$","_context2","lastTrigger","internal","device","ipNetworkDetector","detect","boundedStorage","put","localStorageJoinCookie","_stringify","reachabilityDefer","Defer","performReachabilityChecks","promise","gatherReachability","_x","_getReachabilityMetrics","_callee3","stats","updateStats","resultsJson","results","_callee3$","_context3","reachability_public_udp_success","reachability_public_udp_failed","reachability_public_tcp_success","reachability_public_tcp_failed","reachability_public_xtls_success","reachability_public_xtls_failed","reachability_vmn_udp_success","reachability_vmn_udp_failed","reachability_vmn_tcp_success","reachability_vmn_tcp_failed","reachability_vmn_xtls_success","reachability_vmn_xtls_failed","clusterType","outcome","get","localStorageResult","JSON","parse","_values","isVideoMesh","warn","getReachabilityMetrics","mapTransportResultToBackendDataFormat","transportResult","output","_i","_Object$entries","_entries","_Object$entries$_i","_slicedToArray2","reachable","untested","latencyInMilliseconds","toString","_getReachabilityResults","_callee4","_this2","allClusterResults","_callee4$","_context4","mapValues","clusterResult","getReachabilityResults","_isAnyPublicClusterReachable","_callee5","reachabilityData","reachabilityResults","_callee5$","_context5","catch","some","_result$udp","_result$tcp","isAnyPublicClusterReachable","_isWebexMediaBackendUnreachable","_callee6","unreachable","protocols","_callee6$","_context6","tested","_keys","protocol","_result$protocol","_result$protocol2","every","isWebexMediaBackendUnreachable","getUnreachableClusters","unreachableList","_ref","_ref2","getResult","name","logUnreachableClusters","list","_ref3","log","areAllPublicClusterResultsReady","isEqual","expectedResultsCount","resultsCount","areAllResultsReady","resolveReachabilityPromise","_this$reachabilityDef","vmnTimer","clearTimeout","publicCloudTimer","resolve","abortClusterReachability","abort","getStatistics","values","map","min","max","average","Math","_toConsumableArray2","mean","_sendMetric","_callee7","_callee7$","_context7","vmn","ipver","firstIpV4","firstIpV6","firstMdns","totalTime","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","REACHABILITY_COMPLETED","prepareMetricFields","sendMetric","startTimers","_this3","setTimeout","overallTimer","emit","file","function","_storeResults","_callee8","_callee8$","_context8","storeResults","_x2","resetResultCounters","_performReachabilityChecks","_callee11","clusterList","_this4","isFirstResult","_callee11$","_context11","config","meetings","experimental","enableTcpReachability","enableTlsReachability","cluster","includeTcpReachability","includeTlsReachability","ClusterReachability","on","Events","resultReady","_ref4","_callee9","data","clientMediaIPs","_callee9$","_context9","_x4","clientMediaIpsUpdated","_ref5","_callee10","_callee10$","_context10","_x5","start","_x3","EventsScope"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable class-methods-use-this */\nimport {isEqual, mapValues, mean} from 'lodash';\n\nimport {Defer} from '@webex/common';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport {REACHABILITY} from '../constants';\n\nimport ReachabilityRequest, {ClusterList} from './request';\nimport {\n ClientMediaIpsUpdatedEventData,\n ClusterReachability,\n ClusterReachabilityResult,\n Events,\n ResultEventData,\n TransportResult,\n} from './clusterReachability';\nimport EventsScope from '../common/events/events-scope';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport Metrics from '../metrics';\n\nexport type ReachabilityMetrics = {\n reachability_public_udp_success: number;\n reachability_public_udp_failed: number;\n reachability_public_tcp_success: number;\n reachability_public_tcp_failed: number;\n reachability_public_xtls_success: number;\n reachability_public_xtls_failed: number;\n reachability_vmn_udp_success: number;\n reachability_vmn_udp_failed: number;\n reachability_vmn_tcp_success: number;\n reachability_vmn_tcp_failed: number;\n reachability_vmn_xtls_success: number;\n reachability_vmn_xtls_failed: number;\n};\n\n/**\n * This is the type that matches what backend expects us to send to them. It is a bit weird, because\n * it uses strings instead of booleans and numbers, but that's what they require.\n */\nexport type TransportResultForBackend = {\n reachable?: 'true' | 'false';\n latencyInMilliseconds?: string;\n clientMediaIPs?: string[];\n untested?: 'true';\n};\n\nexport type ReachabilityResultForBackend = {\n udp: TransportResultForBackend;\n tcp: TransportResultForBackend;\n xtls: TransportResultForBackend;\n};\n\n// this is the type that is required by the backend when we send them reachability results\nexport type ReachabilityResultsForBackend = Record<string, ReachabilityResultForBackend>;\n\n// this is the type used by Reachability class internally and stored in local storage\nexport type ReachabilityResults = Record<\n string,\n ClusterReachabilityResult & {\n isVideoMesh?: boolean;\n }\n>;\n\n// timeouts in seconds\nconst DEFAULT_TIMEOUT = 3;\nconst VIDEO_MESH_TIMEOUT = 1;\nconst OVERALL_TIMEOUT = 15;\n\n/**\n * @class Reachability\n * @export\n */\nexport default class Reachability extends EventsScope {\n namespace = REACHABILITY.namespace;\n webex: object;\n reachabilityRequest: ReachabilityRequest;\n clusterReachability: {\n [key: string]: ClusterReachability;\n };\n\n reachabilityDefer?: Defer;\n\n vmnTimer?: ReturnType<typeof setTimeout>;\n publicCloudTimer?: ReturnType<typeof setTimeout>;\n overallTimer?: ReturnType<typeof setTimeout>;\n\n expectedResultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n resultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n\n protected lastTrigger?: string;\n\n /**\n * Creates an instance of Reachability.\n * @param {object} webex\n * @memberof Reachability\n */\n constructor(webex: object) {\n super();\n this.webex = webex;\n\n /**\n * internal request object for the server\n * @instance\n * @type {Array}\n * @private\n * @memberof Reachability\n */\n this.reachabilityRequest = new ReachabilityRequest(this.webex);\n\n this.clusterReachability = {};\n }\n\n /**\n * Fetches the list of media clusters from the backend\n * @param {boolean} isRetry\n * @private\n * @returns {Promise<{clusters: ClusterList, joinCookie: any}>}\n */\n async getClusters(isRetry = false): Promise<{clusters: ClusterList; joinCookie: any}> {\n try {\n const {clusters, joinCookie} = await this.reachabilityRequest.getClusters(\n MeetingUtil.getIpVersion(this.webex)\n );\n\n return {clusters, joinCookie};\n } catch (error) {\n if (isRetry) {\n throw error;\n }\n\n LoggerProxy.logger.error(\n `Reachability:index#getClusters --> Failed with error: ${error}, retrying...`\n );\n\n return this.getClusters(true);\n }\n }\n\n /**\n * Gets a list of media clusters from the backend and performs reachability checks on all the clusters\n * @param {string} trigger - explains the reason for starting reachability\n * @returns {Promise<ReachabilityResults>} reachability results\n * @public\n * @memberof Reachability\n */\n public async gatherReachability(trigger: string): Promise<ReachabilityResults> {\n // Fetch clusters and measure latency\n try {\n this.lastTrigger = trigger;\n\n // kick off ip version detection. For now we don't await it, as we're doing it\n // to gather the timings and send them with our reachability metrics\n // @ts-ignore\n this.webex.internal.device.ipNetworkDetector.detect();\n\n const {clusters, joinCookie} = await this.getClusters();\n\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageJoinCookie,\n JSON.stringify(joinCookie)\n );\n\n this.reachabilityDefer = new Defer();\n\n // Perform Reachability Check\n await this.performReachabilityChecks(clusters);\n\n return this.reachabilityDefer.promise;\n } catch (error) {\n LoggerProxy.logger.error(`Reachability:index#gatherReachability --> Error:`, error);\n\n return {};\n }\n }\n\n /**\n * Returns statistics about last reachability results. The returned value is an object\n * with a flat list of properties so that it can be easily sent with metrics\n *\n * @returns {Promise} Promise with metrics values, it never rejects/throws.\n */\n async getReachabilityMetrics(): Promise<ReachabilityMetrics> {\n const stats: ReachabilityMetrics = {\n reachability_public_udp_success: 0,\n reachability_public_udp_failed: 0,\n reachability_public_tcp_success: 0,\n reachability_public_tcp_failed: 0,\n reachability_public_xtls_success: 0,\n reachability_public_xtls_failed: 0,\n reachability_vmn_udp_success: 0,\n reachability_vmn_udp_failed: 0,\n reachability_vmn_tcp_success: 0,\n reachability_vmn_tcp_failed: 0,\n reachability_vmn_xtls_success: 0,\n reachability_vmn_xtls_failed: 0,\n };\n\n const updateStats = (clusterType: 'public' | 'vmn', result: ClusterReachabilityResult) => {\n if (result.udp && result.udp.result !== 'untested') {\n const outcome = result.udp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_udp_${outcome}`] += 1;\n }\n if (result.tcp && result.tcp.result !== 'untested') {\n const outcome = result.tcp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_tcp_${outcome}`] += 1;\n }\n if (result.xtls && result.xtls.result !== 'untested') {\n const outcome = result.xtls.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_xtls_${outcome}`] += 1;\n }\n };\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const results: ReachabilityResults = JSON.parse(resultsJson);\n\n Object.values(results).forEach((result) => {\n updateStats(result.isVideoMesh ? 'vmn' : 'public', result);\n });\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Roap:request#getReachabilityMetrics --> Error parsing reachability data: ',\n e\n );\n }\n\n return stats;\n }\n\n /**\n * Maps our internal transport result to the format that backend expects\n * @param {TransportResult} transportResult\n * @returns {TransportResultForBackend}\n */\n private mapTransportResultToBackendDataFormat(\n transportResult: TransportResult\n ): TransportResultForBackend {\n const output: TransportResultForBackend = {};\n\n for (const [key, value] of Object.entries(transportResult)) {\n switch (key) {\n case 'result':\n switch (value) {\n case 'reachable':\n output.reachable = 'true';\n break;\n case 'unreachable':\n output.reachable = 'false';\n break;\n case 'untested':\n output.untested = 'true';\n break;\n }\n break;\n case 'latencyInMilliseconds':\n output.latencyInMilliseconds = value.toString();\n break;\n default:\n output[key] = value;\n }\n }\n\n return output;\n }\n\n /**\n * Reachability results as an object in the format that backend expects\n *\n * @returns {any} reachability results that need to be sent to the backend\n */\n async getReachabilityResults(): Promise<ReachabilityResultsForBackend | undefined> {\n let results: ReachabilityResultsForBackend;\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const allClusterResults: ReachabilityResults = JSON.parse(resultsJson);\n\n results = mapValues(allClusterResults, (clusterResult) => ({\n udp: this.mapTransportResultToBackendDataFormat(clusterResult.udp || {result: 'untested'}),\n tcp: this.mapTransportResultToBackendDataFormat(clusterResult.tcp || {result: 'untested'}),\n xtls: this.mapTransportResultToBackendDataFormat(\n clusterResult.xtls || {result: 'untested'}\n ),\n }));\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Roap:request#attachReachabilityData --> Error parsing reachability data: ',\n e\n );\n }\n\n return results;\n }\n\n /**\n * fetches reachability data and checks for cluster reachability\n * @returns {boolean}\n * @public\n * @memberof Reachability\n */\n async isAnyPublicClusterReachable() {\n let reachable = false;\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n reachable = Object.values(reachabilityResults).some(\n (result) =>\n !result.isVideoMesh &&\n (result.udp?.result === 'reachable' || result.tcp?.result === 'reachable')\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return reachable;\n }\n\n /**\n * Returns true only if ALL protocols (UDP, TCP and TLS) have been tested and none\n * of the media clusters where reachable with any of the protocols. This is done\n * irrespective of the config, so for example:\n * if config.meetings.experimental.enableTlsReachability === false,\n * it will return false, because TLS reachability won't be tested,\n * so we can't say for sure that media backend is unreachable over TLS.\n *\n * @returns {boolean}\n */\n async isWebexMediaBackendUnreachable() {\n let unreachable = false;\n\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n const protocols = {\n udp: {tested: false, reachable: undefined},\n tcp: {tested: false, reachable: undefined},\n xtls: {tested: false, reachable: undefined},\n };\n\n Object.values(reachabilityResults).forEach((result) => {\n Object.keys(protocols).forEach((protocol) => {\n if (\n result[protocol]?.result === 'reachable' ||\n result[protocol]?.result === 'unreachable'\n ) {\n protocols[protocol].tested = true;\n\n // we need at least 1 'reachable' result to mark the whole protocol as reachable\n if (result[protocol].result === 'reachable') {\n protocols[protocol].reachable = true;\n }\n }\n });\n });\n\n unreachable = Object.values(protocols).every(\n (protocol) => protocol.tested && !protocol.reachable\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return unreachable;\n }\n\n /**\n * Get list of all unreachable clusters\n * @returns {array} Unreachable clusters\n * @private\n * @memberof Reachability\n */\n private getUnreachableClusters(): Array<{name: string; protocol: string}> {\n const unreachableList = [];\n\n Object.entries(this.clusterReachability).forEach(([key, clusterReachability]) => {\n const result = clusterReachability.getResult();\n\n if (result.udp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'udp'});\n }\n if (result.tcp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'tcp'});\n }\n if (result.xtls.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'xtls'});\n }\n });\n\n return unreachableList;\n }\n\n /**\n * Make a log of unreachable clusters.\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private logUnreachableClusters() {\n const list = this.getUnreachableClusters();\n\n list.forEach(({name, protocol}) => {\n LoggerProxy.logger.log(\n `Reachability:index#logUnreachableClusters --> failed to reach ${name} over ${protocol}`\n );\n });\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the public clusters\n * In other words, it means that all public clusters are reachable over each protocol,\n * because we only get a \"result\" if we managed to reach a cluster\n *\n * @returns {boolean}\n */\n private areAllPublicClusterResultsReady() {\n return isEqual(this.expectedResultsCount.public, this.resultsCount.public);\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the clusters\n *\n * @returns {boolean}\n */\n private areAllResultsReady() {\n return isEqual(this.expectedResultsCount, this.resultsCount);\n }\n\n /**\n * Resolves the promise returned by gatherReachability() method\n * @returns {void}\n */\n private resolveReachabilityPromise() {\n if (this.vmnTimer) {\n clearTimeout(this.vmnTimer);\n }\n if (this.publicCloudTimer) {\n clearTimeout(this.publicCloudTimer);\n }\n\n this.logUnreachableClusters();\n this.reachabilityDefer?.resolve();\n }\n\n /**\n * Aborts all cluster reachability checks that are in progress\n *\n * @returns {void}\n */\n private abortClusterReachability() {\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n clusterReachability.abort();\n });\n }\n\n /**\n * Helper function for calculating min/max/average values of latency\n *\n * @param {Array<any>} results\n * @param {string} protocol\n * @param {boolean} isVideoMesh\n * @returns {{min:number, max: number, average: number}}\n */\n protected getStatistics(\n results: Array<ClusterReachabilityResult & {isVideoMesh: boolean}>,\n protocol: 'udp' | 'tcp' | 'xtls',\n isVideoMesh: boolean\n ) {\n const values = results\n .filter((result) => result.isVideoMesh === isVideoMesh)\n .filter((result) => result[protocol].result === 'reachable')\n .map((result) => result[protocol].latencyInMilliseconds);\n\n if (values.length === 0) {\n return {\n min: -1,\n max: -1,\n average: -1,\n };\n }\n\n return {\n min: Math.min(...values),\n max: Math.max(...values),\n average: mean(values),\n };\n }\n\n /**\n * Sends a metric with all the statistics about how long reachability took\n *\n * @returns {void}\n */\n protected async sendMetric() {\n const results = [];\n\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n results.push({\n ...clusterReachability.getResult(),\n isVideoMesh: clusterReachability.isVideoMesh,\n });\n });\n\n const stats = {\n vmn: {\n udp: this.getStatistics(results, 'udp', true),\n },\n public: {\n udp: this.getStatistics(results, 'udp', false),\n tcp: this.getStatistics(results, 'tcp', false),\n xtls: this.getStatistics(results, 'xtls', false),\n },\n ipver: {\n // @ts-ignore\n firstIpV4: this.webex.internal.device.ipNetworkDetector.firstIpV4,\n // @ts-ignore\n firstIpV6: this.webex.internal.device.ipNetworkDetector.firstIpV6,\n // @ts-ignore\n firstMdns: this.webex.internal.device.ipNetworkDetector.firstMdns,\n // @ts-ignore\n totalTime: this.webex.internal.device.ipNetworkDetector.totalTime,\n },\n trigger: this.lastTrigger,\n };\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.REACHABILITY_COMPLETED,\n Metrics.prepareMetricFields(stats)\n );\n }\n\n /**\n * Starts all the timers used for various timeouts\n *\n * @returns {void}\n */\n private startTimers() {\n this.vmnTimer = setTimeout(() => {\n this.vmnTimer = undefined;\n // if we are only missing VMN results, then we don't want to wait for them any longer\n // as they are likely to fail if users are not on corporate network\n if (this.areAllPublicClusterResultsReady()) {\n LoggerProxy.logger.log(\n 'Reachability:index#startTimers --> Reachability checks timed out (VMN timeout)'\n );\n\n this.resolveReachabilityPromise();\n }\n }, VIDEO_MESH_TIMEOUT * 1000);\n\n this.publicCloudTimer = setTimeout(() => {\n this.publicCloudTimer = undefined;\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks timed out (${DEFAULT_TIMEOUT}s)`\n );\n\n // resolve the promise, so that the client won't be blocked waiting on meetings.register() for too long\n this.resolveReachabilityPromise();\n }, DEFAULT_TIMEOUT * 1000);\n\n this.overallTimer = setTimeout(() => {\n this.overallTimer = undefined;\n this.abortClusterReachability();\n this.emit(\n {\n file: 'reachability',\n function: 'overallTimer timeout',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks fully timed out (${OVERALL_TIMEOUT}s)`\n );\n }, OVERALL_TIMEOUT * 1000);\n }\n\n /**\n * Stores given reachability results in local storage\n *\n * @param {ReachabilityResults} results\n * @returns {Promise<void>}\n */\n private async storeResults(results: ReachabilityResults) {\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageResult,\n JSON.stringify(results)\n );\n }\n\n /**\n * Resets all the internal counters that keep track of the results\n *\n * @returns {void}\n */\n private resetResultCounters() {\n this.expectedResultsCount.videoMesh.udp = 0;\n this.expectedResultsCount.public.udp = 0;\n this.expectedResultsCount.public.tcp = 0;\n this.expectedResultsCount.public.xtls = 0;\n\n this.resultsCount.videoMesh.udp = 0;\n this.resultsCount.public.udp = 0;\n this.resultsCount.public.tcp = 0;\n this.resultsCount.public.xtls = 0;\n }\n\n /**\n * Performs reachability checks for all clusters\n * @param {ClusterList} clusterList\n * @returns {Promise<void>} promise that's resolved as soon as the checks are started\n */\n private async performReachabilityChecks(clusterList: ClusterList) {\n const results: ReachabilityResults = {};\n\n this.clusterReachability = {};\n\n if (!clusterList || !Object.keys(clusterList).length) {\n return;\n }\n\n LoggerProxy.logger.log(\n `Reachability:index#performReachabilityChecks --> doing UDP${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability ? ',TCP' : ''\n }${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability ? ',TLS' : ''\n } reachability checks`\n );\n\n this.resetResultCounters();\n this.startTimers();\n\n // sanitize the urls in the clusterList\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n // Linus doesn't support TCP reachability checks on video mesh nodes\n const includeTcpReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability && !cluster.isVideoMesh;\n\n if (!includeTcpReachability) {\n cluster.tcp = [];\n }\n\n // Linus doesn't support xTLS reachability checks on video mesh nodes\n const includeTlsReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability && !cluster.isVideoMesh;\n\n if (!includeTlsReachability) {\n cluster.xtls = [];\n }\n\n // initialize the result for this cluster\n results[key] = {\n udp: {result: cluster.udp.length > 0 ? 'unreachable' : 'untested'},\n tcp: {result: cluster.tcp.length > 0 ? 'unreachable' : 'untested'},\n xtls: {result: cluster.xtls.length > 0 ? 'unreachable' : 'untested'},\n isVideoMesh: cluster.isVideoMesh,\n };\n\n // update expected results counters to include this cluster\n this.expectedResultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'].udp +=\n cluster.udp.length;\n if (!cluster.isVideoMesh) {\n this.expectedResultsCount.public.tcp += cluster.tcp.length;\n this.expectedResultsCount.public.xtls += cluster.xtls.length;\n }\n });\n\n const isFirstResult = {\n udp: true,\n tcp: true,\n xtls: true,\n };\n\n // save the initialized results (in case we don't get any \"resultReady\" events at all)\n await this.storeResults(results);\n\n // now start the reachability on all the clusters\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n this.clusterReachability[key] = new ClusterReachability(key, cluster);\n this.clusterReachability[key].on(Events.resultReady, async (data: ResultEventData) => {\n const {protocol, result, clientMediaIPs, latencyInMilliseconds} = data;\n\n if (isFirstResult[protocol]) {\n this.emit(\n {\n file: 'reachability',\n function: 'resultReady event handler',\n },\n 'reachability:firstResultAvailable',\n {\n protocol,\n }\n );\n isFirstResult[protocol] = false;\n }\n this.resultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'][protocol] += 1;\n\n const areAllResultsReady = this.areAllResultsReady();\n\n results[key][protocol].result = result;\n results[key][protocol].clientMediaIPs = clientMediaIPs;\n results[key][protocol].latencyInMilliseconds = latencyInMilliseconds;\n\n await this.storeResults(results);\n\n if (areAllResultsReady) {\n clearTimeout(this.overallTimer);\n this.overallTimer = undefined;\n this.emit(\n {\n file: 'reachability',\n function: 'performReachabilityChecks',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#gatherReachability --> Reachability checks fully completed`\n );\n this.resolveReachabilityPromise();\n }\n });\n\n // clientMediaIps can be updated independently from the results, so we need to listen for them too\n this.clusterReachability[key].on(\n Events.clientMediaIpsUpdated,\n async (data: ClientMediaIpsUpdatedEventData) => {\n results[key][data.protocol].clientMediaIPs = data.clientMediaIPs;\n\n await this.storeResults(results);\n }\n );\n\n this.clusterReachability[key].start(); // not awaiting on purpose\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -363,7 +363,7 @@ var ReconnectionManager = exports.default = /*#__PURE__*/function () {
|
|
|
363
363
|
}
|
|
364
364
|
_context2.prev = 10;
|
|
365
365
|
_context2.next = 13;
|
|
366
|
-
return this.webex.meetings.startReachability();
|
|
366
|
+
return this.webex.meetings.startReachability('reconnection');
|
|
367
367
|
case 13:
|
|
368
368
|
_context2.next = 18;
|
|
369
369
|
break;
|