@webex/internal-plugin-metrics 3.0.0-beta.157 → 3.0.0-beta.159
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/metrics.js +18 -8
- package/dist/metrics.js.map +1 -1
- package/package.json +8 -8
- package/src/metrics.js +17 -5
- package/test/unit/spec/metrics.js +64 -0
package/dist/metrics.js
CHANGED
|
@@ -58,15 +58,12 @@ var Metrics = _webexCore.WebexPlugin.extend({
|
|
|
58
58
|
}, value));
|
|
59
59
|
},
|
|
60
60
|
/**
|
|
61
|
-
*
|
|
61
|
+
* Returns the payload for submitting client metrics.
|
|
62
62
|
* @param {string} eventName
|
|
63
|
-
* @param {
|
|
64
|
-
* @
|
|
65
|
-
* @returns {Object} HttpResponse object
|
|
63
|
+
* @param {any} props
|
|
64
|
+
* @returns {any} - the payload
|
|
66
65
|
*/
|
|
67
|
-
|
|
68
|
-
var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
69
|
-
var preLoginId = arguments.length > 2 ? arguments[2] : undefined;
|
|
66
|
+
getClientMetricsPayload: function getClientMetricsPayload(eventName, props) {
|
|
70
67
|
if (!eventName) {
|
|
71
68
|
throw Error('Missing behavioral metric name. Please provide one');
|
|
72
69
|
}
|
|
@@ -107,6 +104,19 @@ var Metrics = _webexCore.WebexPlugin.extend({
|
|
|
107
104
|
// Mocking the time in tests when running in node
|
|
108
105
|
// is impossible so unable to use Date.now()
|
|
109
106
|
payload.timestamp = new Date().valueOf();
|
|
107
|
+
return payload;
|
|
108
|
+
},
|
|
109
|
+
/**
|
|
110
|
+
* This corresponds to #sendSemiStructured() in the deprecated metrics handler
|
|
111
|
+
* @param {string} eventName
|
|
112
|
+
* @param {Object} props
|
|
113
|
+
* @param {string} preLoginId
|
|
114
|
+
* @returns {Object} HttpResponse object
|
|
115
|
+
*/
|
|
116
|
+
submitClientMetrics: function submitClientMetrics(eventName) {
|
|
117
|
+
var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
118
|
+
var preLoginId = arguments.length > 2 ? arguments[2] : undefined;
|
|
119
|
+
var payload = this.getClientMetricsPayload(eventName, props);
|
|
110
120
|
if (preLoginId) {
|
|
111
121
|
var _payload = {
|
|
112
122
|
metrics: [payload]
|
|
@@ -160,7 +170,7 @@ var Metrics = _webexCore.WebexPlugin.extend({
|
|
|
160
170
|
};
|
|
161
171
|
return this.callDiagnosticEventsBatcher.request(event);
|
|
162
172
|
},
|
|
163
|
-
version: "3.0.0-beta.
|
|
173
|
+
version: "3.0.0-beta.159"
|
|
164
174
|
});
|
|
165
175
|
var _default = Metrics;
|
|
166
176
|
exports.default = _default;
|
package/dist/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BrowserDetection","getOSName","getOSVersion","getBrowserName","getBrowserVersion","getOSNameInternal","OSMap","OS_NAME","OTHERS","getSparkUserAgent","webex","config","appName","appVersion","appPlatform","sparkUserAgent","CLIENT_NAME","Metrics","WebexPlugin","extend","children","batcher","Batcher","clientMetricsBatcher","ClientMetricsBatcher","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","namespace","submit","key","value","request","
|
|
1
|
+
{"version":3,"names":["BrowserDetection","getOSName","getOSVersion","getBrowserName","getBrowserVersion","getOSNameInternal","OSMap","OS_NAME","OTHERS","getSparkUserAgent","webex","config","appName","appVersion","appPlatform","sparkUserAgent","CLIENT_NAME","Metrics","WebexPlugin","extend","children","batcher","Batcher","clientMetricsBatcher","ClientMetricsBatcher","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","namespace","submit","key","value","request","getClientMetricsPayload","eventName","props","Error","payload","metricName","tags","browser","os","domain","window","location","hostname","fields","browser_version","os_version","sdk_version","version","platform","spark_user_agent","client_id","credentials","type","metrics","context","app","locale","name","eventPayload","timestamp","Date","valueOf","submitClientMetrics","preLoginId","_payload","postPreLoginMetric","aliasUser","method","api","resource","headers","body","qs","alias","getClientToken","then","token","authorization","toString","submitCallDiagnosticEvents","event"],"sources":["metrics.js"],"sourcesContent":["/* eslint-disable default-param-last */\n\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {BrowserDetection} from '@webex/common';\nimport {OS_NAME, OSMap, CLIENT_NAME} from './config';\n\nimport Batcher from './batcher';\nimport ClientMetricsBatcher from './client-metrics-batcher';\nimport CallDiagnosticEventsBatcher from './call-diagnostic-events-batcher';\n\nconst {getOSName, getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\nexport function getOSNameInternal() {\n return OSMap[getOSName()] ?? OS_NAME.OTHERS;\n}\n\nfunction getSparkUserAgent(webex) {\n const {appName, appVersion, appPlatform} = webex?.config ?? {};\n\n let sparkUserAgent = CLIENT_NAME;\n\n if (appName) {\n sparkUserAgent += ` ${appName}/${appVersion ?? '0.0'}`;\n }\n\n if (appPlatform) {\n sparkUserAgent += ` ${appPlatform}`;\n }\n\n return sparkUserAgent;\n}\n\nconst Metrics = WebexPlugin.extend({\n children: {\n batcher: Batcher,\n clientMetricsBatcher: ClientMetricsBatcher,\n callDiagnosticEventsBatcher: CallDiagnosticEventsBatcher,\n },\n\n namespace: 'Metrics',\n\n submit(key, value) {\n return this.batcher.request({key, ...value});\n },\n\n /**\n * Returns the payload for submitting client metrics.\n * @param {string} eventName\n * @param {any} props\n * @returns {any} - the payload\n */\n getClientMetricsPayload(eventName, props) {\n if (!eventName) {\n throw Error('Missing behavioral metric name. Please provide one');\n }\n const payload = {metricName: eventName};\n\n payload.tags = {\n ...props.tags,\n browser: getBrowserName(),\n os: getOSNameInternal(),\n\n // Node does not like this so we need to check if it exists or not\n // eslint-disable-next-line no-undef\n domain:\n typeof window !== 'undefined' ? window.location.hostname || 'non-browser' : 'non-browser', // Check what else we could measure\n };\n\n payload.fields = {\n ...props.fields,\n browser_version: getBrowserVersion(),\n os_version: getOSVersion(),\n sdk_version: this.webex.version,\n platform: 'Web',\n spark_user_agent: getSparkUserAgent(this.webex),\n client_id: this.webex.credentials.config.client_id,\n };\n\n payload.type = props.type || this.webex.config.metrics.type;\n\n payload.context = {\n ...props.context,\n app: {\n version: this.webex.version,\n },\n locale: 'en-US',\n os: {\n name: getOSNameInternal(),\n version: getOSVersion(),\n },\n };\n\n if (props.eventPayload) {\n payload.eventPayload = props.eventPayload;\n }\n\n // Mocking the time in tests when running in node\n // is impossible so unable to use Date.now()\n payload.timestamp = new Date().valueOf();\n\n return payload;\n },\n\n /**\n * This corresponds to #sendSemiStructured() in the deprecated metrics handler\n * @param {string} eventName\n * @param {Object} props\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n submitClientMetrics(eventName, props = {}, preLoginId) {\n const payload = this.getClientMetricsPayload(eventName, props);\n\n if (preLoginId) {\n const _payload = {\n metrics: [payload],\n };\n\n // Do not batch these because pre-login events occur during onboarding, so we will be partially blind\n // to users' progress through the reg flow if we wait to persist pre-login metrics for people who drop off because\n // their metrics will not post from a queue flush in time\n return this.postPreLoginMetric(_payload, preLoginId);\n }\n\n return this.clientMetricsBatcher.request(payload);\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 aliasUser(preLoginId) {\n return this.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 },\n\n postPreLoginMetric(payload, preLoginId) {\n return this.webex.credentials.getClientToken().then((token) =>\n this.request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics-prelogin',\n headers: {\n authorization: token.toString(),\n 'x-prelogin-userid': preLoginId,\n },\n body: payload,\n })\n );\n },\n\n submitCallDiagnosticEvents(payload) {\n const event = {\n type: 'diagnostic-event',\n eventPayload: payload,\n };\n\n return this.callDiagnosticEventsBatcher.request(event);\n },\n});\n\nexport default Metrics;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-metrics",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.159",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,12 +24,12 @@
|
|
|
24
24
|
"sinon": "^9.2.4"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@webex/common": "3.0.0-beta.
|
|
28
|
-
"@webex/common-timers": "3.0.0-beta.
|
|
29
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
30
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
31
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
32
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
33
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
27
|
+
"@webex/common": "3.0.0-beta.159",
|
|
28
|
+
"@webex/common-timers": "3.0.0-beta.159",
|
|
29
|
+
"@webex/internal-plugin-device": "3.0.0-beta.159",
|
|
30
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.159",
|
|
31
|
+
"@webex/test-helper-chai": "3.0.0-beta.159",
|
|
32
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.159",
|
|
33
|
+
"@webex/webex-core": "3.0.0-beta.159"
|
|
34
34
|
}
|
|
35
35
|
}
|
package/src/metrics.js
CHANGED
|
@@ -48,13 +48,12 @@ const Metrics = WebexPlugin.extend({
|
|
|
48
48
|
},
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
|
-
*
|
|
51
|
+
* Returns the payload for submitting client metrics.
|
|
52
52
|
* @param {string} eventName
|
|
53
|
-
* @param {
|
|
54
|
-
* @
|
|
55
|
-
* @returns {Object} HttpResponse object
|
|
53
|
+
* @param {any} props
|
|
54
|
+
* @returns {any} - the payload
|
|
56
55
|
*/
|
|
57
|
-
|
|
56
|
+
getClientMetricsPayload(eventName, props) {
|
|
58
57
|
if (!eventName) {
|
|
59
58
|
throw Error('Missing behavioral metric name. Please provide one');
|
|
60
59
|
}
|
|
@@ -103,6 +102,19 @@ const Metrics = WebexPlugin.extend({
|
|
|
103
102
|
// is impossible so unable to use Date.now()
|
|
104
103
|
payload.timestamp = new Date().valueOf();
|
|
105
104
|
|
|
105
|
+
return payload;
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* This corresponds to #sendSemiStructured() in the deprecated metrics handler
|
|
110
|
+
* @param {string} eventName
|
|
111
|
+
* @param {Object} props
|
|
112
|
+
* @param {string} preLoginId
|
|
113
|
+
* @returns {Object} HttpResponse object
|
|
114
|
+
*/
|
|
115
|
+
submitClientMetrics(eventName, props = {}, preLoginId) {
|
|
116
|
+
const payload = this.getClientMetricsPayload(eventName, props);
|
|
117
|
+
|
|
106
118
|
if (preLoginId) {
|
|
107
119
|
const _payload = {
|
|
108
120
|
metrics: [payload],
|
|
@@ -8,6 +8,9 @@ import {Token, Credentials} from '@webex/webex-core';
|
|
|
8
8
|
import FakeTimers from '@sinonjs/fake-timers';
|
|
9
9
|
import sinon from 'sinon';
|
|
10
10
|
import Metrics, {config} from '@webex/internal-plugin-metrics';
|
|
11
|
+
import {BrowserDetection} from '@webex/common';
|
|
12
|
+
|
|
13
|
+
const {getOSVersion} = BrowserDetection();
|
|
11
14
|
|
|
12
15
|
function promiseTick(count) {
|
|
13
16
|
let promise = Promise.resolve();
|
|
@@ -131,6 +134,67 @@ describe('plugin-metrics', () => {
|
|
|
131
134
|
});
|
|
132
135
|
});
|
|
133
136
|
|
|
137
|
+
describe.only('#getClientMetricsPayload()', () => {
|
|
138
|
+
it('returns the expected payload', () => {
|
|
139
|
+
webex.credentials.supertoken = new Token(
|
|
140
|
+
{
|
|
141
|
+
access_token: 'a_b_orgid',
|
|
142
|
+
},
|
|
143
|
+
{parent: webex}
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
const testPayload = {
|
|
147
|
+
tags: {success: true},
|
|
148
|
+
fields: {perceivedDurationInMillis: 314},
|
|
149
|
+
context: {},
|
|
150
|
+
eventPayload: {value: 'splunk business metric payload'},
|
|
151
|
+
};
|
|
152
|
+
const date = clock.now;
|
|
153
|
+
|
|
154
|
+
const result = metrics.getClientMetricsPayload('test', testPayload);
|
|
155
|
+
|
|
156
|
+
assert.deepEqual(result, {
|
|
157
|
+
context: {
|
|
158
|
+
app: {
|
|
159
|
+
version: undefined,
|
|
160
|
+
},
|
|
161
|
+
locale: 'en-US',
|
|
162
|
+
os: {
|
|
163
|
+
name: 'other',
|
|
164
|
+
version: getOSVersion(),
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
eventPayload: {
|
|
168
|
+
value: 'splunk business metric payload',
|
|
169
|
+
},
|
|
170
|
+
fields: {
|
|
171
|
+
browser_version: '',
|
|
172
|
+
client_id: 'fake',
|
|
173
|
+
os_version: getOSVersion(),
|
|
174
|
+
perceivedDurationInMillis: 314,
|
|
175
|
+
platform: 'Web',
|
|
176
|
+
sdk_version: undefined,
|
|
177
|
+
spark_user_agent: 'webex-js-sdk appName/appVersion appPlatform',
|
|
178
|
+
},
|
|
179
|
+
metricName: 'test',
|
|
180
|
+
tags: {
|
|
181
|
+
browser: '',
|
|
182
|
+
domain: 'non-browser',
|
|
183
|
+
os: 'other',
|
|
184
|
+
success: true,
|
|
185
|
+
},
|
|
186
|
+
timestamp: 0,
|
|
187
|
+
type: ['operational'],
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it('throws when no event name is specified', () => {
|
|
192
|
+
assert.throws(() => {
|
|
193
|
+
metrics.getClientMetricsPayload();
|
|
194
|
+
}, 'Missing behavioral metric name. Please provide one');
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
|
|
134
198
|
describe('#submitClientMetrics()', () => {
|
|
135
199
|
describe('before login', () => {
|
|
136
200
|
it('posts pre-login metric', () => {
|