@webex/internal-plugin-metrics 3.5.0-next.8 → 3.5.0-wxcc.1
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/behavioral/behavioral-metrics.js +199 -0
- package/dist/behavioral/behavioral-metrics.js.map +1 -0
- package/dist/behavioral/config.js +11 -0
- package/dist/behavioral/config.js.map +1 -0
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.js +7 -15
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js +2 -7
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
- package/dist/call-diagnostic/config.js +3 -13
- package/dist/call-diagnostic/config.js.map +1 -1
- package/dist/index.js +0 -7
- package/dist/index.js.map +1 -1
- package/dist/metrics.js +1 -1
- package/dist/types/behavioral/behavioral-metrics.d.ts +63 -0
- package/dist/types/behavioral/config.d.ts +1 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +1 -6
- package/dist/types/call-diagnostic/config.d.ts +0 -3
- package/dist/types/index.d.ts +1 -2
- package/package.json +11 -11
- package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +1 -1
- package/src/call-diagnostic/call-diagnostic-metrics.ts +7 -13
- package/src/call-diagnostic/call-diagnostic-metrics.util.ts +5 -11
- package/src/call-diagnostic/config.ts +0 -12
- package/src/index.ts +0 -2
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +1 -2
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +6 -4
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +12 -406
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +3 -7
- package/test/unit/spec/new-metrics.ts +3 -0
- package/test/unit/spec/prelogin-metrics-batcher.ts +1 -3
- package/dist/rtcMetrics/constants.js +0 -11
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.js +0 -202
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/types/rtcMetrics/constants.d.ts +0 -4
- package/dist/types/rtcMetrics/index.d.ts +0 -71
- package/src/rtcMetrics/constants.ts +0 -3
- package/src/rtcMetrics/index.ts +0 -186
- package/test/unit/spec/rtcMetrics/index.ts +0 -155
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.default = void 0;
|
|
10
|
+
var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
|
|
11
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
13
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
|
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
15
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
16
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
17
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
18
|
+
var _lodash = require("lodash");
|
|
19
|
+
var _common = require("@webex/common");
|
|
20
|
+
var _webexCore = require("@webex/webex-core");
|
|
21
|
+
var _metrics = require("../metrics");
|
|
22
|
+
var _config = require("./config");
|
|
23
|
+
var _clientMetricsBatcher = _interopRequireDefault(require("../client-metrics-batcher"));
|
|
24
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
25
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
26
|
+
var _BrowserDetection = (0, _common.BrowserDetection)(),
|
|
27
|
+
getOSVersion = _BrowserDetection.getOSVersion,
|
|
28
|
+
getBrowserName = _BrowserDetection.getBrowserName,
|
|
29
|
+
getBrowserVersion = _BrowserDetection.getBrowserVersion;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @description Util class to handle Behavioral Metrics
|
|
33
|
+
* @export
|
|
34
|
+
* @class BehavioralMetrics
|
|
35
|
+
*/
|
|
36
|
+
var BehavioralMetrics = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
37
|
+
(0, _inherits2.default)(BehavioralMetrics, _StatelessWebexPlugin);
|
|
38
|
+
var _super = _createSuper(BehavioralMetrics);
|
|
39
|
+
/**
|
|
40
|
+
* Constructor
|
|
41
|
+
* @param {any[]} args
|
|
42
|
+
*/
|
|
43
|
+
function BehavioralMetrics() {
|
|
44
|
+
var _this;
|
|
45
|
+
(0, _classCallCheck2.default)(this, BehavioralMetrics);
|
|
46
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
47
|
+
args[_key] = arguments[_key];
|
|
48
|
+
}
|
|
49
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
50
|
+
// @ts-ignore
|
|
51
|
+
// @ts-ignore
|
|
52
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "clientMetricsBatcher", void 0);
|
|
53
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "logger", void 0);
|
|
54
|
+
// to avoid adding @ts-ignore everywhere
|
|
55
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "device", void 0);
|
|
56
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "version", void 0);
|
|
57
|
+
_this.logger = _this.webex.logger;
|
|
58
|
+
// @ts-ignore
|
|
59
|
+
_this.device = _this.webex.internal.device;
|
|
60
|
+
// @ts-ignore
|
|
61
|
+
_this.version = _this.webex.version;
|
|
62
|
+
// @ts-ignore
|
|
63
|
+
_this.clientMetricsBatcher = new _clientMetricsBatcher.default({}, {
|
|
64
|
+
parent: _this.webex
|
|
65
|
+
});
|
|
66
|
+
return _this;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Returns the deviceId from our registration with WDM.
|
|
71
|
+
* @returns {string} deviceId or empty string
|
|
72
|
+
*/
|
|
73
|
+
(0, _createClass2.default)(BehavioralMetrics, [{
|
|
74
|
+
key: "getDeviceId",
|
|
75
|
+
value: function getDeviceId() {
|
|
76
|
+
var url = this.device.url;
|
|
77
|
+
if (url && url.length !== 0) {
|
|
78
|
+
var n = url.lastIndexOf('/');
|
|
79
|
+
if (n !== -1) {
|
|
80
|
+
return url.substring(n + 1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return '';
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Returns the context object to be submitted with all behavioral metrics.
|
|
88
|
+
* @returns {BehavioralEventContext}
|
|
89
|
+
*/
|
|
90
|
+
}, {
|
|
91
|
+
key: "getContext",
|
|
92
|
+
value: function getContext() {
|
|
93
|
+
var context = {
|
|
94
|
+
app: {
|
|
95
|
+
version: this.version
|
|
96
|
+
},
|
|
97
|
+
device: {
|
|
98
|
+
id: this.getDeviceId()
|
|
99
|
+
},
|
|
100
|
+
locale: window.navigator.language,
|
|
101
|
+
os: {
|
|
102
|
+
name: (0, _metrics.getOSNameInternal)(),
|
|
103
|
+
version: getOSVersion()
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
return context;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Returns the default tags to be included with all behavioral metrics.
|
|
111
|
+
* @returns {BehavioralEventPayload}
|
|
112
|
+
*/
|
|
113
|
+
}, {
|
|
114
|
+
key: "getDefaultTags",
|
|
115
|
+
value: function getDefaultTags() {
|
|
116
|
+
var tags = {
|
|
117
|
+
browser: getBrowserName(),
|
|
118
|
+
browserHeight: window.innerHeight,
|
|
119
|
+
browserVersion: getBrowserVersion(),
|
|
120
|
+
browserWidth: window.innerWidth,
|
|
121
|
+
domain: window.location.hostname,
|
|
122
|
+
inIframe: window.self !== window.top,
|
|
123
|
+
locale: window.navigator.language,
|
|
124
|
+
os: (0, _metrics.getOSNameInternal)()
|
|
125
|
+
};
|
|
126
|
+
return tags;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Creates the object to send to our metrics endpoint for a behavioral event
|
|
131
|
+
* @param {MetricEventProduct} product
|
|
132
|
+
* @param {MetricEventAgent} agent
|
|
133
|
+
* @param {string} target
|
|
134
|
+
* @param {MetricEventVerb} verb
|
|
135
|
+
* @returns {BehavioralEventPayload}
|
|
136
|
+
*/
|
|
137
|
+
}, {
|
|
138
|
+
key: "createEventObject",
|
|
139
|
+
value: function createEventObject(_ref) {
|
|
140
|
+
var product = _ref.product,
|
|
141
|
+
agent = _ref.agent,
|
|
142
|
+
target = _ref.target,
|
|
143
|
+
verb = _ref.verb,
|
|
144
|
+
payload = _ref.payload;
|
|
145
|
+
var metricName = "".concat(product, ".").concat(agent, ".").concat(target, ".").concat(verb);
|
|
146
|
+
var allTags = payload;
|
|
147
|
+
allTags = (0, _lodash.merge)(allTags, this.getDefaultTags());
|
|
148
|
+
var event = {
|
|
149
|
+
context: this.getContext(),
|
|
150
|
+
metricName: metricName,
|
|
151
|
+
tags: allTags,
|
|
152
|
+
timestamp: (0, _now.default)(),
|
|
153
|
+
type: ['behavioral']
|
|
154
|
+
};
|
|
155
|
+
return event;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Returns true once we're ready to submit behavioral metrics, after startup.
|
|
160
|
+
* @returns {boolean} true when deviceId is defined and non-empty
|
|
161
|
+
*/
|
|
162
|
+
}, {
|
|
163
|
+
key: "isReadyToSubmitBehavioralEvents",
|
|
164
|
+
value: function isReadyToSubmitBehavioralEvents() {
|
|
165
|
+
var deviceId = this.getDeviceId();
|
|
166
|
+
return deviceId && deviceId.length !== 0;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Submit a behavioral metric to our metrics endpoint.
|
|
171
|
+
* @param {MetricEventProduct} product the product from which the metric is being submitted, e.g. 'webex' web client, 'wxcc_desktop'
|
|
172
|
+
* @param {MetricEventAgent} agent the source of the action for this metric
|
|
173
|
+
* @param {string} target the 'thing' that this metric includes information about
|
|
174
|
+
* @param {MetricEventVerb} verb the action that this metric includes information about
|
|
175
|
+
* @param {BehavioralEventPayload} payload information specific to this event. This should be flat, i.e. it should not include nested objects.
|
|
176
|
+
* @returns {Promise<any>}
|
|
177
|
+
*/
|
|
178
|
+
}, {
|
|
179
|
+
key: "submitBehavioralEvent",
|
|
180
|
+
value: function submitBehavioralEvent(_ref2) {
|
|
181
|
+
var product = _ref2.product,
|
|
182
|
+
agent = _ref2.agent,
|
|
183
|
+
target = _ref2.target,
|
|
184
|
+
verb = _ref2.verb,
|
|
185
|
+
payload = _ref2.payload;
|
|
186
|
+
this.logger.log(_config.BEHAVIORAL_LOG_IDENTIFIER, "BehavioralMetrics: @submitBehavioralEvent. Submit Behavioral event: ".concat(product, ".").concat(agent, ".").concat(target, ".").concat(verb));
|
|
187
|
+
var behavioralEvent = this.createEventObject({
|
|
188
|
+
product: product,
|
|
189
|
+
agent: agent,
|
|
190
|
+
target: target,
|
|
191
|
+
verb: verb,
|
|
192
|
+
payload: payload
|
|
193
|
+
});
|
|
194
|
+
return this.clientMetricsBatcher.request(behavioralEvent);
|
|
195
|
+
}
|
|
196
|
+
}]);
|
|
197
|
+
return BehavioralMetrics;
|
|
198
|
+
}(_webexCore.StatelessWebexPlugin);
|
|
199
|
+
//# sourceMappingURL=behavioral-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_lodash","require","_common","_webexCore","_metrics","_config","_clientMetricsBatcher","_interopRequireDefault","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","_BrowserDetection","BrowserDetection","getOSVersion","getBrowserName","getBrowserVersion","BehavioralMetrics","exports","_StatelessWebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","logger","webex","device","internal","version","clientMetricsBatcher","ClientMetricsBatcher","parent","_createClass2","key","value","getDeviceId","url","n","lastIndexOf","substring","getContext","context","app","id","locale","window","navigator","language","os","name","getOSNameInternal","getDefaultTags","tags","browser","browserHeight","innerHeight","browserVersion","browserWidth","innerWidth","domain","location","hostname","inIframe","self","top","createEventObject","_ref","product","agent","target","verb","payload","metricName","allTags","merge","event","timestamp","_now","type","isReadyToSubmitBehavioralEvents","deviceId","submitBehavioralEvent","_ref2","log","BEHAVIORAL_LOG_IDENTIFIER","behavioralEvent","request","StatelessWebexPlugin"],"sources":["behavioral-metrics.ts"],"sourcesContent":["import {merge} from 'lodash';\nimport {BrowserDetection} from '@webex/common';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\nimport {getOSNameInternal} from '../metrics';\nimport {BEHAVIORAL_LOG_IDENTIFIER} from './config';\nimport {\n MetricEventProduct,\n MetricEventAgent,\n MetricEventVerb,\n BehavioralEventContext,\n BehavioralEvent,\n BehavioralEventPayload,\n} from '../metrics.types';\nimport ClientMetricsBatcher from '../client-metrics-batcher';\n\nconst {getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\n/**\n * @description Util class to handle Behavioral Metrics\n * @export\n * @class BehavioralMetrics\n */\nexport default class BehavioralMetrics extends StatelessWebexPlugin {\n // @ts-ignore\n private clientMetricsBatcher: ClientMetricsBatcher;\n private logger: any; // to avoid adding @ts-ignore everywhere\n private device: any;\n private version: string;\n\n /**\n * Constructor\n * @param {any[]} args\n */\n constructor(...args) {\n super(...args);\n // @ts-ignore\n this.logger = this.webex.logger;\n // @ts-ignore\n this.device = this.webex.internal.device;\n // @ts-ignore\n this.version = this.webex.version;\n // @ts-ignore\n this.clientMetricsBatcher = new ClientMetricsBatcher({}, {parent: this.webex});\n }\n\n /**\n * Returns the deviceId from our registration with WDM.\n * @returns {string} deviceId or empty string\n */\n private getDeviceId(): string {\n const {url} = this.device;\n if (url && url.length !== 0) {\n const n = url.lastIndexOf('/');\n if (n !== -1) {\n return url.substring(n + 1);\n }\n }\n\n return '';\n }\n\n /**\n * Returns the context object to be submitted with all behavioral metrics.\n * @returns {BehavioralEventContext}\n */\n private getContext(): BehavioralEventContext {\n const context: BehavioralEventContext = {\n app: {\n version: this.version,\n },\n device: {\n id: this.getDeviceId(),\n },\n locale: window.navigator.language,\n os: {\n name: getOSNameInternal(),\n version: getOSVersion(),\n },\n };\n\n return context;\n }\n\n /**\n * Returns the default tags to be included with all behavioral metrics.\n * @returns {BehavioralEventPayload}\n */\n private getDefaultTags(): BehavioralEventPayload {\n const tags = {\n browser: getBrowserName(),\n browserHeight: window.innerHeight,\n browserVersion: getBrowserVersion(),\n browserWidth: window.innerWidth,\n domain: window.location.hostname,\n inIframe: window.self !== window.top,\n locale: window.navigator.language,\n os: getOSNameInternal(),\n };\n\n return tags;\n }\n\n /**\n * Creates the object to send to our metrics endpoint for a behavioral event\n * @param {MetricEventProduct} product\n * @param {MetricEventAgent} agent\n * @param {string} target\n * @param {MetricEventVerb} verb\n * @returns {BehavioralEventPayload}\n */\n private createEventObject({\n product,\n agent,\n target,\n verb,\n payload,\n }: {\n product: MetricEventProduct;\n agent: MetricEventAgent;\n target: string;\n verb: MetricEventVerb;\n payload?: BehavioralEventPayload;\n }): BehavioralEvent {\n const metricName = `${product}.${agent}.${target}.${verb}`;\n let allTags: BehavioralEventPayload = payload;\n allTags = merge(allTags, this.getDefaultTags());\n\n const event: BehavioralEvent = {\n context: this.getContext(),\n metricName,\n tags: allTags,\n timestamp: Date.now(),\n type: ['behavioral'],\n };\n\n return event;\n }\n\n /**\n * Returns true once we're ready to submit behavioral metrics, after startup.\n * @returns {boolean} true when deviceId is defined and non-empty\n */\n public isReadyToSubmitBehavioralEvents(): boolean {\n const deviceId = this.getDeviceId();\n\n return deviceId && deviceId.length !== 0;\n }\n\n /**\n * Submit a behavioral metric to our metrics endpoint.\n * @param {MetricEventProduct} product the product from which the metric is being submitted, e.g. 'webex' web client, 'wxcc_desktop'\n * @param {MetricEventAgent} agent the source of the action for this metric\n * @param {string} target the 'thing' that this metric includes information about\n * @param {MetricEventVerb} verb the action that this metric includes information about\n * @param {BehavioralEventPayload} payload information specific to this event. This should be flat, i.e. it should not include nested objects.\n * @returns {Promise<any>}\n */\n public submitBehavioralEvent({\n product,\n agent,\n target,\n verb,\n payload,\n }: {\n product: MetricEventProduct;\n agent: MetricEventAgent;\n target: string;\n verb: MetricEventVerb;\n payload?: BehavioralEventPayload;\n }) {\n this.logger.log(\n BEHAVIORAL_LOG_IDENTIFIER,\n `BehavioralMetrics: @submitBehavioralEvent. Submit Behavioral event: ${product}.${agent}.${target}.${verb}`\n );\n const behavioralEvent = this.createEventObject({product, agent, target, verb, payload});\n\n return this.clientMetricsBatcher.request(behavioralEvent);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.BEHAVIORAL_LOG_IDENTIFIER = void 0;
|
|
8
|
+
/* eslint-disable import/prefer-default-export */
|
|
9
|
+
|
|
10
|
+
var BEHAVIORAL_LOG_IDENTIFIER = exports.BEHAVIORAL_LOG_IDENTIFIER = 'behavioral-events -> ';
|
|
11
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BEHAVIORAL_LOG_IDENTIFIER","exports"],"sources":["config.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\n\nexport const BEHAVIORAL_LOG_IDENTIFIER = 'behavioral-events -> ';\n"],"mappings":";;;;;;;AAAA;;AAEO,IAAMA,yBAAyB,GAAAC,OAAA,CAAAD,yBAAA,GAAG,uBAAuB"}
|
|
@@ -75,7 +75,7 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
75
75
|
value: function getMeeting() {
|
|
76
76
|
if (this.meetingId) {
|
|
77
77
|
// @ts-ignore
|
|
78
|
-
return this.webex.meetings.
|
|
78
|
+
return this.webex.meetings.meetingCollection.get(this.meetingId);
|
|
79
79
|
}
|
|
80
80
|
return undefined;
|
|
81
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","CallDiagnosticLatencies","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","latencyTimestamps","_map","precomputedLatencies","_createClass2","key","value","clearTimestamps","clear","setMeetingId","meetingId","getMeeting","webex","meetings","getBasicMeetingInformation","undefined","saveTimestamp","_ref","_ref$value","Date","getTime","_ref$options","options","saveFirstTimestampOnly","set","saveLatency","accumulate","existingValue","get","measureLatency","callback","_this2","start","performance","now","finally","has","getDiffBetweenTimestamps","a","b","end","getMeetingInfoReqResp","getShowInterstitialTime","getU2CTime","u2cLatency","Math","floor","getRegisterWDMDeviceJMT","getCallInitJoinReq","getJoinReqResp","getTurnDiscoveryTime","getLocalSDPGenRemoteSDPRecv","getICESetupTime","getAudioICESetupTime","getVideoICESetupTime","getShareICESetupTime","getStayLobbyTime","getPageJMT","getDownloadTimeJMT","getClickToInterstitial","getInterstitialToJoinOK","getCallInitMediaEngineReady","getInterstitialToMediaOKJMT","interstitialJoinClickTimestamp","connectedMedia","lobbyTime","getTotalJMT","clickToInterstitial","interstitialToJoinOk","getJoinConfJMT","joinReqResp","ICESetupTime","getTotalMediaJMT","joinConfJMT","_this$getMeeting","totalMediaJMT","allowMediaInLobby","getClientJMT","getAudioJoinRespRxStart","getVideoJoinRespRxStart","getReachabilityClustersReqResp","reachablityClusterReqResp","getAudioJoinRespTxStart","getVideoJoinRespTxStart","getExchangeCITokenJMT","exchangeCITokenJMT","getRefreshCaptchaReqResp","refreshCaptchaReqResp","getDownloadIntelligenceModelsReqResp","downloadIntelligenceModelsReqResp","getOtherAppApiReqResp","otherAppApiJMT","WebexPlugin"],"sources":["call-diagnostic-metrics-latencies.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport {MetricEventNames, PreComputedLatencies} from '../metrics.types';\n\n// we only care about client event and feature event for now\n\n/**\n * @description Helper class to store latencies timestamp and to calculate various latencies for CA.\n * @exports\n * @class CallDiagnosticLatencies\n */\nexport default class CallDiagnosticLatencies extends WebexPlugin {\n latencyTimestamps: Map<MetricEventNames, number>;\n precomputedLatencies: Map<PreComputedLatencies, number>;\n // meetingId that the current latencies are for\n private meetingId?: string;\n\n /**\n * @constructor\n */\n constructor(...args) {\n super(...args);\n this.latencyTimestamps = new Map();\n this.precomputedLatencies = new Map();\n }\n\n /**\n * Clear timestamps\n */\n public clearTimestamps() {\n this.latencyTimestamps.clear();\n this.precomputedLatencies.clear();\n }\n\n /**\n * Associate current latencies with a meeting id\n * @param meetingId\n */\n private setMeetingId(meetingId: string) {\n this.meetingId = meetingId;\n }\n\n /**\n * Returns the meeting object associated with current latencies\n * @returns meeting object\n */\n private getMeeting() {\n if (this.meetingId) {\n // @ts-ignore\n return this.webex.meetings.getBasicMeetingInformation(this.meetingId);\n }\n\n return undefined;\n }\n\n /**\n * Store timestamp value\n * @param key - key\n * @param value - value\n * @param options - store options\n * @throws\n * @returns\n */\n public saveTimestamp({\n key,\n value = new Date().getTime(),\n options = {},\n }: {\n key: MetricEventNames;\n value?: number;\n options?: {meetingId?: string};\n }) {\n // save the meetingId so we can use the meeting object in latency calculations if needed\n const {meetingId} = options;\n if (meetingId) {\n this.setMeetingId(meetingId);\n }\n // for some events we're only interested in the first timestamp not last\n // as these events can happen multiple times\n if (\n key === 'client.media.rx.start' ||\n key === 'client.media.tx.start' ||\n key === 'internal.client.meetinginfo.request' ||\n key === 'internal.client.meetinginfo.response'\n ) {\n this.saveFirstTimestampOnly(key, value);\n } else {\n this.latencyTimestamps.set(key, value);\n }\n }\n\n /**\n * Store precomputed latency value\n * @param key - key\n * @param value - value\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @throws\n * @returns\n */\n public saveLatency(key: PreComputedLatencies, value: number, accumulate = false) {\n const existingValue = accumulate ? this.precomputedLatencies.get(key) || 0 : 0;\n this.precomputedLatencies.set(key, value + existingValue);\n }\n\n /**\n * Measure latency for a request\n * @param callback - callback for which you would like to measure latency\n * @param key - key\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @returns\n */\n public measureLatency(\n callback: () => Promise<unknown>,\n key: PreComputedLatencies,\n accumulate = false\n ) {\n const start = performance.now();\n\n return callback().finally(() => {\n this.saveLatency(key, performance.now() - start, accumulate);\n });\n }\n\n /**\n * Store only the first timestamp value for the given key\n * @param key - key\n * @param value -value\n * @throws\n * @returns\n */\n saveFirstTimestampOnly(key: MetricEventNames, value: number = new Date().getTime()) {\n if (this.latencyTimestamps.has(key)) {\n return;\n }\n this.latencyTimestamps.set(key, value);\n }\n\n /**\n * Helper to calculate end - start\n * @param a start\n * @param b end\n * @returns latency\n */\n public getDiffBetweenTimestamps(a: MetricEventNames, b: MetricEventNames) {\n const start = this.latencyTimestamps.get(a);\n const end = this.latencyTimestamps.get(b);\n 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 'client.interstitial-window.start-launch',\n 'internal.client.interstitial-window.click.joinbutton'\n );\n }\n\n /**\n * getU2CTime\n * @returns - latency\n */\n public getU2CTime() {\n const u2cLatency = this.precomputedLatencies.get('internal.get.u2c.time');\n\n return u2cLatency ? Math.floor(u2cLatency) : undefined;\n }\n\n /**\n * Device Register Time\n * @returns - latency\n */\n public getRegisterWDMDeviceJMT() {\n return this.getDiffBetweenTimestamps(\n 'internal.register.device.request',\n 'internal.register.device.response'\n );\n }\n\n /**\n * Call Init Join Request\n * @returns - latency\n */\n public getCallInitJoinReq() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.request'\n );\n }\n\n /**\n * Locus Join Request\n * @returns - latency\n */\n public getJoinReqResp() {\n return this.getDiffBetweenTimestamps('client.locus.join.request', 'client.locus.join.response');\n }\n\n /**\n * Time taken to do turn discovery\n * @returns - latency\n */\n public getTurnDiscoveryTime() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.add-media.turn-discovery.start',\n 'internal.client.add-media.turn-discovery.end'\n );\n }\n\n /**\n * Local SDP Generated Remote SDP REceived\n * @returns - latency\n */\n public getLocalSDPGenRemoteSDPRecv() {\n return this.getDiffBetweenTimestamps(\n 'client.media-engine.local-sdp-generated',\n 'client.media-engine.remote-sdp-received'\n );\n }\n\n /**\n * ICE Setup Time\n * @returns - latency\n */\n public getICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Audio ICE time\n * @returns - latency\n */\n public getAudioICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Video ICE Time\n * @returns - latency\n */\n public getVideoICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Share ICE Time\n * @returns - latency\n */\n public getShareICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Stay Lobby Time\n * @returns - latency\n */\n public getStayLobbyTime() {\n return this.getDiffBetweenTimestamps(\n 'client.locus.join.response',\n 'internal.host.meeting.participant.admitted'\n );\n }\n\n /**\n * Page JMT\n * @returns - latency\n */\n public getPageJMT() {\n return this.precomputedLatencies.get('internal.client.pageJMT') || undefined;\n }\n\n /**\n * Download Time JMT\n * @returns - latency\n */\n public getDownloadTimeJMT() {\n return this.precomputedLatencies.get('internal.download.time') || undefined;\n }\n\n /**\n * Click To Interstitial\n * @returns - latency\n */\n public getClickToInterstitial() {\n // for normal join (where green join button exists before interstitial, i.e reminder, space list etc)\n if (this.latencyTimestamps.get('internal.client.meeting.click.joinbutton')) {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'internal.client.meeting.interstitial-window.showed'\n );\n }\n\n // for cross launch and guest flows\n return this.precomputedLatencies.get('internal.click.to.interstitial') || undefined;\n }\n\n /**\n * Interstitial To Join Ok\n * @returns - latency\n */\n public getInterstitialToJoinOK() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.response'\n );\n }\n\n /**\n * Call Init To MediaEngineReady\n * @returns - latency\n */\n public getCallInitMediaEngineReady() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.media-engine.ready'\n );\n }\n\n /**\n * Interstitial To Media Ok\n * @returns - latency\n */\n public getInterstitialToMediaOKJMT() {\n const interstitialJoinClickTimestamp = this.latencyTimestamps.get(\n 'internal.client.interstitial-window.click.joinbutton'\n );\n\n // get the first timestamp\n const connectedMedia = this.latencyTimestamps.get('client.ice.end');\n\n const lobbyTime = this.getStayLobbyTime() || 0;\n\n if (interstitialJoinClickTimestamp && connectedMedia) {\n return connectedMedia - interstitialJoinClickTimestamp - lobbyTime;\n }\n\n return undefined;\n }\n\n /**\n * Total JMT\n * @returns - latency\n */\n public getTotalJMT() {\n const clickToInterstitial = this.getClickToInterstitial();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n\n if (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 lobbyTime = this.getStayLobbyTime();\n\n if (clickToInterstitial && interstitialToJoinOk && joinConfJMT) {\n const totalMediaJMT = clickToInterstitial + interstitialToJoinOk + joinConfJMT;\n if (this.getMeeting()?.allowMediaInLobby) {\n return totalMediaJMT;\n }\n\n return totalMediaJMT - lobbyTime;\n }\n\n return undefined;\n }\n\n /**\n * Client JMT\n * @returns - latency\n */\n public getClientJMT() {\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n\n if (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 * Total latency for all get cluster request.\n */\n public getReachabilityClustersReqResp() {\n const reachablityClusterReqResp = this.precomputedLatencies.get('internal.get.cluster.time');\n\n return reachablityClusterReqResp ? Math.floor(reachablityClusterReqResp) : undefined;\n }\n\n /**\n * Audio setup delay transmit\n */\n public getAudioJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Video setup delay transmit\n */\n public getVideoJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Total latency for all exchange ci token.\n */\n public getExchangeCITokenJMT() {\n const exchangeCITokenJMT = this.precomputedLatencies.get('internal.exchange.ci.token.time');\n\n return exchangeCITokenJMT ? Math.floor(exchangeCITokenJMT) : undefined;\n }\n\n /**\n * Total latency for all refresh captcha requests.\n */\n public getRefreshCaptchaReqResp() {\n const refreshCaptchaReqResp = this.precomputedLatencies.get('internal.refresh.captcha.time');\n\n return refreshCaptchaReqResp ? Math.floor(refreshCaptchaReqResp) : undefined;\n }\n\n /**\n * Get the latency for downloading intelligence models.\n * @returns - latency\n */\n public getDownloadIntelligenceModelsReqResp() {\n const downloadIntelligenceModelsReqResp = this.precomputedLatencies.get(\n 'internal.api.fetch.intelligence.models'\n );\n\n return downloadIntelligenceModelsReqResp\n ? Math.floor(downloadIntelligenceModelsReqResp)\n : undefined;\n }\n\n /**\n * Get the total latency for all other app API requests.\n * Excludes meeting info, because it's measured separately.\n * @returns - latency\n */\n public getOtherAppApiReqResp() {\n const otherAppApiJMT = this.precomputedLatencies.get('internal.other.app.api.time');\n\n return otherAppApiJMT > 0 ? Math.floor(otherAppApiJMT) : undefined;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","CallDiagnosticLatencies","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","latencyTimestamps","_map","precomputedLatencies","_createClass2","key","value","clearTimestamps","clear","setMeetingId","meetingId","getMeeting","webex","meetings","meetingCollection","get","undefined","saveTimestamp","_ref","_ref$value","Date","getTime","_ref$options","options","saveFirstTimestampOnly","set","saveLatency","accumulate","existingValue","measureLatency","callback","_this2","start","performance","now","finally","has","getDiffBetweenTimestamps","a","b","end","getMeetingInfoReqResp","getShowInterstitialTime","getU2CTime","u2cLatency","Math","floor","getRegisterWDMDeviceJMT","getCallInitJoinReq","getJoinReqResp","getTurnDiscoveryTime","getLocalSDPGenRemoteSDPRecv","getICESetupTime","getAudioICESetupTime","getVideoICESetupTime","getShareICESetupTime","getStayLobbyTime","getPageJMT","getDownloadTimeJMT","getClickToInterstitial","getInterstitialToJoinOK","getCallInitMediaEngineReady","getInterstitialToMediaOKJMT","interstitialJoinClickTimestamp","connectedMedia","lobbyTime","getTotalJMT","clickToInterstitial","interstitialToJoinOk","getJoinConfJMT","joinReqResp","ICESetupTime","getTotalMediaJMT","joinConfJMT","_this$getMeeting","totalMediaJMT","allowMediaInLobby","getClientJMT","getAudioJoinRespRxStart","getVideoJoinRespRxStart","getReachabilityClustersReqResp","reachablityClusterReqResp","getAudioJoinRespTxStart","getVideoJoinRespTxStart","getExchangeCITokenJMT","exchangeCITokenJMT","getRefreshCaptchaReqResp","refreshCaptchaReqResp","getDownloadIntelligenceModelsReqResp","downloadIntelligenceModelsReqResp","getOtherAppApiReqResp","otherAppApiJMT","WebexPlugin"],"sources":["call-diagnostic-metrics-latencies.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport {MetricEventNames, PreComputedLatencies} from '../metrics.types';\n\n// we only care about client event and feature event for now\n\n/**\n * @description Helper class to store latencies timestamp and to calculate various latencies for CA.\n * @exports\n * @class CallDiagnosticLatencies\n */\nexport default class CallDiagnosticLatencies extends WebexPlugin {\n latencyTimestamps: Map<MetricEventNames, number>;\n precomputedLatencies: Map<PreComputedLatencies, number>;\n // meetingId that the current latencies are for\n private meetingId?: string;\n\n /**\n * @constructor\n */\n constructor(...args) {\n super(...args);\n this.latencyTimestamps = new Map();\n this.precomputedLatencies = new Map();\n }\n\n /**\n * Clear timestamps\n */\n public clearTimestamps() {\n this.latencyTimestamps.clear();\n this.precomputedLatencies.clear();\n }\n\n /**\n * Associate current latencies with a meeting id\n * @param meetingId\n */\n private setMeetingId(meetingId: string) {\n this.meetingId = meetingId;\n }\n\n /**\n * Returns the meeting object associated with current latencies\n * @returns meeting object\n */\n private getMeeting() {\n if (this.meetingId) {\n // @ts-ignore\n return this.webex.meetings.meetingCollection.get(this.meetingId);\n }\n\n return undefined;\n }\n\n /**\n * Store timestamp value\n * @param key - key\n * @param value - value\n * @param options - store options\n * @throws\n * @returns\n */\n public saveTimestamp({\n key,\n value = new Date().getTime(),\n options = {},\n }: {\n key: MetricEventNames;\n value?: number;\n options?: {meetingId?: string};\n }) {\n // save the meetingId so we can use the meeting object in latency calculations if needed\n const {meetingId} = options;\n if (meetingId) {\n this.setMeetingId(meetingId);\n }\n // for some events we're only interested in the first timestamp not last\n // as these events can happen multiple times\n if (\n key === 'client.media.rx.start' ||\n key === 'client.media.tx.start' ||\n key === 'internal.client.meetinginfo.request' ||\n key === 'internal.client.meetinginfo.response'\n ) {\n this.saveFirstTimestampOnly(key, value);\n } else {\n this.latencyTimestamps.set(key, value);\n }\n }\n\n /**\n * Store precomputed latency value\n * @param key - key\n * @param value - value\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @throws\n * @returns\n */\n public saveLatency(key: PreComputedLatencies, value: number, accumulate = false) {\n const existingValue = accumulate ? this.precomputedLatencies.get(key) || 0 : 0;\n this.precomputedLatencies.set(key, value + existingValue);\n }\n\n /**\n * Measure latency for a request\n * @param callback - callback for which you would like to measure latency\n * @param key - key\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @returns\n */\n public measureLatency(\n callback: () => Promise<unknown>,\n key: PreComputedLatencies,\n accumulate = false\n ) {\n const start = performance.now();\n\n return callback().finally(() => {\n this.saveLatency(key, performance.now() - start, accumulate);\n });\n }\n\n /**\n * Store only the first timestamp value for the given key\n * @param key - key\n * @param value -value\n * @throws\n * @returns\n */\n saveFirstTimestampOnly(key: MetricEventNames, value: number = new Date().getTime()) {\n if (this.latencyTimestamps.has(key)) {\n return;\n }\n this.latencyTimestamps.set(key, value);\n }\n\n /**\n * Helper to calculate end - start\n * @param a start\n * @param b end\n * @returns latency\n */\n public getDiffBetweenTimestamps(a: MetricEventNames, b: MetricEventNames) {\n const start = this.latencyTimestamps.get(a);\n const end = this.latencyTimestamps.get(b);\n 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 'client.interstitial-window.start-launch',\n 'internal.client.interstitial-window.click.joinbutton'\n );\n }\n\n /**\n * getU2CTime\n * @returns - latency\n */\n public getU2CTime() {\n const u2cLatency = this.precomputedLatencies.get('internal.get.u2c.time');\n\n return u2cLatency ? Math.floor(u2cLatency) : undefined;\n }\n\n /**\n * Device Register Time\n * @returns - latency\n */\n public getRegisterWDMDeviceJMT() {\n return this.getDiffBetweenTimestamps(\n 'internal.register.device.request',\n 'internal.register.device.response'\n );\n }\n\n /**\n * Call Init Join Request\n * @returns - latency\n */\n public getCallInitJoinReq() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.request'\n );\n }\n\n /**\n * Locus Join Request\n * @returns - latency\n */\n public getJoinReqResp() {\n return this.getDiffBetweenTimestamps('client.locus.join.request', 'client.locus.join.response');\n }\n\n /**\n * Time taken to do turn discovery\n * @returns - latency\n */\n public getTurnDiscoveryTime() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.add-media.turn-discovery.start',\n 'internal.client.add-media.turn-discovery.end'\n );\n }\n\n /**\n * Local SDP Generated Remote SDP REceived\n * @returns - latency\n */\n public getLocalSDPGenRemoteSDPRecv() {\n return this.getDiffBetweenTimestamps(\n 'client.media-engine.local-sdp-generated',\n 'client.media-engine.remote-sdp-received'\n );\n }\n\n /**\n * ICE Setup Time\n * @returns - latency\n */\n public getICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Audio ICE time\n * @returns - latency\n */\n public getAudioICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Video ICE Time\n * @returns - latency\n */\n public getVideoICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Share ICE Time\n * @returns - latency\n */\n public getShareICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Stay Lobby Time\n * @returns - latency\n */\n public getStayLobbyTime() {\n return this.getDiffBetweenTimestamps(\n 'client.locus.join.response',\n 'internal.host.meeting.participant.admitted'\n );\n }\n\n /**\n * Page JMT\n * @returns - latency\n */\n public getPageJMT() {\n return this.precomputedLatencies.get('internal.client.pageJMT') || undefined;\n }\n\n /**\n * Download Time JMT\n * @returns - latency\n */\n public getDownloadTimeJMT() {\n return this.precomputedLatencies.get('internal.download.time') || undefined;\n }\n\n /**\n * Click To Interstitial\n * @returns - latency\n */\n public getClickToInterstitial() {\n // for normal join (where green join button exists before interstitial, i.e reminder, space list etc)\n if (this.latencyTimestamps.get('internal.client.meeting.click.joinbutton')) {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'internal.client.meeting.interstitial-window.showed'\n );\n }\n\n // for cross launch and guest flows\n return this.precomputedLatencies.get('internal.click.to.interstitial') || undefined;\n }\n\n /**\n * Interstitial To Join Ok\n * @returns - latency\n */\n public getInterstitialToJoinOK() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.response'\n );\n }\n\n /**\n * Call Init To MediaEngineReady\n * @returns - latency\n */\n public getCallInitMediaEngineReady() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.media-engine.ready'\n );\n }\n\n /**\n * Interstitial To Media Ok\n * @returns - latency\n */\n public getInterstitialToMediaOKJMT() {\n const interstitialJoinClickTimestamp = this.latencyTimestamps.get(\n 'internal.client.interstitial-window.click.joinbutton'\n );\n\n // get the first timestamp\n const connectedMedia = this.latencyTimestamps.get('client.ice.end');\n\n const lobbyTime = this.getStayLobbyTime() || 0;\n\n if (interstitialJoinClickTimestamp && connectedMedia) {\n return connectedMedia - interstitialJoinClickTimestamp - lobbyTime;\n }\n\n return undefined;\n }\n\n /**\n * Total JMT\n * @returns - latency\n */\n public getTotalJMT() {\n const clickToInterstitial = this.getClickToInterstitial();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n\n if (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 lobbyTime = this.getStayLobbyTime();\n\n if (clickToInterstitial && interstitialToJoinOk && joinConfJMT) {\n const totalMediaJMT = clickToInterstitial + interstitialToJoinOk + joinConfJMT;\n if (this.getMeeting()?.allowMediaInLobby) {\n return totalMediaJMT;\n }\n\n return totalMediaJMT - lobbyTime;\n }\n\n return undefined;\n }\n\n /**\n * Client JMT\n * @returns - latency\n */\n public getClientJMT() {\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n\n if (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 * Total latency for all get cluster request.\n */\n public getReachabilityClustersReqResp() {\n const reachablityClusterReqResp = this.precomputedLatencies.get('internal.get.cluster.time');\n\n return reachablityClusterReqResp ? Math.floor(reachablityClusterReqResp) : undefined;\n }\n\n /**\n * Audio setup delay transmit\n */\n public getAudioJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Video setup delay transmit\n */\n public getVideoJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Total latency for all exchange ci token.\n */\n public getExchangeCITokenJMT() {\n const exchangeCITokenJMT = this.precomputedLatencies.get('internal.exchange.ci.token.time');\n\n return exchangeCITokenJMT ? Math.floor(exchangeCITokenJMT) : undefined;\n }\n\n /**\n * Total latency for all refresh captcha requests.\n */\n public getRefreshCaptchaReqResp() {\n const refreshCaptchaReqResp = this.precomputedLatencies.get('internal.refresh.captcha.time');\n\n return refreshCaptchaReqResp ? Math.floor(refreshCaptchaReqResp) : undefined;\n }\n\n /**\n * Get the latency for downloading intelligence models.\n * @returns - latency\n */\n public getDownloadIntelligenceModelsReqResp() {\n const downloadIntelligenceModelsReqResp = this.precomputedLatencies.get(\n 'internal.api.fetch.intelligence.models'\n );\n\n return downloadIntelligenceModelsReqResp\n ? Math.floor(downloadIntelligenceModelsReqResp)\n : undefined;\n }\n\n /**\n * Get the total latency for all other app API requests.\n * Excludes meeting info, because it's measured separately.\n * @returns - latency\n */\n public getOtherAppApiReqResp() {\n const otherAppApiJMT = this.precomputedLatencies.get('internal.other.app.api.time');\n\n return otherAppApiJMT > 0 ? Math.floor(otherAppApiJMT) : undefined;\n }\n}\n"],"mappings":"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"}
|
|
@@ -130,7 +130,7 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
130
130
|
if (meetingId) {
|
|
131
131
|
var _meeting$meetingInfo;
|
|
132
132
|
// @ts-ignore
|
|
133
|
-
var meeting = this.webex.meetings.
|
|
133
|
+
var meeting = this.webex.meetings.meetingCollection.get(meetingId);
|
|
134
134
|
return meeting === null || meeting === void 0 ? void 0 : (_meeting$meetingInfo = meeting.meetingInfo) === null || _meeting$meetingInfo === void 0 ? void 0 : _meeting$meetingInfo.enableConvergedArchitecture;
|
|
135
135
|
}
|
|
136
136
|
return undefined;
|
|
@@ -220,7 +220,7 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
220
220
|
};
|
|
221
221
|
if (meetingId) {
|
|
222
222
|
// @ts-ignore
|
|
223
|
-
var meeting = this.webex.meetings.
|
|
223
|
+
var meeting = this.webex.meetings.meetingCollection.get(meetingId);
|
|
224
224
|
if (meeting !== null && meeting !== void 0 && meeting.environment) {
|
|
225
225
|
origin.environment = meeting.environment;
|
|
226
226
|
}
|
|
@@ -259,14 +259,10 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
259
259
|
preLoginId = options.preLoginId,
|
|
260
260
|
sessionCorrelationId = options.sessionCorrelationId;
|
|
261
261
|
var identifiers = {
|
|
262
|
-
correlationId: 'unknown'
|
|
262
|
+
correlationId: 'unknown'
|
|
263
263
|
};
|
|
264
|
-
|
|
265
264
|
if (meeting) {
|
|
266
265
|
identifiers.correlationId = meeting.correlationId;
|
|
267
|
-
if (meeting.sessionCorrelationId) {
|
|
268
|
-
identifiers.sessionCorrelationId = meeting.sessionCorrelationId;
|
|
269
|
-
}
|
|
270
266
|
}
|
|
271
267
|
if (sessionCorrelationId) {
|
|
272
268
|
identifiers.sessionCorrelationId = sessionCorrelationId;
|
|
@@ -274,9 +270,6 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
274
270
|
if (correlationId) {
|
|
275
271
|
identifiers.correlationId = correlationId;
|
|
276
272
|
}
|
|
277
|
-
|
|
278
|
-
// TODO: should we use patterns.uuid to validate correlationId and session correlation id? they will fail the diagnostic events validation pipeline if improperly formatted
|
|
279
|
-
|
|
280
273
|
if (this.device) {
|
|
281
274
|
var device = this.device;
|
|
282
275
|
var _ref2 = (device === null || device === void 0 ? void 0 : device.config) || {},
|
|
@@ -392,7 +385,7 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
392
385
|
// events that will most likely happen in join phase
|
|
393
386
|
if (meetingId) {
|
|
394
387
|
// @ts-ignore
|
|
395
|
-
var meeting = this.webex.meetings.
|
|
388
|
+
var meeting = this.webex.meetings.meetingCollection.get(meetingId);
|
|
396
389
|
if (!meeting) {
|
|
397
390
|
console.warn('Attempt to send MQE but no meeting was found...', "event: ".concat(name, ", meetingId: ").concat(meetingId));
|
|
398
391
|
// @ts-ignore
|
|
@@ -581,11 +574,10 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
581
574
|
});
|
|
582
575
|
}
|
|
583
576
|
|
|
584
|
-
// otherwise return unkown error
|
|
577
|
+
// otherwise return unkown error
|
|
585
578
|
return this.getErrorPayloadForClientErrorCode({
|
|
586
579
|
clientErrorCode: _config2.UNKNOWN_ERROR,
|
|
587
|
-
serviceErrorCode:
|
|
588
|
-
serviceErrorName: rawError === null || rawError === void 0 ? void 0 : rawError.name,
|
|
580
|
+
serviceErrorCode: _config2.UNKNOWN_ERROR,
|
|
589
581
|
payloadOverrides: rawError.payloadOverrides,
|
|
590
582
|
rawErrorMessage: rawErrorMessage,
|
|
591
583
|
httpStatusCode: httpStatusCode
|
|
@@ -612,7 +604,7 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
612
604
|
sessionCorrelationId = options.sessionCorrelationId;
|
|
613
605
|
|
|
614
606
|
// @ts-ignore
|
|
615
|
-
var meeting = this.webex.meetings.
|
|
607
|
+
var meeting = this.webex.meetings.meetingCollection.get(meetingId);
|
|
616
608
|
if (!meeting) {
|
|
617
609
|
console.warn('Attempt to send client event but no meeting was found...', "name: ".concat(name, ", meetingId: ").concat(meetingId));
|
|
618
610
|
// @ts-ignore
|