@webex/internal-plugin-metrics 2.60.1-next.10 → 2.60.1-next.12

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.
Files changed (44) hide show
  1. package/dist/batcher.js +38 -0
  2. package/dist/batcher.js.map +1 -1
  3. package/dist/call-diagnostic/call-diagnostic-metrics-batcher.js +6 -9
  4. package/dist/call-diagnostic/call-diagnostic-metrics-batcher.js.map +1 -1
  5. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +10 -0
  6. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
  7. package/dist/call-diagnostic/call-diagnostic-metrics.js +34 -19
  8. package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
  9. package/dist/call-diagnostic/call-diagnostic-metrics.util.js +4 -0
  10. package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
  11. package/dist/call-diagnostic/config.js +1 -1
  12. package/dist/call-diagnostic/config.js.map +1 -1
  13. package/dist/index.js +16 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/metrics.js +1 -1
  16. package/dist/metrics.types.js.map +1 -1
  17. package/dist/new-metrics.js +3 -37
  18. package/dist/new-metrics.js.map +1 -1
  19. package/dist/prelogin-metrics-batcher.js +81 -0
  20. package/dist/prelogin-metrics-batcher.js.map +1 -0
  21. package/dist/types/batcher.d.ts +5 -0
  22. package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +8 -3
  23. package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +13 -4
  24. package/dist/types/index.d.ts +3 -1
  25. package/dist/types/metrics.types.d.ts +1 -0
  26. package/dist/types/new-metrics.d.ts +0 -8
  27. package/dist/types/prelogin-metrics-batcher.d.ts +2 -0
  28. package/package.json +13 -14
  29. package/src/batcher.js +37 -0
  30. package/src/call-diagnostic/call-diagnostic-metrics-batcher.ts +6 -9
  31. package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +11 -3
  32. package/src/call-diagnostic/call-diagnostic-metrics.ts +26 -12
  33. package/src/call-diagnostic/call-diagnostic-metrics.util.ts +4 -0
  34. package/src/call-diagnostic/config.ts +1 -1
  35. package/src/index.ts +12 -1
  36. package/src/metrics.types.ts +6 -0
  37. package/src/new-metrics.ts +0 -39
  38. package/src/prelogin-metrics-batcher.ts +95 -0
  39. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +4 -0
  40. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +7 -3
  41. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +200 -101
  42. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +6 -0
  43. package/test/unit/spec/new-metrics.ts +0 -33
  44. package/test/unit/spec/prelogin-metrics-batcher.ts +250 -0
package/dist/batcher.js CHANGED
@@ -18,8 +18,18 @@ var _commonTimers = require("@webex/common-timers");
18
18
  */
19
19
 
20
20
  var sym = (0, _symbol.default)('metric id');
21
+
22
+ /**
23
+ * @class
24
+ * @extends Batcher
25
+ * @memberof Metrics
26
+ */
21
27
  var MetricsBatcher = _webexCore.Batcher.extend({
22
28
  namespace: 'Metrics',
29
+ /**
30
+ * @param {any} item
31
+ * @returns {Promise<any>}
32
+ */
23
33
  prepareItem: function prepareItem(item) {
24
34
  // Keep non-prod data out of metrics
25
35
  var env = process.env.NODE_ENV === 'production' ? null : 'TEST';
@@ -29,12 +39,20 @@ var MetricsBatcher = _webexCore.Batcher.extend({
29
39
  item.version = item.version || this.webex.version;
30
40
  return _promise.default.resolve(item);
31
41
  },
42
+ /**
43
+ * @param {any[]} queue
44
+ * @returns {Promise<any[]>}
45
+ */
32
46
  prepareRequest: function prepareRequest(queue) {
33
47
  return _promise.default.resolve(queue.map(function (item) {
34
48
  item.postTime = item.postTime || (0, _now.default)();
35
49
  return item;
36
50
  }));
37
51
  },
52
+ /**
53
+ * @param {any} payload
54
+ * @returns {Promise<any>}
55
+ */
38
56
  submitHttpRequest: function submitHttpRequest(payload) {
39
57
  return this.webex.request({
40
58
  method: 'POST',
@@ -46,12 +64,20 @@ var MetricsBatcher = _webexCore.Batcher.extend({
46
64
  waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout
47
65
  });
48
66
  },
67
+ /**
68
+ * @param {any} res
69
+ * @returns {Promise<any>}
70
+ */
49
71
  handleHttpSuccess: function handleHttpSuccess(res) {
50
72
  var _this = this;
51
73
  return _promise.default.all(res.options.body.metrics.map(function (item) {
52
74
  return _this.acceptItem(item);
53
75
  }));
54
76
  },
77
+ /**
78
+ * @param {any} reason
79
+ * @returns {Promise<any>}
80
+ */
55
81
  handleHttpError: function handleHttpError(reason) {
56
82
  var _this2 = this;
57
83
  if (reason instanceof _webexCore.WebexHttpError.NetworkOrCORSError) {
@@ -70,6 +96,10 @@ var MetricsBatcher = _webexCore.Batcher.extend({
70
96
  }
71
97
  return (0, _apply.default)(_webexCore.Batcher.prototype.handleHttpError, this, [reason]);
72
98
  },
99
+ /**
100
+ * @param {any} item
101
+ * @returns {Promise<any>}
102
+ */
73
103
  rerequest: function rerequest(item) {
74
104
  var _this3 = this;
75
105
  return _promise.default.all([this.getDeferredForRequest(item), this.prepareItem(item)]).then(function (_ref) {
@@ -83,12 +113,20 @@ var MetricsBatcher = _webexCore.Batcher.extend({
83
113
  });
84
114
  });
85
115
  },
116
+ /**
117
+ * @param {any} item
118
+ * @returns {Promise<any>}
119
+ */
86
120
  fingerprintRequest: function fingerprintRequest(item) {
87
121
  item[sym] = item[sym] || {
88
122
  nextDelay: 1000
89
123
  };
90
124
  return _promise.default.resolve(item[sym]);
91
125
  },
126
+ /**
127
+ * @param {any} item
128
+ * @returns {Promise<any>}
129
+ */
92
130
  fingerprintResponse: function fingerprintResponse(item) {
93
131
  return _promise.default.resolve(item[sym]);
94
132
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","_commonTimers","sym","_symbol","default","MetricsBatcher","Batcher","extend","namespace","prepareItem","item","env","process","NODE_ENV","appType","config","time","_now","version","webex","_promise","resolve","prepareRequest","queue","map","postTime","submitHttpRequest","payload","request","method","service","resource","body","metrics","waitForServiceTimeout","handleHttpSuccess","res","_this","all","options","acceptItem","handleHttpError","reason","_this2","WebexHttpError","NetworkOrCORSError","logger","warn","delay","nextDelay","batcherRetryPlateau","safeSetTimeout","rerequest","_apply","prototype","_this3","getDeferredForRequest","then","_ref","_ref2","_slicedToArray2","defer","req","enqueue","bounce","catch","reject","fingerprintRequest","fingerprintResponse","_default","exports"],"sources":["batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher, WebexHttpError} from '@webex/webex-core';\nimport {safeSetTimeout} from '@webex/common-timers';\n\nconst sym = Symbol('metric id');\n\nconst MetricsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n prepareItem(item) {\n // Keep non-prod data out of metrics\n const env = process.env.NODE_ENV === 'production' ? null : 'TEST';\n\n item.appType = item.appType || this.config.appType;\n item.env = item.env || env;\n item.time = item.time || Date.now();\n item.version = item.version || this.webex.version;\n\n return Promise.resolve(item);\n },\n\n prepareRequest(queue) {\n return Promise.resolve(\n queue.map((item) => {\n item.postTime = item.postTime || Date.now();\n\n return item;\n })\n );\n },\n\n submitHttpRequest(payload) {\n return this.webex.request({\n method: 'POST',\n service: 'metrics',\n resource: 'metrics',\n body: {\n metrics: payload,\n },\n waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout,\n });\n },\n\n handleHttpSuccess(res) {\n return Promise.all(res.options.body.metrics.map((item) => this.acceptItem(item)));\n },\n\n handleHttpError(reason) {\n if (reason instanceof WebexHttpError.NetworkOrCORSError) {\n this.logger.warn(\n 'metrics-batcher: received network error submitting metrics, reenqueuing payload'\n );\n\n return Promise.all(\n reason.options.body.metrics.map(\n (item) =>\n new Promise((resolve) => {\n const delay = item[sym].nextDelay;\n\n if (delay < this.config.batcherRetryPlateau) {\n item[sym].nextDelay *= 2;\n }\n safeSetTimeout(() => {\n resolve(this.rerequest(item));\n }, delay);\n })\n )\n );\n }\n\n return Reflect.apply(Batcher.prototype.handleHttpError, this, [reason]);\n },\n\n rerequest(item) {\n return Promise.all([this.getDeferredForRequest(item), this.prepareItem(item)]).then(\n ([defer, req]) => {\n this.enqueue(req)\n .then(() => this.bounce())\n .catch((reason) => defer.reject(reason));\n }\n );\n },\n\n fingerprintRequest(item) {\n item[sym] = item[sym] || {\n nextDelay: 1000,\n };\n\n return Promise.resolve(item[sym]);\n },\n\n fingerprintResponse(item) {\n return Promise.resolve(item[sym]);\n },\n});\n\nexport default MetricsBatcher;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_webexCore","require","_commonTimers","sym","_symbol","default","MetricsBatcher","Batcher","extend","namespace","prepareItem","item","env","process","NODE_ENV","appType","config","time","_now","version","webex","_promise","resolve","prepareRequest","queue","map","postTime","submitHttpRequest","payload","request","method","service","resource","body","metrics","waitForServiceTimeout","handleHttpSuccess","res","_this","all","options","acceptItem","handleHttpError","reason","_this2","WebexHttpError","NetworkOrCORSError","logger","warn","delay","nextDelay","batcherRetryPlateau","safeSetTimeout","rerequest","_apply","prototype","_this3","getDeferredForRequest","then","_ref","_ref2","_slicedToArray2","defer","req","enqueue","bounce","catch","reject","fingerprintRequest","fingerprintResponse","_default","exports"],"sources":["batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher, WebexHttpError} from '@webex/webex-core';\nimport {safeSetTimeout} from '@webex/common-timers';\n\nconst sym = Symbol('metric id');\n\n/**\n * @class\n * @extends Batcher\n * @memberof Metrics\n */\nconst MetricsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n /**\n * @param {any} item\n * @returns {Promise<any>}\n */\n prepareItem(item) {\n // Keep non-prod data out of metrics\n const env = process.env.NODE_ENV === 'production' ? null : 'TEST';\n\n item.appType = item.appType || this.config.appType;\n item.env = item.env || env;\n item.time = item.time || Date.now();\n item.version = item.version || this.webex.version;\n\n return Promise.resolve(item);\n },\n\n /**\n * @param {any[]} queue\n * @returns {Promise<any[]>}\n */\n prepareRequest(queue) {\n return Promise.resolve(\n queue.map((item) => {\n item.postTime = item.postTime || Date.now();\n\n return item;\n })\n );\n },\n\n /**\n * @param {any} payload\n * @returns {Promise<any>}\n */\n submitHttpRequest(payload) {\n return this.webex.request({\n method: 'POST',\n service: 'metrics',\n resource: 'metrics',\n body: {\n metrics: payload,\n },\n waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout,\n });\n },\n\n /**\n * @param {any} res\n * @returns {Promise<any>}\n */\n handleHttpSuccess(res) {\n return Promise.all(res.options.body.metrics.map((item) => this.acceptItem(item)));\n },\n\n /**\n * @param {any} reason\n * @returns {Promise<any>}\n */\n handleHttpError(reason) {\n if (reason instanceof WebexHttpError.NetworkOrCORSError) {\n this.logger.warn(\n 'metrics-batcher: received network error submitting metrics, reenqueuing payload'\n );\n\n return Promise.all(\n reason.options.body.metrics.map(\n (item) =>\n new Promise((resolve) => {\n const delay = item[sym].nextDelay;\n\n if (delay < this.config.batcherRetryPlateau) {\n item[sym].nextDelay *= 2;\n }\n safeSetTimeout(() => {\n resolve(this.rerequest(item));\n }, delay);\n })\n )\n );\n }\n\n return Reflect.apply(Batcher.prototype.handleHttpError, this, [reason]);\n },\n\n /**\n * @param {any} item\n * @returns {Promise<any>}\n */\n rerequest(item) {\n return Promise.all([this.getDeferredForRequest(item), this.prepareItem(item)]).then(\n ([defer, req]) => {\n this.enqueue(req)\n .then(() => this.bounce())\n .catch((reason) => defer.reject(reason));\n }\n );\n },\n\n /**\n * @param {any} item\n * @returns {Promise<any>}\n */\n fingerprintRequest(item) {\n item[sym] = item[sym] || {\n nextDelay: 1000,\n };\n\n return Promise.resolve(item[sym]);\n },\n\n /**\n * @param {any} item\n * @returns {Promise<any>}\n */\n fingerprintResponse(item) {\n return Promise.resolve(item[sym]);\n },\n});\n\nexport default MetricsBatcher;\n"],"mappings":"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"}
@@ -12,23 +12,20 @@ var _batcher = _interopRequireDefault(require("../batcher"));
12
12
  var _callDiagnosticMetrics = require("./call-diagnostic-metrics.util");
13
13
  var _config = require("./config");
14
14
  var _utils = require("../utils");
15
- /* eslint-disable class-methods-use-this */
16
- /* eslint-disable valid-jsdoc */
17
-
18
15
  var CallDiagnosticEventsBatcher = _batcher.default.extend({
19
16
  namespace: 'Metrics',
20
17
  /**
21
18
  * Prepare item
22
- * @param item
23
- * @returns
19
+ * @param {any} item
20
+ * @returns {Promise<any>}
24
21
  */
25
22
  prepareItem: function prepareItem(item) {
26
23
  return _promise.default.resolve((0, _callDiagnosticMetrics.prepareDiagnosticMetricItem)(this.webex, item));
27
24
  },
28
25
  /**
29
26
  * Prepare request, add time sensitive date etc.
30
- * @param queue
31
- * @returns
27
+ * @param {any[]} queue
28
+ * @returns {Promise<any[]>}
32
29
  */
33
30
  prepareRequest: function prepareRequest(queue) {
34
31
  // Add sent timestamp
@@ -40,8 +37,8 @@ var CallDiagnosticEventsBatcher = _batcher.default.extend({
40
37
  },
41
38
  /**
42
39
  *
43
- * @param payload
44
- * @returns
40
+ * @param {any} payload
41
+ * @returns {Promise<any>}
45
42
  */
46
43
  submitHttpRequest: function submitHttpRequest(payload) {
47
44
  var _this = this;
@@ -1 +1 @@
1
- {"version":3,"names":["_lodash","require","_batcher","_interopRequireDefault","_callDiagnosticMetrics","_config","_utils","CallDiagnosticEventsBatcher","Batcher","extend","namespace","prepareItem","item","_promise","default","resolve","prepareDiagnosticMetricItem","webex","prepareRequest","queue","forEach","eventPayload","originTime","sent","Date","toISOString","submitHttpRequest","payload","_this","batchId","uniqueId","request","method","service","resource","body","metrics","waitForServiceTimeout","config","then","res","logger","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","concat","catch","err","error","generateCommonErrorMetadata","reject","_default","exports"],"sources":["call-diagnostic-metrics-batcher.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\nimport {uniqueId} from 'lodash';\nimport Batcher from '../batcher';\nimport {prepareDiagnosticMetricItem} from './call-diagnostic-metrics.util';\nimport {CALL_DIAGNOSTIC_LOG_IDENTIFIER} from './config';\nimport {generateCommonErrorMetadata} from '../utils';\n\nconst CallDiagnosticEventsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n /**\n * Prepare item\n * @param item\n * @returns\n */\n prepareItem(item) {\n return Promise.resolve(prepareDiagnosticMetricItem(this.webex, item));\n },\n\n /**\n * Prepare request, add time sensitive date etc.\n * @param queue\n * @returns\n */\n prepareRequest(queue) {\n // Add sent timestamp\n queue.forEach((item) => {\n item.eventPayload.originTime = item.eventPayload.originTime || {};\n item.eventPayload.originTime.sent = new Date().toISOString();\n });\n\n return Promise.resolve(queue);\n },\n\n /**\n *\n * @param payload\n * @returns\n */\n submitHttpRequest(payload) {\n const batchId = uniqueId('ca-batch-');\n\n return this.webex\n .request({\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: payload,\n },\n waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout,\n })\n .then((res) => {\n this.webex.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request successful.`\n );\n\n return res;\n })\n .catch((err) => {\n this.webex.logger.error(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request failed:`,\n `error: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n },\n});\n\nexport default CallDiagnosticEventsBatcher;\n"],"mappings":";;;;;;;;;AAGA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,sBAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AAPA;AACA;;AAQA,IAAMM,2BAA2B,GAAGC,gBAAO,CAACC,MAAM,CAAC;EACjDC,SAAS,EAAE,SAAS;EAEpB;AACF;AACA;AACA;AACA;EACEC,WAAW,WAAAA,YAACC,IAAI,EAAE;IAChB,OAAOC,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAAC,IAAAC,kDAA2B,EAAC,IAAI,CAACC,KAAK,EAAEL,IAAI,CAAC,CAAC;EACvE,CAAC;EAED;AACF;AACA;AACA;AACA;EACEM,cAAc,WAAAA,eAACC,KAAK,EAAE;IACpB;IACAA,KAAK,CAACC,OAAO,CAAC,UAACR,IAAI,EAAK;MACtBA,IAAI,CAACS,YAAY,CAACC,UAAU,GAAGV,IAAI,CAACS,YAAY,CAACC,UAAU,IAAI,CAAC,CAAC;MACjEV,IAAI,CAACS,YAAY,CAACC,UAAU,CAACC,IAAI,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IAC9D,CAAC,CAAC;IAEF,OAAOZ,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAACI,KAAK,CAAC;EAC/B,CAAC;EAED;AACF;AACA;AACA;AACA;EACEO,iBAAiB,WAAAA,kBAACC,OAAO,EAAE;IAAA,IAAAC,KAAA;IACzB,IAAMC,OAAO,GAAG,IAAAC,gBAAQ,EAAC,WAAW,CAAC;IAErC,OAAO,IAAI,CAACb,KAAK,CACdc,OAAO,CAAC;MACPC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE,SAAS;MAClBC,QAAQ,EAAE,eAAe;MACzBC,IAAI,EAAE;QACJC,OAAO,EAAET;MACX,CAAC;MACDU,qBAAqB,EAAE,IAAI,CAACpB,KAAK,CAACqB,MAAM,CAACF,OAAO,CAACC;IACnD,CAAC,CAAC,CACDE,IAAI,CAAC,UAACC,GAAG,EAAK;MACbZ,KAAI,CAACX,KAAK,CAACwB,MAAM,CAACC,GAAG,CACnBC,sCAA8B,qDAAAC,MAAA,CACqBf,OAAO,0BAC5D,CAAC;MAED,OAAOW,GAAG;IACZ,CAAC,CAAC,CACDK,KAAK,CAAC,UAACC,GAAG,EAAK;MACdlB,KAAI,CAACX,KAAK,CAACwB,MAAM,CAACM,KAAK,CACrBJ,sCAA8B,qDAAAC,MAAA,CACqBf,OAAO,kCAAAe,MAAA,CAChD,IAAAI,kCAA2B,EAACF,GAAG,CAAC,CAC5C,CAAC;MAED,OAAOjC,QAAA,CAAAC,OAAA,CAAQmC,MAAM,CAACH,GAAG,CAAC;IAC5B,CAAC,CAAC;EACN;AACF,CAAC,CAAC;AAAC,IAAAI,QAAA,GAAAC,OAAA,CAAArC,OAAA,GAEYP,2BAA2B"}
1
+ {"version":3,"names":["_lodash","require","_batcher","_interopRequireDefault","_callDiagnosticMetrics","_config","_utils","CallDiagnosticEventsBatcher","Batcher","extend","namespace","prepareItem","item","_promise","default","resolve","prepareDiagnosticMetricItem","webex","prepareRequest","queue","forEach","eventPayload","originTime","sent","Date","toISOString","submitHttpRequest","payload","_this","batchId","uniqueId","request","method","service","resource","body","metrics","waitForServiceTimeout","config","then","res","logger","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","concat","catch","err","error","generateCommonErrorMetadata","reject","_default","exports"],"sources":["call-diagnostic-metrics-batcher.ts"],"sourcesContent":["import {uniqueId} from 'lodash';\nimport Batcher from '../batcher';\nimport {prepareDiagnosticMetricItem} from './call-diagnostic-metrics.util';\nimport {CALL_DIAGNOSTIC_LOG_IDENTIFIER} from './config';\nimport {generateCommonErrorMetadata} from '../utils';\n\nconst CallDiagnosticEventsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n /**\n * Prepare item\n * @param {any} item\n * @returns {Promise<any>}\n */\n prepareItem(item) {\n return Promise.resolve(prepareDiagnosticMetricItem(this.webex, item));\n },\n\n /**\n * Prepare request, add time sensitive date etc.\n * @param {any[]} queue\n * @returns {Promise<any[]>}\n */\n prepareRequest(queue) {\n // Add sent timestamp\n queue.forEach((item) => {\n item.eventPayload.originTime = item.eventPayload.originTime || {};\n item.eventPayload.originTime.sent = new Date().toISOString();\n });\n\n return Promise.resolve(queue);\n },\n\n /**\n *\n * @param {any} payload\n * @returns {Promise<any>}\n */\n submitHttpRequest(payload) {\n const batchId = uniqueId('ca-batch-');\n\n return this.webex\n .request({\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: payload,\n },\n waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout,\n })\n .then((res) => {\n this.webex.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request successful.`\n );\n\n return res;\n })\n .catch((err) => {\n this.webex.logger.error(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request failed:`,\n `error: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n },\n});\n\nexport default CallDiagnosticEventsBatcher;\n"],"mappings":";;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,sBAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AAEA,IAAMM,2BAA2B,GAAGC,gBAAO,CAACC,MAAM,CAAC;EACjDC,SAAS,EAAE,SAAS;EAEpB;AACF;AACA;AACA;AACA;EACEC,WAAW,WAAAA,YAACC,IAAI,EAAE;IAChB,OAAOC,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAAC,IAAAC,kDAA2B,EAAC,IAAI,CAACC,KAAK,EAAEL,IAAI,CAAC,CAAC;EACvE,CAAC;EAED;AACF;AACA;AACA;AACA;EACEM,cAAc,WAAAA,eAACC,KAAK,EAAE;IACpB;IACAA,KAAK,CAACC,OAAO,CAAC,UAACR,IAAI,EAAK;MACtBA,IAAI,CAACS,YAAY,CAACC,UAAU,GAAGV,IAAI,CAACS,YAAY,CAACC,UAAU,IAAI,CAAC,CAAC;MACjEV,IAAI,CAACS,YAAY,CAACC,UAAU,CAACC,IAAI,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IAC9D,CAAC,CAAC;IAEF,OAAOZ,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAACI,KAAK,CAAC;EAC/B,CAAC;EAED;AACF;AACA;AACA;AACA;EACEO,iBAAiB,WAAAA,kBAACC,OAAO,EAAE;IAAA,IAAAC,KAAA;IACzB,IAAMC,OAAO,GAAG,IAAAC,gBAAQ,EAAC,WAAW,CAAC;IAErC,OAAO,IAAI,CAACb,KAAK,CACdc,OAAO,CAAC;MACPC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE,SAAS;MAClBC,QAAQ,EAAE,eAAe;MACzBC,IAAI,EAAE;QACJC,OAAO,EAAET;MACX,CAAC;MACDU,qBAAqB,EAAE,IAAI,CAACpB,KAAK,CAACqB,MAAM,CAACF,OAAO,CAACC;IACnD,CAAC,CAAC,CACDE,IAAI,CAAC,UAACC,GAAG,EAAK;MACbZ,KAAI,CAACX,KAAK,CAACwB,MAAM,CAACC,GAAG,CACnBC,sCAA8B,qDAAAC,MAAA,CACqBf,OAAO,0BAC5D,CAAC;MAED,OAAOW,GAAG;IACZ,CAAC,CAAC,CACDK,KAAK,CAAC,UAACC,GAAG,EAAK;MACdlB,KAAI,CAACX,KAAK,CAACwB,MAAM,CAACM,KAAK,CACrBJ,sCAA8B,qDAAAC,MAAA,CACqBf,OAAO,kCAAAe,MAAA,CAChD,IAAAI,kCAA2B,EAACF,GAAG,CAAC,CAC5C,CAAC;MAED,OAAOjC,QAAA,CAAAC,OAAA,CAAQmC,MAAM,CAACH,GAAG,CAAC;IAC5B,CAAC,CAAC;EACN;AACF,CAAC,CAAC;AAAC,IAAAI,QAAA,GAAAC,OAAA,CAAArC,OAAA,GAEYP,2BAA2B"}
@@ -302,6 +302,16 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
302
302
  return this.precomputedLatencies.get('internal.client.pageJMT') || undefined;
303
303
  }
304
304
 
305
+ /**
306
+ * Download Time JMT
307
+ * @returns - latency
308
+ */
309
+ }, {
310
+ key: "getDownloadTimeJMT",
311
+ value: function getDownloadTimeJMT() {
312
+ return this.precomputedLatencies.get('internal.download.time') || undefined;
313
+ }
314
+
305
315
  /**
306
316
  * Click To Interstitial
307
317
  * @returns - latency
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","CallDiagnosticLatencies","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","latencyTimestamps","_map","precomputedLatencies","_createClass2","key","value","clearTimestamps","clear","setMeetingId","meetingId","getMeeting","webex","meetings","meetingCollection","get","undefined","saveTimestamp","_ref","_ref$value","Date","getTime","_ref$options","options","saveFirstTimestampOnly","set","saveLatency","has","getDiffBetweenTimestamps","a","b","start","end","getMeetingInfoReqResp","getShowInterstitialTime","getRegisterWDMDeviceJMT","getCallInitJoinReq","getJoinReqResp","getJoinRespSentReceived","getTurnDiscoveryTime","getLocalSDPGenRemoteSDPRecv","getICESetupTime","getAudioICESetupTime","getVideoICESetupTime","getShareICESetupTime","getStayLobbyTime","getPageJMT","getClickToInterstitial","getInterstitialToJoinOK","getCallInitMediaEngineReady","getInterstitialToMediaOKJMT","interstitialJoinClickTimestamp","connectedMedia","lobbyTime","getTotalJMT","clickToInterstitial","interstitialToJoinOk","getJoinConfJMT","joinReqResp","ICESetupTime","getTotalMediaJMT","joinConfJMT","_this$getMeeting","totalMediaJMT","allowMediaInLobby","getClientJMT","getAudioJoinRespRxStart","getVideoJoinRespRxStart","getAudioJoinRespTxStart","getVideoJoinRespTxStart","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} 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<string, 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 }\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 * @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 * @throws\n * @returns\n */\n public saveLatency(key: string, value: number) {\n this.precomputedLatencies.set(key, value);\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 * 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 * Locus Join Response Sent Received\n * @returns - latency\n */\n public getJoinRespSentReceived() {\n // TODO: not clear SPARK-440554\n return undefined;\n }\n\n /**\n * 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 * 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 * Audio setup delay transmit\n */\n public getAudioJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Video setup delay transmit\n */\n public getVideoJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_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","has","getDiffBetweenTimestamps","a","b","start","end","getMeetingInfoReqResp","getShowInterstitialTime","getRegisterWDMDeviceJMT","getCallInitJoinReq","getJoinReqResp","getJoinRespSentReceived","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","getAudioJoinRespTxStart","getVideoJoinRespTxStart","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 }\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 * @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 * @throws\n * @returns\n */\n public saveLatency(key: PreComputedLatencies, value: number) {\n this.precomputedLatencies.set(key, value);\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 * 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 * Locus Join Response Sent Received\n * @returns - latency\n */\n public getJoinRespSentReceived() {\n // TODO: not clear SPARK-440554\n return undefined;\n }\n\n /**\n * 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 * Audio setup delay transmit\n */\n public getAudioJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Video setup delay transmit\n */\n public getVideoJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n}\n"],"mappings":"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"}
@@ -31,6 +31,7 @@ var _webexCore = require("@webex/webex-core");
31
31
  var _callDiagnosticMetrics = require("./call-diagnostic-metrics.util");
32
32
  var _config = require("../config");
33
33
  var _callDiagnosticMetricsBatcher = _interopRequireDefault(require("./call-diagnostic-metrics-batcher"));
34
+ var _preloginMetricsBatcher = _interopRequireDefault(require("../prelogin-metrics-batcher"));
34
35
  var _config2 = require("./config");
35
36
  function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
36
37
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -62,6 +63,8 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
62
63
  // @ts-ignore
63
64
  // @ts-ignore
64
65
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "callDiagnosticEventsBatcher", void 0);
66
+ // @ts-ignore
67
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "preLoginMetricsBatcher", void 0);
65
68
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "logger", void 0);
66
69
  // to avoid adding @ts-ignore everywhere
67
70
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasLoggedBrowserSerial", void 0);
@@ -74,30 +77,29 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
74
77
  });
75
78
  });
76
79
  /**
77
- * Pre login events are not batched. We make the request directly.
80
+ * Prepare the event and send the request to metrics-a service, pre login.
78
81
  * @param event
79
82
  * @param preLoginId
80
83
  * @returns
81
84
  */
82
85
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "submitToCallDiagnosticsPreLogin", function (event, preLoginId) {
83
86
  // build metrics-a event type
84
- // @ts-ignore
85
- var diagnosticEvent = (0, _callDiagnosticMetrics.prepareDiagnosticMetricItem)(_this.webex, {
87
+ var finalEvent = {
86
88
  eventPayload: event,
87
89
  type: ['diagnostic-event']
88
- });
89
-
90
- // append sent timestamp
91
- diagnosticEvent.eventPayload.originTime.sent = new Date().toISOString();
92
-
93
- // @ts-ignore
94
- return _this.webex.internal.newMetrics.postPreLoginMetric(diagnosticEvent, preLoginId);
90
+ };
91
+ _this.preLoginMetricsBatcher.savePreLoginId(preLoginId);
92
+ return _this.preLoginMetricsBatcher.request(finalEvent);
95
93
  });
96
94
  _this.logger = _this.webex.logger;
97
95
  // @ts-ignore
98
96
  _this.callDiagnosticEventsBatcher = new _callDiagnosticMetricsBatcher.default({}, {
99
97
  parent: _this.webex
100
98
  });
99
+ // @ts-ignore
100
+ _this.preLoginMetricsBatcher = new _preloginMetricsBatcher.default({}, {
101
+ parent: _this.webex
102
+ });
101
103
  return _this;
102
104
  }
103
105
 
@@ -433,6 +435,7 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
433
435
  * @param arg.clientErrorCode
434
436
  * @param arg.serviceErrorCode
435
437
  * @param arg.payloadOverrides
438
+ * @param arg.httpStatusCode
436
439
  * @returns
437
440
  */
438
441
  }, {
@@ -442,7 +445,8 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
442
445
  serviceErrorCode = _ref3.serviceErrorCode,
443
446
  serviceErrorName = _ref3.serviceErrorName,
444
447
  rawErrorMessage = _ref3.rawErrorMessage,
445
- payloadOverrides = _ref3.payloadOverrides;
448
+ payloadOverrides = _ref3.payloadOverrides,
449
+ httpStatusCode = _ref3.httpStatusCode;
446
450
  var error;
447
451
  if (clientErrorCode) {
448
452
  var partialParsedError = _config2.CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];
@@ -464,6 +468,8 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
464
468
  serviceErrorCode: serviceErrorCode
465
469
  }, {
466
470
  rawErrorMessage: rawErrorMessage
471
+ }, httpStatusCode === undefined ? {} : {
472
+ httpStatusCode: httpStatusCode
467
473
  }, partialParsedError, payloadOverrides || {});
468
474
  return error;
469
475
  }
@@ -480,13 +486,15 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
480
486
  value: function generateClientEventErrorPayload(rawError) {
481
487
  var _rawError$error, _rawError$error$body, _rawError$body, _rawError$body2, _rawError$body3, _rawError$body3$reaso;
482
488
  var rawErrorMessage = rawError.message;
489
+ var httpStatusCode = rawError.statusCode;
483
490
  if (rawError.name) {
484
491
  if ((0, _callDiagnosticMetrics.isBrowserMediaErrorName)(rawError.name)) {
485
492
  return this.getErrorPayloadForClientErrorCode({
486
493
  serviceErrorCode: undefined,
487
494
  clientErrorCode: _config2.BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP[rawError.name],
488
495
  serviceErrorName: rawError.name,
489
- rawErrorMessage: rawErrorMessage
496
+ rawErrorMessage: rawErrorMessage,
497
+ httpStatusCode: httpStatusCode
490
498
  });
491
499
  }
492
500
  }
@@ -498,7 +506,8 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
498
506
  serviceErrorCode: undefined,
499
507
  clientErrorCode: _config2.SDP_OFFER_CREATION_ERROR_MAP[causeType] || _config2.SDP_OFFER_CREATION_ERROR_MAP.GENERAL,
500
508
  serviceErrorName: rawError.name,
501
- rawErrorMessage: rawErrorMessage
509
+ rawErrorMessage: rawErrorMessage,
510
+ httpStatusCode: httpStatusCode
502
511
  });
503
512
  }
504
513
  var serviceErrorCode = (rawError === null || rawError === void 0 ? void 0 : (_rawError$error = rawError.error) === null || _rawError$error === void 0 ? void 0 : (_rawError$error$body = _rawError$error.body) === null || _rawError$error$body === void 0 ? void 0 : _rawError$error$body.errorCode) || (rawError === null || rawError === void 0 ? void 0 : (_rawError$body = rawError.body) === null || _rawError$body === void 0 ? void 0 : _rawError$body.errorCode) || (rawError === null || rawError === void 0 ? void 0 : (_rawError$body2 = rawError.body) === null || _rawError$body2 === void 0 ? void 0 : _rawError$body2.code) || (rawError === null || rawError === void 0 ? void 0 : (_rawError$body3 = rawError.body) === null || _rawError$body3 === void 0 ? void 0 : (_rawError$body3$reaso = _rawError$body3.reason) === null || _rawError$body3$reaso === void 0 ? void 0 : _rawError$body3$reaso.reasonCode);
@@ -508,7 +517,8 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
508
517
  return this.getErrorPayloadForClientErrorCode({
509
518
  clientErrorCode: clientErrorCode,
510
519
  serviceErrorCode: serviceErrorCode,
511
- rawErrorMessage: rawErrorMessage
520
+ rawErrorMessage: rawErrorMessage,
521
+ httpStatusCode: httpStatusCode
512
522
  });
513
523
  }
514
524
 
@@ -517,7 +527,8 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
517
527
  return this.getErrorPayloadForClientErrorCode({
518
528
  clientErrorCode: _config2.NEW_LOCUS_ERROR_CLIENT_CODE,
519
529
  serviceErrorCode: serviceErrorCode,
520
- rawErrorMessage: rawErrorMessage
530
+ rawErrorMessage: rawErrorMessage,
531
+ httpStatusCode: httpStatusCode
521
532
  });
522
533
  }
523
534
  }
@@ -525,7 +536,8 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
525
536
  return this.getErrorPayloadForClientErrorCode({
526
537
  clientErrorCode: _config2.MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,
527
538
  serviceErrorCode: serviceErrorCode,
528
- rawErrorMessage: rawErrorMessage
539
+ rawErrorMessage: rawErrorMessage,
540
+ httpStatusCode: httpStatusCode
529
541
  });
530
542
  }
531
543
  if ((0, _callDiagnosticMetrics.isNetworkError)(rawError)) {
@@ -533,7 +545,8 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
533
545
  clientErrorCode: _config2.NETWORK_ERROR,
534
546
  serviceErrorCode: serviceErrorCode,
535
547
  payloadOverrides: rawError.payloadOverrides,
536
- rawErrorMessage: rawErrorMessage
548
+ rawErrorMessage: rawErrorMessage,
549
+ httpStatusCode: httpStatusCode
537
550
  });
538
551
  }
539
552
  if ((0, _callDiagnosticMetrics.isUnauthorizedError)(rawError)) {
@@ -541,7 +554,8 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
541
554
  clientErrorCode: _config2.AUTHENTICATION_FAILED_CODE,
542
555
  serviceErrorCode: serviceErrorCode,
543
556
  payloadOverrides: rawError.payloadOverrides,
544
- rawErrorMessage: rawErrorMessage
557
+ rawErrorMessage: rawErrorMessage,
558
+ httpStatusCode: httpStatusCode
545
559
  });
546
560
  }
547
561
 
@@ -549,7 +563,8 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
549
563
  return this.getErrorPayloadForClientErrorCode({
550
564
  clientErrorCode: _config2.UNKNOWN_ERROR,
551
565
  serviceErrorCode: _config2.UNKNOWN_ERROR,
552
- rawErrorMessage: rawErrorMessage
566
+ rawErrorMessage: rawErrorMessage,
567
+ httpStatusCode: httpStatusCode
553
568
  });
554
569
  }
555
570