@webex/internal-plugin-metrics 3.7.0-next.5 → 3.7.0-next.7
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/business-metrics.js +74 -100
- package/dist/business-metrics.js.map +1 -1
- package/dist/generic-metrics.js +2 -2
- package/dist/generic-metrics.js.map +1 -1
- package/dist/metrics.js +1 -1
- package/dist/new-metrics.js +6 -4
- package/dist/new-metrics.js.map +1 -1
- package/dist/types/business-metrics.d.ts +10 -28
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +4 -0
- package/dist/types/generic-metrics.d.ts +2 -2
- package/dist/types/new-metrics.d.ts +4 -3
- package/package.json +12 -12
- package/src/business-metrics.ts +66 -76
- package/src/generic-metrics.ts +2 -2
- package/src/new-metrics.ts +5 -3
- package/test/unit/spec/business/business-metrics.ts +2 -2
- package/test/unit/spec/new-metrics.ts +2 -0
package/dist/business-metrics.js
CHANGED
|
@@ -24,7 +24,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
24
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
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
26
|
/**
|
|
27
|
-
* @description Util class to handle
|
|
27
|
+
* @description Util class to handle Business Metrics
|
|
28
28
|
* @export
|
|
29
29
|
* @class BusinessMetrics
|
|
30
30
|
*/
|
|
@@ -36,134 +36,108 @@ var BusinessMetrics = exports.default = /*#__PURE__*/function (_GenericMetrics)
|
|
|
36
36
|
return _super.apply(this, arguments);
|
|
37
37
|
}
|
|
38
38
|
(0, _createClass2.default)(BusinessMetrics, [{
|
|
39
|
-
key: "
|
|
39
|
+
key: "buildEvent",
|
|
40
40
|
value:
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
43
|
-
* so we have to shim this layer specifically for this
|
|
44
|
-
* https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table+wbxapp_callend_metrics
|
|
45
|
-
* @param {EventPayload} payload payload of the metric
|
|
46
|
-
* @returns {Promise<any>}
|
|
47
|
-
*/
|
|
48
|
-
function submitCallEndEvent(_ref) {
|
|
49
|
-
var payload = _ref.payload;
|
|
50
|
-
var event = {
|
|
51
|
-
type: ['business'],
|
|
52
|
-
eventPayload: {
|
|
53
|
-
key: 'callEnd',
|
|
54
|
-
client_timestamp: new Date().toISOString(),
|
|
55
|
-
appType: 'Web Client',
|
|
56
|
-
value: _objectSpread({}, payload)
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
return this.submitEvent({
|
|
60
|
-
kind: 'buisness-events:wbxapp_callend_metrics -> ',
|
|
61
|
-
name: 'wbxapp_callend_metrics',
|
|
62
|
-
event: event
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Submit a buisness metric to our metrics endpoint, going to the default business_ucf table
|
|
68
|
-
* all event payload keys are converted into a hex string value
|
|
69
|
-
* unfortunately, the pinot team does not allow changes to the schema of business_metrics
|
|
70
|
-
* so we have to shim this layer specifically for this
|
|
71
|
-
* https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table%3A+business_metrics
|
|
42
|
+
* Build the metric event to submit.
|
|
72
43
|
* @param {string} name of the metric
|
|
73
|
-
* @param {EventPayload} payload payload of the metric
|
|
74
|
-
* @
|
|
75
|
-
|
|
76
|
-
}, {
|
|
77
|
-
key: "submitBusinessMetricsEvent",
|
|
78
|
-
value: function submitBusinessMetricsEvent(_ref2) {
|
|
79
|
-
var name = _ref2.name,
|
|
80
|
-
payload = _ref2.payload;
|
|
81
|
-
var event = {
|
|
82
|
-
type: ['business'],
|
|
83
|
-
eventPayload: {
|
|
84
|
-
key: name,
|
|
85
|
-
client_timestamp: new Date().toISOString(),
|
|
86
|
-
appType: 'Web Client',
|
|
87
|
-
value: _objectSpread(_objectSpread(_objectSpread({}, this.getContext()), this.getBrowserDetails()), payload)
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
return this.submitEvent({
|
|
91
|
-
kind: 'buisness-events:business_metrics -> ',
|
|
92
|
-
name: name,
|
|
93
|
-
event: event
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Submit a buisness metric to our metrics endpoint, going to the default business_ucf table
|
|
99
|
-
* all event payload keys are converted into a hex string value
|
|
100
|
-
* https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
|
|
101
|
-
* @param {string} name of the metric
|
|
102
|
-
* @param {EventPayload} user payload of the metric
|
|
103
|
-
* @returns {Promise<any>}
|
|
44
|
+
* @param {EventPayload} payload user payload of the metric
|
|
45
|
+
* @param {EventPayload} metadata to include outside of eventPayload.value
|
|
46
|
+
* @returns {MetricEvent} The constructed metric event
|
|
104
47
|
*/
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
var event = {
|
|
48
|
+
function buildEvent(_ref) {
|
|
49
|
+
var name = _ref.name,
|
|
50
|
+
payload = _ref.payload,
|
|
51
|
+
metadata = _ref.metadata;
|
|
52
|
+
return {
|
|
111
53
|
type: ['business'],
|
|
112
|
-
eventPayload: {
|
|
54
|
+
eventPayload: _objectSpread(_objectSpread({
|
|
113
55
|
key: name,
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
context: this.getContext(),
|
|
117
|
-
browserDetails: this.getBrowserDetails(),
|
|
56
|
+
client_timestamp: new Date().toISOString()
|
|
57
|
+
}, metadata), {}, {
|
|
118
58
|
value: payload
|
|
119
|
-
}
|
|
59
|
+
})
|
|
120
60
|
};
|
|
121
|
-
return this.submitEvent({
|
|
122
|
-
kind: 'buisness-events:default -> ',
|
|
123
|
-
name: name,
|
|
124
|
-
event: event
|
|
125
|
-
});
|
|
126
61
|
}
|
|
127
62
|
|
|
128
63
|
/**
|
|
129
|
-
* Submit a
|
|
64
|
+
* Submit a business metric to our metrics endpoint.
|
|
130
65
|
* routes to the correct table with the correct schema payload by table
|
|
131
66
|
* https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
|
|
132
67
|
* @param {string} name of the metric, ignored if going to wbxapp_callend_metrics
|
|
133
68
|
* @param {EventPayload} payload user payload of the metric
|
|
134
69
|
* @param {Table} table optional - to submit the metric to and adapt the sent schema
|
|
70
|
+
* @param {EventPayload} metadata optional - to include outside of eventPayload.value
|
|
135
71
|
* @returns {Promise<any>}
|
|
136
72
|
*/
|
|
137
73
|
}, {
|
|
138
74
|
key: "submitBusinessEvent",
|
|
139
|
-
value: function submitBusinessEvent(
|
|
140
|
-
var name =
|
|
141
|
-
payload =
|
|
142
|
-
table =
|
|
75
|
+
value: function submitBusinessEvent(_ref2) {
|
|
76
|
+
var name = _ref2.name,
|
|
77
|
+
payload = _ref2.payload,
|
|
78
|
+
table = _ref2.table,
|
|
79
|
+
metadata = _ref2.metadata;
|
|
143
80
|
if (!table) {
|
|
144
81
|
table = 'default';
|
|
145
82
|
}
|
|
83
|
+
if (!metadata) {
|
|
84
|
+
metadata = {};
|
|
85
|
+
}
|
|
86
|
+
if (!metadata.appType) {
|
|
87
|
+
metadata.appType = 'Web Client';
|
|
88
|
+
}
|
|
146
89
|
switch (table) {
|
|
147
90
|
case 'wbxapp_callend_metrics':
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
91
|
+
{
|
|
92
|
+
// https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table+wbxapp_callend_metrics
|
|
93
|
+
var callEndEvent = this.buildEvent({
|
|
94
|
+
name: 'callEnd',
|
|
95
|
+
payload: payload,
|
|
96
|
+
metadata: metadata
|
|
97
|
+
});
|
|
98
|
+
return this.submitEvent({
|
|
99
|
+
kind: 'business-events:wbxapp_callend_metrics -> ',
|
|
100
|
+
name: 'wbxapp_callend_metrics',
|
|
101
|
+
event: callEndEvent
|
|
102
|
+
});
|
|
103
|
+
}
|
|
151
104
|
case 'business_metrics':
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
105
|
+
{
|
|
106
|
+
// all event payload keys are converted into a hex string value
|
|
107
|
+
// unfortunately, the pinot team does not allow changes to the schema of business_metrics
|
|
108
|
+
// so we have to shim this layer specifically for this
|
|
109
|
+
// https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table%3A+business_metrics
|
|
110
|
+
var businessEvent = this.buildEvent({
|
|
111
|
+
name: name,
|
|
112
|
+
payload: _objectSpread(_objectSpread(_objectSpread({}, this.getContext()), this.getBrowserDetails()), payload),
|
|
113
|
+
metadata: metadata
|
|
114
|
+
});
|
|
115
|
+
return this.submitEvent({
|
|
116
|
+
kind: 'business-events:business_metrics -> ',
|
|
117
|
+
name: name,
|
|
118
|
+
event: businessEvent
|
|
119
|
+
});
|
|
120
|
+
}
|
|
156
121
|
case 'business_ucf':
|
|
157
|
-
return this.submitDefaultEvent({
|
|
158
|
-
name: name,
|
|
159
|
-
payload: payload
|
|
160
|
-
});
|
|
161
122
|
case 'default':
|
|
162
123
|
default:
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
124
|
+
{
|
|
125
|
+
// all event payload keys are converted into a hex string value
|
|
126
|
+
// https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
|
|
127
|
+
var defaultEvent = this.buildEvent({
|
|
128
|
+
name: name,
|
|
129
|
+
payload: payload,
|
|
130
|
+
metadata: _objectSpread({
|
|
131
|
+
context: this.getContext(),
|
|
132
|
+
browserDetails: this.getBrowserDetails()
|
|
133
|
+
}, metadata)
|
|
134
|
+
});
|
|
135
|
+
return this.submitEvent({
|
|
136
|
+
kind: 'business-events:default -> ',
|
|
137
|
+
name: name,
|
|
138
|
+
event: defaultEvent
|
|
139
|
+
});
|
|
140
|
+
}
|
|
167
141
|
}
|
|
168
142
|
}
|
|
169
143
|
}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_genericMetrics","_interopRequireDefault","require","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","BusinessMetrics","exports","_GenericMetrics","_inherits2","_super","_classCallCheck2","_createClass2","key","value","
|
|
1
|
+
{"version":3,"names":["_genericMetrics","_interopRequireDefault","require","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","BusinessMetrics","exports","_GenericMetrics","_inherits2","_super","_classCallCheck2","_createClass2","key","value","buildEvent","_ref","name","payload","metadata","type","eventPayload","client_timestamp","Date","toISOString","submitBusinessEvent","_ref2","table","appType","callEndEvent","submitEvent","kind","event","businessEvent","getContext","getBrowserDetails","defaultEvent","context","browserDetails","GenericMetrics"],"sources":["business-metrics.ts"],"sourcesContent":["import GenericMetrics from './generic-metrics';\nimport {EventPayload, Table} from './metrics.types';\n\n/**\n * @description Util class to handle Business Metrics\n * @export\n * @class BusinessMetrics\n */\nexport default class BusinessMetrics extends GenericMetrics {\n /**\n * Build the metric event to submit.\n * @param {string} name of the metric\n * @param {EventPayload} payload user payload of the metric\n * @param {EventPayload} metadata to include outside of eventPayload.value\n * @returns {MetricEvent} The constructed metric event\n */\n private buildEvent({name, payload, metadata}: {name: string; payload: object; metadata: object}) {\n return {\n type: ['business'],\n eventPayload: {\n key: name,\n client_timestamp: new Date().toISOString(),\n ...metadata,\n value: payload,\n },\n };\n }\n\n /**\n * Submit a business metric to our metrics endpoint.\n * routes to the correct table with the correct schema payload by table\n * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA\n * @param {string} name of the metric, ignored if going to wbxapp_callend_metrics\n * @param {EventPayload} payload user payload of the metric\n * @param {Table} table optional - to submit the metric to and adapt the sent schema\n * @param {EventPayload} metadata optional - to include outside of eventPayload.value\n * @returns {Promise<any>}\n */\n public submitBusinessEvent({\n name,\n payload,\n table,\n metadata,\n }: {\n name: string;\n payload: EventPayload;\n table?: Table;\n metadata?: EventPayload;\n }): Promise<void> {\n if (!table) {\n table = 'default';\n }\n if (!metadata) {\n metadata = {};\n }\n if (!metadata.appType) {\n metadata.appType = 'Web Client';\n }\n switch (table) {\n case 'wbxapp_callend_metrics': {\n // https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table+wbxapp_callend_metrics\n const callEndEvent = this.buildEvent({name: 'callEnd', payload, metadata});\n\n return this.submitEvent({\n kind: 'business-events:wbxapp_callend_metrics -> ',\n name: 'wbxapp_callend_metrics',\n event: callEndEvent,\n });\n }\n\n case 'business_metrics': {\n // all event payload keys are converted into a hex string value\n // unfortunately, the pinot team does not allow changes to the schema of business_metrics\n // so we have to shim this layer specifically for this\n // https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table%3A+business_metrics\n const businessEvent = this.buildEvent({\n name,\n payload: {\n ...this.getContext(),\n ...this.getBrowserDetails(),\n ...payload,\n },\n metadata,\n });\n\n return this.submitEvent({\n kind: 'business-events:business_metrics -> ',\n name,\n event: businessEvent,\n });\n }\n\n case 'business_ucf':\n case 'default':\n default: {\n // all event payload keys are converted into a hex string value\n // https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA\n const defaultEvent = this.buildEvent({\n name,\n payload,\n metadata: {\n context: this.getContext(),\n browserDetails: this.getBrowserDetails(),\n ...metadata,\n },\n });\n\n return this.submitEvent({kind: 'business-events:default -> ', name, event: defaultEvent});\n }\n }\n }\n}\n"],"mappings":"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"}
|
package/dist/generic-metrics.js
CHANGED
|
@@ -67,7 +67,7 @@ var GenericMetrics = exports.default = /*#__PURE__*/function (_StatelessWebexPlu
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
/**
|
|
70
|
-
* Submit a
|
|
70
|
+
* Submit a business metric to our metrics endpoint.
|
|
71
71
|
* @param {string} kind of metric for logging
|
|
72
72
|
* @param {string} name of the metric
|
|
73
73
|
* @param {object} event
|
|
@@ -144,7 +144,7 @@ var GenericMetrics = exports.default = /*#__PURE__*/function (_StatelessWebexPlu
|
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
/**
|
|
147
|
-
* Returns true once we have the deviceId we need to submit behavioral/operational/
|
|
147
|
+
* Returns true once we have the deviceId we need to submit behavioral/operational/business events
|
|
148
148
|
* @returns {boolean}
|
|
149
149
|
*/
|
|
150
150
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_common","_lodash","_clientMetricsBatcher","_interopRequireDefault","_metrics","_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","GenericMetrics","exports","_StatelessWebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","logger","webex","clientMetricsBatcher","ClientMetricsBatcher","parent","device","internal","version","_createClass2","key","value","submitEvent","_ref","kind","name","event","log","request","getDeviceId","deviceId","url","n","lastIndexOf","substring","getContext","app","id","locale","window","navigator","language","os","getOSNameInternal","getBrowserDetails","browser","browserHeight","innerHeight","browserVersion","browserWidth","innerWidth","domain","location","hostname","inIframe","self","top","isReadyToSubmitEvents","createTaggedEventObject","_ref2","type","payload","allTags","merge","context","metricName","tags","timestamp","_now","StatelessWebexPlugin"],"sources":["generic-metrics.ts"],"sourcesContent":["import {StatelessWebexPlugin} from '@webex/webex-core';\nimport {BrowserDetection} from '@webex/common';\nimport {merge} from 'lodash';\nimport ClientMetricsBatcher from './client-metrics-batcher';\nimport {getOSNameInternal} from './metrics';\nimport {DeviceContext, TaggedEvent, EventPayload, MetricType} from './metrics.types';\n\nconst {getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\n/**\n * @description top-level abstract class to handle Metrics and common routines.\n * @export\n * @class GenericMetrics\n */\nexport default abstract class GenericMetrics 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 private deviceId = '';\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.clientMetricsBatcher = new ClientMetricsBatcher({}, {parent: this.webex});\n // @ts-ignore\n this.device = this.webex.internal.device;\n // @ts-ignore\n this.version = this.webex.version;\n }\n\n /**\n * Submit a
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_common","_lodash","_clientMetricsBatcher","_interopRequireDefault","_metrics","_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","GenericMetrics","exports","_StatelessWebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","logger","webex","clientMetricsBatcher","ClientMetricsBatcher","parent","device","internal","version","_createClass2","key","value","submitEvent","_ref","kind","name","event","log","request","getDeviceId","deviceId","url","n","lastIndexOf","substring","getContext","app","id","locale","window","navigator","language","os","getOSNameInternal","getBrowserDetails","browser","browserHeight","innerHeight","browserVersion","browserWidth","innerWidth","domain","location","hostname","inIframe","self","top","isReadyToSubmitEvents","createTaggedEventObject","_ref2","type","payload","allTags","merge","context","metricName","tags","timestamp","_now","StatelessWebexPlugin"],"sources":["generic-metrics.ts"],"sourcesContent":["import {StatelessWebexPlugin} from '@webex/webex-core';\nimport {BrowserDetection} from '@webex/common';\nimport {merge} from 'lodash';\nimport ClientMetricsBatcher from './client-metrics-batcher';\nimport {getOSNameInternal} from './metrics';\nimport {DeviceContext, TaggedEvent, EventPayload, MetricType} from './metrics.types';\n\nconst {getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\n/**\n * @description top-level abstract class to handle Metrics and common routines.\n * @export\n * @class GenericMetrics\n */\nexport default abstract class GenericMetrics 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 private deviceId = '';\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.clientMetricsBatcher = new ClientMetricsBatcher({}, {parent: this.webex});\n // @ts-ignore\n this.device = this.webex.internal.device;\n // @ts-ignore\n this.version = this.webex.version;\n }\n\n /**\n * Submit a business metric to our metrics endpoint.\n * @param {string} kind of metric for logging\n * @param {string} name of the metric\n * @param {object} event\n * @returns {Promise<any>}\n */\n protected submitEvent({kind, name, event}: {kind: string; name: string; event: object}) {\n this.logger.log(kind, `@submitEvent. Submit event: ${name}`);\n\n return this.clientMetricsBatcher.request(event);\n }\n\n /**\n * Returns the deviceId from our registration with WDM.\n * @returns {string} deviceId or empty string\n */\n protected getDeviceId(): string {\n if (this.deviceId === '') {\n const {url} = this.device;\n if (url && url.length !== 0) {\n const n = url.lastIndexOf('/');\n if (n !== -1) {\n this.deviceId = url.substring(n + 1);\n }\n }\n }\n\n return this.deviceId;\n }\n\n /**\n * Returns the context object to be submitted with all metrics.\n * @returns {DeviceContext}\n */\n protected getContext(): DeviceContext {\n return {\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\n /**\n * Returns the browser details to be included with all metrics.\n * @returns {object}\n */\n protected getBrowserDetails(): object {\n return {\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\n /**\n * Returns true once we have the deviceId we need to submit behavioral/operational/business events\n * @returns {boolean}\n */\n public isReadyToSubmitEvents(): boolean {\n const deviceId = this.getDeviceId();\n\n return deviceId && deviceId.length !== 0;\n }\n\n /**\n * Creates the object to send to our metrics endpoint for a tagged event (i.e. behavoral or operational)\n * @param {[MetricType]} list of event type (i.e. ['behavioral'], ['operational', 'behavioral'])\n * @param {string} metric name\n * @param {EventPayload} user payload\n * @returns {EventPayload}\n */\n protected createTaggedEventObject({\n type,\n name,\n payload,\n }: {\n type: [MetricType];\n name: string;\n payload: EventPayload;\n }): TaggedEvent {\n let allTags: EventPayload = payload;\n allTags = merge(allTags, this.getBrowserDetails());\n\n const event = {\n context: this.getContext(),\n metricName: name,\n tags: allTags,\n timestamp: Date.now(),\n type,\n };\n\n return event;\n }\n}\n"],"mappings":"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"}
|
package/dist/metrics.js
CHANGED
package/dist/new-metrics.js
CHANGED
|
@@ -172,7 +172,7 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
/**
|
|
175
|
-
* @returns true once we have the deviceId we need to submit
|
|
175
|
+
* @returns true once we have the deviceId we need to submit business events
|
|
176
176
|
*/
|
|
177
177
|
}, {
|
|
178
178
|
key: "isReadyToSubmitBusinessEvents",
|
|
@@ -231,7 +231,7 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
231
231
|
}
|
|
232
232
|
|
|
233
233
|
/**
|
|
234
|
-
*
|
|
234
|
+
* Business event
|
|
235
235
|
* @param args
|
|
236
236
|
*/
|
|
237
237
|
}, {
|
|
@@ -239,7 +239,8 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
239
239
|
value: function submitBusinessEvent(_ref4) {
|
|
240
240
|
var name = _ref4.name,
|
|
241
241
|
payload = _ref4.payload,
|
|
242
|
-
table = _ref4.table
|
|
242
|
+
table = _ref4.table,
|
|
243
|
+
metadata = _ref4.metadata;
|
|
243
244
|
if (!this.isReady) {
|
|
244
245
|
// @ts-ignore
|
|
245
246
|
this.webex.logger.log("NewMetrics: @submitBusinessEvent. Attempted to submit before webex.ready: ".concat(name));
|
|
@@ -249,7 +250,8 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
249
250
|
return this.businessMetrics.submitBusinessEvent({
|
|
250
251
|
name: name,
|
|
251
252
|
payload: payload,
|
|
252
|
-
table: table
|
|
253
|
+
table: table,
|
|
254
|
+
metadata: metadata
|
|
253
255
|
});
|
|
254
256
|
}
|
|
255
257
|
|
package/dist/new-metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_callDiagnosticMetrics","_interopRequireDefault","_behavioralMetrics","_operationalMetrics","_businessMetrics","_callDiagnosticMetricsLatencies","_callDiagnosticMetrics2","_utils","_class","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","Metrics","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","callDiagnosticLatencies","CallDiagnosticLatencies","parent","webex","onReady","_createClass2","key","value","_this2","once","callDiagnosticMetrics","CallDiagnosticMetrics","isReady","submitInternalEvent","_ref","name","payload","options","clearTimestamps","saveTimestamp","lazyBuildBehavioralMetrics","behavioralMetrics","BehavioralMetrics","lazyBuildOperationalMetrics","operationalMetrics","OperationalMetrics","lazyBuildBusinessMetrics","businessMetrics","BusinessMetrics","isReadyToSubmitBehavioralEvents","_this$behavioralMetri","_this$behavioralMetri2","isReadyToSubmitEvents","isReadyToSubmitOperationalEvents","_this$operationalMetr","_this$operationalMetr2","isReadyToSubmitBusinessEvents","_this$businessMetrics","_this$businessMetrics2","submitBehavioralEvent","_ref2","product","agent","target","verb","logger","log","_promise","resolve","submitOperationalEvent","_ref3","submitBusinessEvent","_ref4","table","submitMQE","_ref5","submitFeatureEvent","_ref6","Error","submitClientEvent","_ref7","meetingId","clientMetricsAliasUser","preLoginId","_this3","request","method","api","resource","headers","body","qs","alias","then","res","catch","err","error","generateCommonErrorMetadata","reject","_buildClientEventFetchRequestOptions","_asyncToGenerator2","_regenerator","mark","_callee","_ref8","wrap","_callee$","_context","prev","next","abrupt","buildClientEventFetchRequestOptions","stop","_x","setMetricTimingsAndFetch","setTimingsAndFetch","setMetricTimings","isServiceErrorExpected","serviceErrorCode","WebexPlugin","_default","exports"],"sources":["new-metrics.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';\nimport BehavioralMetrics from './behavioral-metrics';\nimport OperationalMetrics from './operational-metrics';\nimport BusinessMetrics from './business-metrics';\nimport {\n RecursivePartial,\n MetricEventProduct,\n MetricEventAgent,\n MetricEventVerb,\n ClientEvent,\n FeatureEvent,\n EventPayload,\n OperationalEvent,\n MediaQualityEvent,\n InternalEvent,\n SubmitClientEventOptions,\n Table,\n} from './metrics.types';\nimport CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';\nimport {setMetricTimings} from './call-diagnostic/call-diagnostic-metrics.util';\nimport {generateCommonErrorMetadata} from './utils';\n\n/**\n * Metrics plugin to centralize all types of metrics.\n * https://confluence-eng-gpk2.cisco.com/conf/pages/viewpage.action?pageId=231011379\n * @class\n */\nclass Metrics extends WebexPlugin {\n // eslint-disable-next-line no-use-before-define\n static instance: Metrics;\n\n // Call Diagnostic latencies\n callDiagnosticLatencies: CallDiagnosticLatencies;\n // Helper classes to handle the different types of metrics\n callDiagnosticMetrics: CallDiagnosticMetrics;\n behavioralMetrics: BehavioralMetrics;\n operationalMetrics: OperationalMetrics;\n businessMetrics: BusinessMetrics;\n isReady = false;\n\n /**\n * Constructor\n * @param args\n * @constructor\n * @private\n * @returns\n */\n constructor(...args) {\n super(...args);\n\n // @ts-ignore\n this.callDiagnosticLatencies = new CallDiagnosticLatencies({}, {parent: this.webex});\n this.onReady();\n }\n\n /**\n * On Ready\n */\n private onReady() {\n // @ts-ignore\n this.webex.once('ready', () => {\n // @ts-ignore\n this.callDiagnosticMetrics = new CallDiagnosticMetrics({}, {parent: this.webex});\n this.isReady = true;\n });\n }\n\n /**\n * Used for internal purposes only\n * @param args\n */\n submitInternalEvent({\n name,\n payload,\n options,\n }: {\n name: InternalEvent['name'];\n payload?: RecursivePartial<InternalEvent['payload']>;\n options?: any;\n }) {\n if (name === 'internal.reset.join.latencies') {\n this.callDiagnosticLatencies.clearTimestamps();\n } else {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n }\n }\n\n /**\n * if webex metrics is ready, build behavioral metric backend if not already done.\n */\n private lazyBuildBehavioralMetrics() {\n if (this.isReady && !this.behavioralMetrics) {\n // @ts-ignore\n this.behavioralMetrics = new BehavioralMetrics({}, {parent: this.webex});\n }\n }\n\n /**\n * if webex metrics is ready, build operational metric backend if not already done.\n */\n private lazyBuildOperationalMetrics() {\n if (this.isReady && !this.operationalMetrics) {\n // @ts-ignore\n this.operationalMetrics = new OperationalMetrics({}, {parent: this.webex});\n }\n }\n\n /**\n * if webex metrics is ready, build business metric backend if not already done.\n */\n private lazyBuildBusinessMetrics() {\n if (this.isReady && !this.businessMetrics) {\n // @ts-ignore\n this.businessMetrics = new BusinessMetrics({}, {parent: this.webex});\n }\n }\n\n /**\n * @returns true once we have the deviceId we need to submit behavioral events to Amplitude\n */\n isReadyToSubmitBehavioralEvents() {\n this.lazyBuildBehavioralMetrics();\n\n return this.behavioralMetrics?.isReadyToSubmitEvents() ?? false;\n }\n\n /**\n * @returns true once we have the deviceId we need to submit operational events\n */\n isReadyToSubmitOperationalEvents() {\n this.lazyBuildOperationalMetrics();\n\n return this.operationalMetrics?.isReadyToSubmitEvents() ?? false;\n }\n\n /**\n * @returns true once we have the deviceId we need to submit buisness events\n */\n isReadyToSubmitBusinessEvents() {\n this.lazyBuildBusinessMetrics();\n\n return this.businessMetrics?.isReadyToSubmitEvents() ?? false;\n }\n\n /**\n * Behavioral event\n * @param args\n */\n 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?: EventPayload;\n }) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitBehavioralEvent. Attempted to submit before webex.ready: ${product}.${agent}.${target}.${verb}`\n );\n\n return Promise.resolve();\n }\n\n this.lazyBuildBehavioralMetrics();\n\n return this.behavioralMetrics.submitBehavioralEvent({product, agent, target, verb, payload});\n }\n\n /**\n * Operational event\n * @param args\n */\n submitOperationalEvent({name, payload}: {name: string; payload?: EventPayload}) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitOperationalEvent. Attempted to submit before webex.ready: ${name}`\n );\n\n return Promise.resolve();\n }\n\n this.lazyBuildOperationalMetrics();\n\n return this.operationalMetrics.submitOperationalEvent({name, payload});\n }\n\n /**\n * Buisness event\n * @param args\n */\n submitBusinessEvent({\n name,\n payload,\n table,\n }: {\n name: string;\n payload: EventPayload;\n table?: Table;\n }) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitBusinessEvent. Attempted to submit before webex.ready: ${name}`\n );\n\n return Promise.resolve();\n }\n\n this.lazyBuildBusinessMetrics();\n\n return this.businessMetrics.submitBusinessEvent({name, payload, table});\n }\n\n /**\n * Call Analyzer: Media Quality Event\n * @param args\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: RecursivePartial<MediaQualityEvent['payload']> & {\n intervals: MediaQualityEvent['payload']['intervals'];\n };\n options: any;\n }) {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n this.callDiagnosticMetrics.submitMQE({name, payload, options});\n }\n\n /**\n * Call Analyzer: Feature Usage Event\n * @param args\n */\n submitFeatureEvent({\n name,\n payload,\n options,\n }: {\n name: FeatureEvent['name'];\n payload?: RecursivePartial<FeatureEvent['payload']>;\n options: any;\n }) {\n throw new Error('Not implemented.');\n }\n\n /**\n * Call Analyzer: Client Event\n * @public\n * @param args\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n if (!this.callDiagnosticLatencies || !this.callDiagnosticMetrics) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitClientEvent. Attempted to submit before webex.ready. Event name: ${name}`\n );\n\n return Promise.resolve();\n }\n this.callDiagnosticLatencies.saveTimestamp({\n key: name,\n options: {meetingId: options?.meetingId},\n });\n\n return this.callDiagnosticMetrics.submitClientEvent({name, payload, options});\n }\n\n /**\n * Issue request to alias a user's pre-login ID with their CI UUID\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n public clientMetricsAliasUser(preLoginId: string) {\n // @ts-ignore\n return this.webex\n .request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics',\n headers: {\n 'x-prelogin-userid': preLoginId,\n },\n body: {},\n qs: {\n alias: true,\n },\n })\n .then((res) => {\n // @ts-ignore\n this.webex.logger.log(`NewMetrics: @clientMetricsAliasUser. Request successful.`);\n\n return res;\n })\n .catch((err) => {\n // @ts-ignore\n this.logger.error(\n `NewMetrics: @clientMetricsAliasUser. Request failed:`,\n `err: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n }\n\n /**\n * Returns a promise that will resolve to fetch options for submitting a metric.\n *\n * This is to support quickly submitting metrics when the browser/tab is closing.\n * Calling submitClientEvent will not work because there some async steps that will\n * not complete before the browser is closed. Instead, we pre-gather all the\n * information/options needed for the request(s), and then simply and quickly\n * fire the fetch(es) when beforeUnload is triggered.\n *\n * We must use fetch instead of request because fetch has a keepalive option that\n * allows the request it to outlive the page.\n *\n * Note: the timings values will be wrong, but setMetricTimingsAndFetch() will\n * properly adjust them before submitting.\n *\n * @public\n * @param {Object} arg\n * @param {String} arg.name - event name\n * @param {Object} arg.payload - event payload\n * @param {Object} arg.options - other options\n * @returns {Promise} promise that resolves to options to be used with fetch\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n return this.callDiagnosticMetrics.buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n });\n }\n\n /**\n * Submits a metric from pre-built request options via the fetch API. Updates\n * the \"$timings\" and \"originTime\" values to Date.now() since the existing times\n * were set when the options were built (not submitted).\n\n * @param {any} options - the pre-built request options for submitting a metric\n * @returns {Promise} promise that resolves to the response object\n */\n public setMetricTimingsAndFetch(options: any): Promise<any> {\n // @ts-ignore\n return this.webex.setTimingsAndFetch(setMetricTimings(options));\n }\n\n /**\n * Returns true if the specified serviceErrorCode maps to an expected error.\n * @param {number} serviceErrorCode the service error code\n * @returns {boolean}\n */\n public isServiceErrorExpected(serviceErrorCode: number): boolean {\n return this.callDiagnosticMetrics.isServiceErrorExpected(serviceErrorCode);\n }\n}\n\nexport default Metrics;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_callDiagnosticMetrics","_interopRequireDefault","_behavioralMetrics","_operationalMetrics","_businessMetrics","_callDiagnosticMetricsLatencies","_callDiagnosticMetrics2","_utils","_class","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","Metrics","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","callDiagnosticLatencies","CallDiagnosticLatencies","parent","webex","onReady","_createClass2","key","value","_this2","once","callDiagnosticMetrics","CallDiagnosticMetrics","isReady","submitInternalEvent","_ref","name","payload","options","clearTimestamps","saveTimestamp","lazyBuildBehavioralMetrics","behavioralMetrics","BehavioralMetrics","lazyBuildOperationalMetrics","operationalMetrics","OperationalMetrics","lazyBuildBusinessMetrics","businessMetrics","BusinessMetrics","isReadyToSubmitBehavioralEvents","_this$behavioralMetri","_this$behavioralMetri2","isReadyToSubmitEvents","isReadyToSubmitOperationalEvents","_this$operationalMetr","_this$operationalMetr2","isReadyToSubmitBusinessEvents","_this$businessMetrics","_this$businessMetrics2","submitBehavioralEvent","_ref2","product","agent","target","verb","logger","log","_promise","resolve","submitOperationalEvent","_ref3","submitBusinessEvent","_ref4","table","metadata","submitMQE","_ref5","submitFeatureEvent","_ref6","Error","submitClientEvent","_ref7","meetingId","clientMetricsAliasUser","preLoginId","_this3","request","method","api","resource","headers","body","qs","alias","then","res","catch","err","error","generateCommonErrorMetadata","reject","_buildClientEventFetchRequestOptions","_asyncToGenerator2","_regenerator","mark","_callee","_ref8","wrap","_callee$","_context","prev","next","abrupt","buildClientEventFetchRequestOptions","stop","_x","setMetricTimingsAndFetch","setTimingsAndFetch","setMetricTimings","isServiceErrorExpected","serviceErrorCode","WebexPlugin","_default","exports"],"sources":["new-metrics.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';\nimport BehavioralMetrics from './behavioral-metrics';\nimport OperationalMetrics from './operational-metrics';\nimport BusinessMetrics from './business-metrics';\nimport {\n RecursivePartial,\n MetricEventProduct,\n MetricEventAgent,\n MetricEventVerb,\n ClientEvent,\n FeatureEvent,\n EventPayload,\n OperationalEvent,\n MediaQualityEvent,\n InternalEvent,\n SubmitClientEventOptions,\n Table,\n} from './metrics.types';\nimport CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';\nimport {setMetricTimings} from './call-diagnostic/call-diagnostic-metrics.util';\nimport {generateCommonErrorMetadata} from './utils';\n\n/**\n * Metrics plugin to centralize all types of metrics.\n * https://confluence-eng-gpk2.cisco.com/conf/pages/viewpage.action?pageId=231011379\n * @class\n */\nclass Metrics extends WebexPlugin {\n // eslint-disable-next-line no-use-before-define\n static instance: Metrics;\n\n // Call Diagnostic latencies\n callDiagnosticLatencies: CallDiagnosticLatencies;\n // Helper classes to handle the different types of metrics\n callDiagnosticMetrics: CallDiagnosticMetrics;\n behavioralMetrics: BehavioralMetrics;\n operationalMetrics: OperationalMetrics;\n businessMetrics: BusinessMetrics;\n isReady = false;\n\n /**\n * Constructor\n * @param args\n * @constructor\n * @private\n * @returns\n */\n constructor(...args) {\n super(...args);\n\n // @ts-ignore\n this.callDiagnosticLatencies = new CallDiagnosticLatencies({}, {parent: this.webex});\n this.onReady();\n }\n\n /**\n * On Ready\n */\n private onReady() {\n // @ts-ignore\n this.webex.once('ready', () => {\n // @ts-ignore\n this.callDiagnosticMetrics = new CallDiagnosticMetrics({}, {parent: this.webex});\n this.isReady = true;\n });\n }\n\n /**\n * Used for internal purposes only\n * @param args\n */\n submitInternalEvent({\n name,\n payload,\n options,\n }: {\n name: InternalEvent['name'];\n payload?: RecursivePartial<InternalEvent['payload']>;\n options?: any;\n }) {\n if (name === 'internal.reset.join.latencies') {\n this.callDiagnosticLatencies.clearTimestamps();\n } else {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n }\n }\n\n /**\n * if webex metrics is ready, build behavioral metric backend if not already done.\n */\n private lazyBuildBehavioralMetrics() {\n if (this.isReady && !this.behavioralMetrics) {\n // @ts-ignore\n this.behavioralMetrics = new BehavioralMetrics({}, {parent: this.webex});\n }\n }\n\n /**\n * if webex metrics is ready, build operational metric backend if not already done.\n */\n private lazyBuildOperationalMetrics() {\n if (this.isReady && !this.operationalMetrics) {\n // @ts-ignore\n this.operationalMetrics = new OperationalMetrics({}, {parent: this.webex});\n }\n }\n\n /**\n * if webex metrics is ready, build business metric backend if not already done.\n */\n private lazyBuildBusinessMetrics() {\n if (this.isReady && !this.businessMetrics) {\n // @ts-ignore\n this.businessMetrics = new BusinessMetrics({}, {parent: this.webex});\n }\n }\n\n /**\n * @returns true once we have the deviceId we need to submit behavioral events to Amplitude\n */\n isReadyToSubmitBehavioralEvents() {\n this.lazyBuildBehavioralMetrics();\n\n return this.behavioralMetrics?.isReadyToSubmitEvents() ?? false;\n }\n\n /**\n * @returns true once we have the deviceId we need to submit operational events\n */\n isReadyToSubmitOperationalEvents() {\n this.lazyBuildOperationalMetrics();\n\n return this.operationalMetrics?.isReadyToSubmitEvents() ?? false;\n }\n\n /**\n * @returns true once we have the deviceId we need to submit business events\n */\n isReadyToSubmitBusinessEvents() {\n this.lazyBuildBusinessMetrics();\n\n return this.businessMetrics?.isReadyToSubmitEvents() ?? false;\n }\n\n /**\n * Behavioral event\n * @param args\n */\n 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?: EventPayload;\n }) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitBehavioralEvent. Attempted to submit before webex.ready: ${product}.${agent}.${target}.${verb}`\n );\n\n return Promise.resolve();\n }\n\n this.lazyBuildBehavioralMetrics();\n\n return this.behavioralMetrics.submitBehavioralEvent({product, agent, target, verb, payload});\n }\n\n /**\n * Operational event\n * @param args\n */\n submitOperationalEvent({name, payload}: {name: string; payload?: EventPayload}) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitOperationalEvent. Attempted to submit before webex.ready: ${name}`\n );\n\n return Promise.resolve();\n }\n\n this.lazyBuildOperationalMetrics();\n\n return this.operationalMetrics.submitOperationalEvent({name, payload});\n }\n\n /**\n * Business event\n * @param args\n */\n submitBusinessEvent({\n name,\n payload,\n table,\n metadata,\n }: {\n name: string;\n payload: EventPayload;\n table?: Table;\n metadata?: EventPayload;\n }) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitBusinessEvent. Attempted to submit before webex.ready: ${name}`\n );\n\n return Promise.resolve();\n }\n\n this.lazyBuildBusinessMetrics();\n\n return this.businessMetrics.submitBusinessEvent({name, payload, table, metadata});\n }\n\n /**\n * Call Analyzer: Media Quality Event\n * @param args\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: RecursivePartial<MediaQualityEvent['payload']> & {\n intervals: MediaQualityEvent['payload']['intervals'];\n };\n options: any;\n }) {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n this.callDiagnosticMetrics.submitMQE({name, payload, options});\n }\n\n /**\n * Call Analyzer: Feature Usage Event\n * @param args\n */\n submitFeatureEvent({\n name,\n payload,\n options,\n }: {\n name: FeatureEvent['name'];\n payload?: RecursivePartial<FeatureEvent['payload']>;\n options: any;\n }) {\n throw new Error('Not implemented.');\n }\n\n /**\n * Call Analyzer: Client Event\n * @public\n * @param args\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n if (!this.callDiagnosticLatencies || !this.callDiagnosticMetrics) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitClientEvent. Attempted to submit before webex.ready. Event name: ${name}`\n );\n\n return Promise.resolve();\n }\n this.callDiagnosticLatencies.saveTimestamp({\n key: name,\n options: {meetingId: options?.meetingId},\n });\n\n return this.callDiagnosticMetrics.submitClientEvent({name, payload, options});\n }\n\n /**\n * Issue request to alias a user's pre-login ID with their CI UUID\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n public clientMetricsAliasUser(preLoginId: string) {\n // @ts-ignore\n return this.webex\n .request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics',\n headers: {\n 'x-prelogin-userid': preLoginId,\n },\n body: {},\n qs: {\n alias: true,\n },\n })\n .then((res) => {\n // @ts-ignore\n this.webex.logger.log(`NewMetrics: @clientMetricsAliasUser. Request successful.`);\n\n return res;\n })\n .catch((err) => {\n // @ts-ignore\n this.logger.error(\n `NewMetrics: @clientMetricsAliasUser. Request failed:`,\n `err: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n }\n\n /**\n * Returns a promise that will resolve to fetch options for submitting a metric.\n *\n * This is to support quickly submitting metrics when the browser/tab is closing.\n * Calling submitClientEvent will not work because there some async steps that will\n * not complete before the browser is closed. Instead, we pre-gather all the\n * information/options needed for the request(s), and then simply and quickly\n * fire the fetch(es) when beforeUnload is triggered.\n *\n * We must use fetch instead of request because fetch has a keepalive option that\n * allows the request it to outlive the page.\n *\n * Note: the timings values will be wrong, but setMetricTimingsAndFetch() will\n * properly adjust them before submitting.\n *\n * @public\n * @param {Object} arg\n * @param {String} arg.name - event name\n * @param {Object} arg.payload - event payload\n * @param {Object} arg.options - other options\n * @returns {Promise} promise that resolves to options to be used with fetch\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n return this.callDiagnosticMetrics.buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n });\n }\n\n /**\n * Submits a metric from pre-built request options via the fetch API. Updates\n * the \"$timings\" and \"originTime\" values to Date.now() since the existing times\n * were set when the options were built (not submitted).\n\n * @param {any} options - the pre-built request options for submitting a metric\n * @returns {Promise} promise that resolves to the response object\n */\n public setMetricTimingsAndFetch(options: any): Promise<any> {\n // @ts-ignore\n return this.webex.setTimingsAndFetch(setMetricTimings(options));\n }\n\n /**\n * Returns true if the specified serviceErrorCode maps to an expected error.\n * @param {number} serviceErrorCode the service error code\n * @returns {boolean}\n */\n public isServiceErrorExpected(serviceErrorCode: number): boolean {\n return this.callDiagnosticMetrics.isServiceErrorExpected(serviceErrorCode);\n }\n}\n\nexport default Metrics;\n"],"mappings":"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"}
|
|
@@ -1,51 +1,33 @@
|
|
|
1
1
|
import GenericMetrics from './generic-metrics';
|
|
2
2
|
import { EventPayload, Table } from './metrics.types';
|
|
3
3
|
/**
|
|
4
|
-
* @description Util class to handle
|
|
4
|
+
* @description Util class to handle Business Metrics
|
|
5
5
|
* @export
|
|
6
6
|
* @class BusinessMetrics
|
|
7
7
|
*/
|
|
8
8
|
export default class BusinessMetrics extends GenericMetrics {
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
* so we have to shim this layer specifically for this
|
|
12
|
-
* https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table+wbxapp_callend_metrics
|
|
13
|
-
* @param {EventPayload} payload payload of the metric
|
|
14
|
-
* @returns {Promise<any>}
|
|
15
|
-
*/
|
|
16
|
-
private submitCallEndEvent;
|
|
17
|
-
/**
|
|
18
|
-
* Submit a buisness metric to our metrics endpoint, going to the default business_ucf table
|
|
19
|
-
* all event payload keys are converted into a hex string value
|
|
20
|
-
* unfortunately, the pinot team does not allow changes to the schema of business_metrics
|
|
21
|
-
* so we have to shim this layer specifically for this
|
|
22
|
-
* https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table%3A+business_metrics
|
|
23
|
-
* @param {string} name of the metric
|
|
24
|
-
* @param {EventPayload} payload payload of the metric
|
|
25
|
-
* @returns {Promise<any>}
|
|
26
|
-
*/
|
|
27
|
-
private submitBusinessMetricsEvent;
|
|
28
|
-
/**
|
|
29
|
-
* Submit a buisness metric to our metrics endpoint, going to the default business_ucf table
|
|
30
|
-
* all event payload keys are converted into a hex string value
|
|
31
|
-
* https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
|
|
10
|
+
* Build the metric event to submit.
|
|
32
11
|
* @param {string} name of the metric
|
|
33
|
-
* @param {EventPayload} user payload of the metric
|
|
34
|
-
* @
|
|
12
|
+
* @param {EventPayload} payload user payload of the metric
|
|
13
|
+
* @param {EventPayload} metadata to include outside of eventPayload.value
|
|
14
|
+
* @returns {MetricEvent} The constructed metric event
|
|
35
15
|
*/
|
|
36
|
-
private
|
|
16
|
+
private buildEvent;
|
|
37
17
|
/**
|
|
38
|
-
* Submit a
|
|
18
|
+
* Submit a business metric to our metrics endpoint.
|
|
39
19
|
* routes to the correct table with the correct schema payload by table
|
|
40
20
|
* https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
|
|
41
21
|
* @param {string} name of the metric, ignored if going to wbxapp_callend_metrics
|
|
42
22
|
* @param {EventPayload} payload user payload of the metric
|
|
43
23
|
* @param {Table} table optional - to submit the metric to and adapt the sent schema
|
|
24
|
+
* @param {EventPayload} metadata optional - to include outside of eventPayload.value
|
|
44
25
|
* @returns {Promise<any>}
|
|
45
26
|
*/
|
|
46
|
-
submitBusinessEvent({ name, payload, table, }: {
|
|
27
|
+
submitBusinessEvent({ name, payload, table, metadata, }: {
|
|
47
28
|
name: string;
|
|
48
29
|
payload: EventPayload;
|
|
49
30
|
table?: Table;
|
|
31
|
+
metadata?: EventPayload;
|
|
50
32
|
}): Promise<void>;
|
|
51
33
|
}
|
|
@@ -223,6 +223,8 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
223
223
|
webexSiteUuid?: string;
|
|
224
224
|
webexUserId?: number;
|
|
225
225
|
webexWebDomain?: string;
|
|
226
|
+
recordingId?: string;
|
|
227
|
+
clientCorrelationId?: string;
|
|
226
228
|
correlationId: string;
|
|
227
229
|
additionalProperties?: false;
|
|
228
230
|
} | {
|
|
@@ -303,6 +305,8 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
303
305
|
webexSiteUuid?: string;
|
|
304
306
|
webexUserId?: number;
|
|
305
307
|
webexWebDomain?: string;
|
|
308
|
+
recordingId?: string;
|
|
309
|
+
clientCorrelationId?: string;
|
|
306
310
|
correlationId: string;
|
|
307
311
|
additionalProperties?: false;
|
|
308
312
|
};
|
|
@@ -17,7 +17,7 @@ export default abstract class GenericMetrics extends StatelessWebexPlugin {
|
|
|
17
17
|
*/
|
|
18
18
|
constructor(...args: any[]);
|
|
19
19
|
/**
|
|
20
|
-
* Submit a
|
|
20
|
+
* Submit a business metric to our metrics endpoint.
|
|
21
21
|
* @param {string} kind of metric for logging
|
|
22
22
|
* @param {string} name of the metric
|
|
23
23
|
* @param {object} event
|
|
@@ -44,7 +44,7 @@ export default abstract class GenericMetrics extends StatelessWebexPlugin {
|
|
|
44
44
|
*/
|
|
45
45
|
protected getBrowserDetails(): object;
|
|
46
46
|
/**
|
|
47
|
-
* Returns true once we have the deviceId we need to submit behavioral/operational/
|
|
47
|
+
* Returns true once we have the deviceId we need to submit behavioral/operational/business events
|
|
48
48
|
* @returns {boolean}
|
|
49
49
|
*/
|
|
50
50
|
isReadyToSubmitEvents(): boolean;
|
|
@@ -60,7 +60,7 @@ declare class Metrics extends WebexPlugin {
|
|
|
60
60
|
*/
|
|
61
61
|
isReadyToSubmitOperationalEvents(): boolean;
|
|
62
62
|
/**
|
|
63
|
-
* @returns true once we have the deviceId we need to submit
|
|
63
|
+
* @returns true once we have the deviceId we need to submit business events
|
|
64
64
|
*/
|
|
65
65
|
isReadyToSubmitBusinessEvents(): boolean;
|
|
66
66
|
/**
|
|
@@ -83,13 +83,14 @@ declare class Metrics extends WebexPlugin {
|
|
|
83
83
|
payload?: EventPayload;
|
|
84
84
|
}): void | Promise<void>;
|
|
85
85
|
/**
|
|
86
|
-
*
|
|
86
|
+
* Business event
|
|
87
87
|
* @param args
|
|
88
88
|
*/
|
|
89
|
-
submitBusinessEvent({ name, payload, table, }: {
|
|
89
|
+
submitBusinessEvent({ name, payload, table, metadata, }: {
|
|
90
90
|
name: string;
|
|
91
91
|
payload: EventPayload;
|
|
92
92
|
table?: Table;
|
|
93
|
+
metadata?: EventPayload;
|
|
93
94
|
}): Promise<void>;
|
|
94
95
|
/**
|
|
95
96
|
* Call Analyzer: Media Quality Event
|
package/package.json
CHANGED
|
@@ -26,22 +26,22 @@
|
|
|
26
26
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
27
27
|
"@webex/jest-config-legacy": "0.0.0",
|
|
28
28
|
"@webex/legacy-tools": "0.0.0",
|
|
29
|
-
"@webex/test-helper-chai": "3.7.0-next.
|
|
30
|
-
"@webex/test-helper-mocha": "3.7.0-next.
|
|
31
|
-
"@webex/test-helper-mock-webex": "3.7.0-next.
|
|
32
|
-
"@webex/test-helper-test-users": "3.7.0-next.
|
|
29
|
+
"@webex/test-helper-chai": "3.7.0-next.7",
|
|
30
|
+
"@webex/test-helper-mocha": "3.7.0-next.7",
|
|
31
|
+
"@webex/test-helper-mock-webex": "3.7.0-next.7",
|
|
32
|
+
"@webex/test-helper-test-users": "3.7.0-next.7",
|
|
33
33
|
"eslint": "^8.24.0",
|
|
34
34
|
"prettier": "^2.7.1",
|
|
35
35
|
"sinon": "^9.2.4"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@webex/common": "3.7.0-next.
|
|
39
|
-
"@webex/common-timers": "3.7.0-next.
|
|
40
|
-
"@webex/event-dictionary-ts": "^1.0.
|
|
41
|
-
"@webex/internal-plugin-metrics": "3.7.0-next.
|
|
42
|
-
"@webex/test-helper-chai": "3.7.0-next.
|
|
43
|
-
"@webex/test-helper-mock-webex": "3.7.0-next.
|
|
44
|
-
"@webex/webex-core": "3.7.0-next.
|
|
38
|
+
"@webex/common": "3.7.0-next.7",
|
|
39
|
+
"@webex/common-timers": "3.7.0-next.7",
|
|
40
|
+
"@webex/event-dictionary-ts": "^1.0.1643",
|
|
41
|
+
"@webex/internal-plugin-metrics": "3.7.0-next.7",
|
|
42
|
+
"@webex/test-helper-chai": "3.7.0-next.7",
|
|
43
|
+
"@webex/test-helper-mock-webex": "3.7.0-next.7",
|
|
44
|
+
"@webex/webex-core": "3.7.0-next.7",
|
|
45
45
|
"ip-anonymize": "^0.1.0",
|
|
46
46
|
"lodash": "^4.17.21",
|
|
47
47
|
"uuid": "^3.3.2"
|
|
@@ -54,5 +54,5 @@
|
|
|
54
54
|
"test:style": "eslint ./src/**/*.*",
|
|
55
55
|
"test:unit": "webex-legacy-tools test --unit --runner mocha"
|
|
56
56
|
},
|
|
57
|
-
"version": "3.7.0-next.
|
|
57
|
+
"version": "3.7.0-next.7"
|
|
58
58
|
}
|
package/src/business-metrics.ts
CHANGED
|
@@ -2,121 +2,111 @@ import GenericMetrics from './generic-metrics';
|
|
|
2
2
|
import {EventPayload, Table} from './metrics.types';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* @description Util class to handle
|
|
5
|
+
* @description Util class to handle Business Metrics
|
|
6
6
|
* @export
|
|
7
7
|
* @class BusinessMetrics
|
|
8
8
|
*/
|
|
9
9
|
export default class BusinessMetrics extends GenericMetrics {
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
* so we have to shim this layer specifically for this
|
|
13
|
-
* https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table+wbxapp_callend_metrics
|
|
14
|
-
* @param {EventPayload} payload payload of the metric
|
|
15
|
-
* @returns {Promise<any>}
|
|
16
|
-
*/
|
|
17
|
-
private submitCallEndEvent({payload}: {payload: EventPayload}) {
|
|
18
|
-
const event = {
|
|
19
|
-
type: ['business'],
|
|
20
|
-
eventPayload: {
|
|
21
|
-
key: 'callEnd',
|
|
22
|
-
client_timestamp: new Date().toISOString(),
|
|
23
|
-
appType: 'Web Client',
|
|
24
|
-
value: {
|
|
25
|
-
...payload,
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
return this.submitEvent({
|
|
31
|
-
kind: 'buisness-events:wbxapp_callend_metrics -> ',
|
|
32
|
-
name: 'wbxapp_callend_metrics',
|
|
33
|
-
event,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Submit a buisness metric to our metrics endpoint, going to the default business_ucf table
|
|
39
|
-
* all event payload keys are converted into a hex string value
|
|
40
|
-
* unfortunately, the pinot team does not allow changes to the schema of business_metrics
|
|
41
|
-
* so we have to shim this layer specifically for this
|
|
42
|
-
* https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table%3A+business_metrics
|
|
11
|
+
* Build the metric event to submit.
|
|
43
12
|
* @param {string} name of the metric
|
|
44
|
-
* @param {EventPayload} payload payload of the metric
|
|
45
|
-
* @
|
|
46
|
-
|
|
47
|
-
private submitBusinessMetricsEvent({name, payload}: {name: string; payload: EventPayload}) {
|
|
48
|
-
const event = {
|
|
49
|
-
type: ['business'],
|
|
50
|
-
eventPayload: {
|
|
51
|
-
key: name,
|
|
52
|
-
client_timestamp: new Date().toISOString(),
|
|
53
|
-
appType: 'Web Client',
|
|
54
|
-
value: {
|
|
55
|
-
...this.getContext(),
|
|
56
|
-
...this.getBrowserDetails(),
|
|
57
|
-
...payload,
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
return this.submitEvent({kind: 'buisness-events:business_metrics -> ', name, event});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Submit a buisness metric to our metrics endpoint, going to the default business_ucf table
|
|
67
|
-
* all event payload keys are converted into a hex string value
|
|
68
|
-
* https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
|
|
69
|
-
* @param {string} name of the metric
|
|
70
|
-
* @param {EventPayload} user payload of the metric
|
|
71
|
-
* @returns {Promise<any>}
|
|
13
|
+
* @param {EventPayload} payload user payload of the metric
|
|
14
|
+
* @param {EventPayload} metadata to include outside of eventPayload.value
|
|
15
|
+
* @returns {MetricEvent} The constructed metric event
|
|
72
16
|
*/
|
|
73
|
-
private
|
|
74
|
-
|
|
17
|
+
private buildEvent({name, payload, metadata}: {name: string; payload: object; metadata: object}) {
|
|
18
|
+
return {
|
|
75
19
|
type: ['business'],
|
|
76
20
|
eventPayload: {
|
|
77
21
|
key: name,
|
|
78
|
-
appType: 'Web Client',
|
|
79
22
|
client_timestamp: new Date().toISOString(),
|
|
80
|
-
|
|
81
|
-
browserDetails: this.getBrowserDetails(),
|
|
23
|
+
...metadata,
|
|
82
24
|
value: payload,
|
|
83
25
|
},
|
|
84
26
|
};
|
|
85
|
-
|
|
86
|
-
return this.submitEvent({kind: 'buisness-events:default -> ', name, event});
|
|
87
27
|
}
|
|
88
28
|
|
|
89
29
|
/**
|
|
90
|
-
* Submit a
|
|
30
|
+
* Submit a business metric to our metrics endpoint.
|
|
91
31
|
* routes to the correct table with the correct schema payload by table
|
|
92
32
|
* https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
|
|
93
33
|
* @param {string} name of the metric, ignored if going to wbxapp_callend_metrics
|
|
94
34
|
* @param {EventPayload} payload user payload of the metric
|
|
95
35
|
* @param {Table} table optional - to submit the metric to and adapt the sent schema
|
|
36
|
+
* @param {EventPayload} metadata optional - to include outside of eventPayload.value
|
|
96
37
|
* @returns {Promise<any>}
|
|
97
38
|
*/
|
|
98
39
|
public submitBusinessEvent({
|
|
99
40
|
name,
|
|
100
41
|
payload,
|
|
101
42
|
table,
|
|
43
|
+
metadata,
|
|
102
44
|
}: {
|
|
103
45
|
name: string;
|
|
104
46
|
payload: EventPayload;
|
|
105
47
|
table?: Table;
|
|
48
|
+
metadata?: EventPayload;
|
|
106
49
|
}): Promise<void> {
|
|
107
50
|
if (!table) {
|
|
108
51
|
table = 'default';
|
|
109
52
|
}
|
|
53
|
+
if (!metadata) {
|
|
54
|
+
metadata = {};
|
|
55
|
+
}
|
|
56
|
+
if (!metadata.appType) {
|
|
57
|
+
metadata.appType = 'Web Client';
|
|
58
|
+
}
|
|
110
59
|
switch (table) {
|
|
111
|
-
case 'wbxapp_callend_metrics':
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
60
|
+
case 'wbxapp_callend_metrics': {
|
|
61
|
+
// https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table+wbxapp_callend_metrics
|
|
62
|
+
const callEndEvent = this.buildEvent({name: 'callEnd', payload, metadata});
|
|
63
|
+
|
|
64
|
+
return this.submitEvent({
|
|
65
|
+
kind: 'business-events:wbxapp_callend_metrics -> ',
|
|
66
|
+
name: 'wbxapp_callend_metrics',
|
|
67
|
+
event: callEndEvent,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
case 'business_metrics': {
|
|
72
|
+
// all event payload keys are converted into a hex string value
|
|
73
|
+
// unfortunately, the pinot team does not allow changes to the schema of business_metrics
|
|
74
|
+
// so we have to shim this layer specifically for this
|
|
75
|
+
// https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table%3A+business_metrics
|
|
76
|
+
const businessEvent = this.buildEvent({
|
|
77
|
+
name,
|
|
78
|
+
payload: {
|
|
79
|
+
...this.getContext(),
|
|
80
|
+
...this.getBrowserDetails(),
|
|
81
|
+
...payload,
|
|
82
|
+
},
|
|
83
|
+
metadata,
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
return this.submitEvent({
|
|
87
|
+
kind: 'business-events:business_metrics -> ',
|
|
88
|
+
name,
|
|
89
|
+
event: businessEvent,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
115
93
|
case 'business_ucf':
|
|
116
|
-
return this.submitDefaultEvent({name, payload});
|
|
117
94
|
case 'default':
|
|
118
|
-
default:
|
|
119
|
-
|
|
95
|
+
default: {
|
|
96
|
+
// all event payload keys are converted into a hex string value
|
|
97
|
+
// https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
|
|
98
|
+
const defaultEvent = this.buildEvent({
|
|
99
|
+
name,
|
|
100
|
+
payload,
|
|
101
|
+
metadata: {
|
|
102
|
+
context: this.getContext(),
|
|
103
|
+
browserDetails: this.getBrowserDetails(),
|
|
104
|
+
...metadata,
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
return this.submitEvent({kind: 'business-events:default -> ', name, event: defaultEvent});
|
|
109
|
+
}
|
|
120
110
|
}
|
|
121
111
|
}
|
|
122
112
|
}
|
package/src/generic-metrics.ts
CHANGED
|
@@ -37,7 +37,7 @@ export default abstract class GenericMetrics extends StatelessWebexPlugin {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
|
-
* Submit a
|
|
40
|
+
* Submit a business metric to our metrics endpoint.
|
|
41
41
|
* @param {string} kind of metric for logging
|
|
42
42
|
* @param {string} name of the metric
|
|
43
43
|
* @param {object} event
|
|
@@ -105,7 +105,7 @@ export default abstract class GenericMetrics extends StatelessWebexPlugin {
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
/**
|
|
108
|
-
* Returns true once we have the deviceId we need to submit behavioral/operational/
|
|
108
|
+
* Returns true once we have the deviceId we need to submit behavioral/operational/business events
|
|
109
109
|
* @returns {boolean}
|
|
110
110
|
*/
|
|
111
111
|
public isReadyToSubmitEvents(): boolean {
|
package/src/new-metrics.ts
CHANGED
|
@@ -141,7 +141,7 @@ class Metrics extends WebexPlugin {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
/**
|
|
144
|
-
* @returns true once we have the deviceId we need to submit
|
|
144
|
+
* @returns true once we have the deviceId we need to submit business events
|
|
145
145
|
*/
|
|
146
146
|
isReadyToSubmitBusinessEvents() {
|
|
147
147
|
this.lazyBuildBusinessMetrics();
|
|
@@ -200,17 +200,19 @@ class Metrics extends WebexPlugin {
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
/**
|
|
203
|
-
*
|
|
203
|
+
* Business event
|
|
204
204
|
* @param args
|
|
205
205
|
*/
|
|
206
206
|
submitBusinessEvent({
|
|
207
207
|
name,
|
|
208
208
|
payload,
|
|
209
209
|
table,
|
|
210
|
+
metadata,
|
|
210
211
|
}: {
|
|
211
212
|
name: string;
|
|
212
213
|
payload: EventPayload;
|
|
213
214
|
table?: Table;
|
|
215
|
+
metadata?: EventPayload;
|
|
214
216
|
}) {
|
|
215
217
|
if (!this.isReady) {
|
|
216
218
|
// @ts-ignore
|
|
@@ -223,7 +225,7 @@ class Metrics extends WebexPlugin {
|
|
|
223
225
|
|
|
224
226
|
this.lazyBuildBusinessMetrics();
|
|
225
227
|
|
|
226
|
-
return this.businessMetrics.submitBusinessEvent({name, payload, table});
|
|
228
|
+
return this.businessMetrics.submitBusinessEvent({name, payload, table, metadata});
|
|
227
229
|
}
|
|
228
230
|
|
|
229
231
|
/**
|
|
@@ -154,11 +154,12 @@ describe('internal-plugin-metrics', () => {
|
|
|
154
154
|
businessMetrics.clientMetricsBatcher.request = request;
|
|
155
155
|
|
|
156
156
|
assert.equal(requestCalls.length, 0)
|
|
157
|
-
businessMetrics.submitBusinessEvent({ name: "foobar", payload: {bar:"gee"}, table: 'business_metrics' })
|
|
157
|
+
businessMetrics.submitBusinessEvent({ name: "foobar", payload: {bar: "gee"}, table: 'business_metrics', metadata: {asdf: 'hjkl'} })
|
|
158
158
|
assert.equal(requestCalls.length, 1)
|
|
159
159
|
assert.deepEqual(requestCalls[0], {
|
|
160
160
|
eventPayload: {
|
|
161
161
|
key: 'foobar',
|
|
162
|
+
asdf: 'hjkl',
|
|
162
163
|
appType: 'Web Client',
|
|
163
164
|
client_timestamp: requestCalls[0].eventPayload.client_timestamp, // This is to bypass time check, which is checked below.
|
|
164
165
|
value: {
|
|
@@ -173,7 +174,6 @@ describe('internal-plugin-metrics', () => {
|
|
|
173
174
|
os: getOSNameInternal(),
|
|
174
175
|
app: {version: 'webex-version'},
|
|
175
176
|
device: {id: 'deviceId'},
|
|
176
|
-
locale: 'language',
|
|
177
177
|
}
|
|
178
178
|
},
|
|
179
179
|
type: ['business'],
|
|
@@ -93,12 +93,14 @@ describe('internal-plugin-metrics', () => {
|
|
|
93
93
|
name: 'foobar',
|
|
94
94
|
payload: {},
|
|
95
95
|
table: 'test',
|
|
96
|
+
metadata: { foo: 'bar' },
|
|
96
97
|
});
|
|
97
98
|
|
|
98
99
|
assert.calledWith(webex.internal.newMetrics.businessMetrics.submitBusinessEvent, {
|
|
99
100
|
name: 'foobar',
|
|
100
101
|
payload: {},
|
|
101
102
|
table: 'test',
|
|
103
|
+
metadata: { foo: 'bar' },
|
|
102
104
|
});
|
|
103
105
|
});
|
|
104
106
|
|