@webex/internal-plugin-support 3.7.0 → 3.8.0-next.10
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/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/support.js +23 -6
- package/dist/support.js.map +1 -1
- package/package.json +12 -12
- package/src/config.js +1 -0
- package/src/support.js +21 -4
- package/test/unit/spec/support.js +62 -1
package/dist/config.js
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_default","exports","default","device","preDiscoveryServices","atlasServiceUrl","process","env","ATLAS_SERVICE_URL","atlas","clientLogs","CLIENT_LOGS_SERVICE_URL","clientLogsServiceUrl","support","appType","appVersion","languageCode"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n device: {\n preDiscoveryServices: {\n atlasServiceUrl: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',\n atlas: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',\n clientLogs: process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1',\n clientLogsServiceUrl:\n process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1',\n },\n },\n\n support: {\n appType: '',\n appVersion: '',\n languageCode: '',\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,MAAM,EAAE;IACNC,oBAAoB,EAAE;MACpBC,eAAe,EAAEC,OAAO,CAACC,GAAG,CAACC,iBAAiB,IAAI,uCAAuC;MACzFC,KAAK,EAAEH,OAAO,CAACC,GAAG,CAACC,iBAAiB,IAAI,uCAAuC;MAC/EE,UAAU,EAAEJ,OAAO,CAACC,GAAG,CAACI,uBAAuB,IAAI,uCAAuC;MAC1FC,oBAAoB,EAClBN,OAAO,CAACC,GAAG,CAACI,uBAAuB,IAAI;IAC3C;EACF,CAAC;EAEDE,OAAO,EAAE;IACPC,OAAO,EAAE,EAAE;IACXC,UAAU,EAAE,EAAE;IACdC,YAAY,EAAE;
|
|
1
|
+
{"version":3,"names":["_default","exports","default","device","preDiscoveryServices","atlasServiceUrl","process","env","ATLAS_SERVICE_URL","atlas","clientLogs","CLIENT_LOGS_SERVICE_URL","clientLogsServiceUrl","support","appType","appVersion","languageCode","incrementalLogs"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n device: {\n preDiscoveryServices: {\n atlasServiceUrl: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',\n atlas: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',\n clientLogs: process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1',\n clientLogsServiceUrl:\n process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1',\n },\n },\n\n support: {\n appType: '',\n appVersion: '',\n languageCode: '',\n incrementalLogs: false,\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,MAAM,EAAE;IACNC,oBAAoB,EAAE;MACpBC,eAAe,EAAEC,OAAO,CAACC,GAAG,CAACC,iBAAiB,IAAI,uCAAuC;MACzFC,KAAK,EAAEH,OAAO,CAACC,GAAG,CAACC,iBAAiB,IAAI,uCAAuC;MAC/EE,UAAU,EAAEJ,OAAO,CAACC,GAAG,CAACI,uBAAuB,IAAI,uCAAuC;MAC1FC,oBAAoB,EAClBN,OAAO,CAACC,GAAG,CAACI,uBAAuB,IAAI;IAC3C;EACF,CAAC;EAEDE,OAAO,EAAE;IACPC,OAAO,EAAE,EAAE;IACXC,UAAU,EAAE,EAAE;IACdC,YAAY,EAAE,EAAE;IAChBC,eAAe,EAAE;EACnB;AACF,CAAC"}
|
package/dist/support.js
CHANGED
|
@@ -45,13 +45,30 @@ var Support = _webexCore.WebexPlugin.extend({
|
|
|
45
45
|
return res.body.url;
|
|
46
46
|
});
|
|
47
47
|
},
|
|
48
|
+
/**
|
|
49
|
+
* Sends logs to the backend
|
|
50
|
+
*
|
|
51
|
+
* @param {Object} metadata metadata about the logs
|
|
52
|
+
* @param {Array} logs logs to send, if undefined, SDK's logs will be sent
|
|
53
|
+
* @param {Object} options additional options
|
|
54
|
+
* @param {string} options.type 'full' or 'diff', if not specified then the config.incrementalLogs value is used to determine the type,
|
|
55
|
+
* this option only applies if logs parameter is undefined
|
|
56
|
+
* 'diff' means that only the logs since the last log upload will be sent
|
|
57
|
+
* 'full' means that all the logs from internal buffers will be sent
|
|
58
|
+
* @returns {Promise}
|
|
59
|
+
*/
|
|
48
60
|
submitLogs: function submitLogs(metadata, logs) {
|
|
49
61
|
var _this = this;
|
|
62
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
50
63
|
var metadataArray = this._constructFileMetadata(metadata);
|
|
64
|
+
var type = options.type;
|
|
51
65
|
|
|
52
66
|
// this is really testing that Ampersand is fully ready. once it's ready, these exist
|
|
53
67
|
if (!logs && this.webex.logger.sdkBuffer && this.webex.logger.clientBuffer && this.webex.logger.buffer) {
|
|
54
|
-
|
|
68
|
+
var diff = type !== undefined ? type === 'diff' : this.config.incrementalLogs;
|
|
69
|
+
logs = this.webex.logger.formatLogs({
|
|
70
|
+
diff: diff
|
|
71
|
+
});
|
|
55
72
|
}
|
|
56
73
|
var filename;
|
|
57
74
|
if (metadata.locusId && metadata.callStart) {
|
|
@@ -64,7 +81,7 @@ var Support = _webexCore.WebexPlugin.extend({
|
|
|
64
81
|
return _this.webex.credentials.getClientToken();
|
|
65
82
|
}).then( /*#__PURE__*/function () {
|
|
66
83
|
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(token) {
|
|
67
|
-
var headers, initalOpts, finalOpts,
|
|
84
|
+
var headers, initalOpts, finalOpts, uploadOptions;
|
|
68
85
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
69
86
|
while (1) switch (_context.prev = _context.next) {
|
|
70
87
|
case 0:
|
|
@@ -79,7 +96,7 @@ var Support = _webexCore.WebexPlugin.extend({
|
|
|
79
96
|
service: 'clientLogs',
|
|
80
97
|
resource: 'logs/meta'
|
|
81
98
|
};
|
|
82
|
-
|
|
99
|
+
uploadOptions = (0, _lodash.defaults)(initalOpts, {
|
|
83
100
|
file: logs,
|
|
84
101
|
shouldAttemptReauth: false,
|
|
85
102
|
headers: headers,
|
|
@@ -106,7 +123,7 @@ var Support = _webexCore.WebexPlugin.extend({
|
|
|
106
123
|
})
|
|
107
124
|
}
|
|
108
125
|
});
|
|
109
|
-
return _context.abrupt("return", _this.webex.upload(
|
|
126
|
+
return _context.abrupt("return", _this.webex.upload(uploadOptions));
|
|
110
127
|
case 5:
|
|
111
128
|
case "end":
|
|
112
129
|
return _context.stop();
|
|
@@ -129,7 +146,7 @@ var Support = _webexCore.WebexPlugin.extend({
|
|
|
129
146
|
* @returns {array}
|
|
130
147
|
*/
|
|
131
148
|
_constructFileMetadata: function _constructFileMetadata(metadata) {
|
|
132
|
-
var metadataArray = ['locusId', 'appVersion', 'callStart', 'feedbackId', 'correlationId', 'meetingId', 'surveySessionId', 'productAreaTag', 'issueTypeTag', 'locussessionid', 'autoupload'].map(function (key) {
|
|
149
|
+
var metadataArray = ['locusId', 'appVersion', 'callStart', 'feedbackId', 'correlationId', 'meetingId', 'surveySessionId', 'productAreaTag', 'issueTypeTag', 'issueDescTag', 'locussessionid', 'autoupload'].map(function (key) {
|
|
133
150
|
if (metadata[key]) {
|
|
134
151
|
return {
|
|
135
152
|
key: key,
|
|
@@ -166,7 +183,7 @@ var Support = _webexCore.WebexPlugin.extend({
|
|
|
166
183
|
}
|
|
167
184
|
return metadataArray;
|
|
168
185
|
},
|
|
169
|
-
version: "3.
|
|
186
|
+
version: "3.8.0-next.10"
|
|
170
187
|
});
|
|
171
188
|
var _default = exports.default = Support;
|
|
172
189
|
//# sourceMappingURL=support.js.map
|
package/dist/support.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_lodash","_uuid","_interopRequireDefault","Support","WebexPlugin","extend","namespace","getFeedbackUrl","options","request","method","api","resource","body","defaults","appVersion","config","appType","feedbackId","uuid","v4","languageCode","then","res","url","getSupportUrl","webex","qs","submitLogs","metadata","logs","_this","metadataArray","_constructFileMetadata","logger","sdkBuffer","clientBuffer","buffer","formatLogs","filename","locusId","callStart","concat","sessionId","userId","credentials","getUserToken","catch","getClientToken","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","token","headers","initalOpts","finalOpts","wrap","_callee$","_context","prev","next","authorization","toString","service","file","shouldAttemptReauth","phases","initialize","upload","$uri","session","tempURL","finalize","$body","logFilename","data","internal","device","abrupt","stop","_x","apply","arguments","map","key","value","filter","entry","Boolean","push","support","orgId","version","_default","exports"],"sources":["support.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {defaults} from 'lodash';\nimport uuid from 'uuid';\n\nconst Support = WebexPlugin.extend({\n namespace: 'Support',\n\n getFeedbackUrl(options) {\n options = options || {};\n\n return this.request({\n method: 'POST',\n api: 'conversation',\n resource: 'users/deskFeedbackUrl',\n body: defaults(options, {\n appVersion: this.config.appVersion,\n appType: this.config.appType,\n feedbackId: options.feedbackId || uuid.v4(),\n languageCode: this.config.languageCode,\n }),\n }).then((res) => res.body.url);\n },\n\n getSupportUrl() {\n return this.webex\n .request({\n method: 'GET',\n api: 'conversation',\n resource: 'users/deskSupportUrl',\n qs: {\n languageCode: this.config.languageCode,\n },\n })\n .then((res) => res.body.url);\n },\n\n submitLogs(metadata, logs) {\n const metadataArray = this._constructFileMetadata(metadata);\n\n // this is really testing that Ampersand is fully ready. once it's ready, these exist\n if (\n !logs &&\n this.webex.logger.sdkBuffer &&\n this.webex.logger.clientBuffer &&\n this.webex.logger.buffer\n ) {\n logs = this.webex.logger.formatLogs();\n }\n\n let filename;\n\n if (metadata.locusId && metadata.callStart) {\n filename = `${metadata.locusId}_${metadata.callStart}.txt`;\n } else {\n filename = `${this.webex.sessionId}.txt`;\n }\n\n let userId;\n\n return this.webex.credentials\n .getUserToken()\n .catch(() => this.webex.credentials.getClientToken())\n .then(async (token) => {\n const headers = {authorization: token.toString()};\n\n const initalOpts = {\n service: 'clientLogs',\n resource: 'logs/urls',\n };\n\n const finalOpts = {\n service: 'clientLogs',\n resource: 'logs/meta',\n };\n\n const options = defaults(initalOpts, {\n file: logs,\n shouldAttemptReauth: false,\n headers,\n phases: {\n initialize: {\n body: {\n file: filename,\n },\n },\n upload: {\n $uri: (session) => session.tempURL,\n },\n finalize: defaults(finalOpts, {\n $body: (session) => {\n userId = session.userId;\n\n return {\n filename: session.logFilename,\n data: metadataArray,\n userId: this.webex.internal.device.userId || session.userId,\n };\n },\n }),\n },\n });\n\n return this.webex.upload(options);\n })\n .then((body) => {\n if (userId && !body.userId) {\n body.userId = userId;\n }\n\n return body;\n });\n },\n\n /**\n * Constructs an array of key-value pairs for log upload.\n * @param {*} metadata\n * @returns {array}\n */\n _constructFileMetadata(metadata) {\n const metadataArray = [\n 'locusId',\n 'appVersion',\n 'callStart',\n 'feedbackId',\n 'correlationId',\n 'meetingId',\n 'surveySessionId',\n 'productAreaTag',\n 'issueTypeTag',\n 'locussessionid',\n 'autoupload',\n ]\n .map((key) => {\n if (metadata[key]) {\n return {\n key,\n value: metadata[key],\n };\n }\n\n return null;\n })\n .filter((entry) => Boolean(entry));\n\n if (this.webex.sessionId) {\n metadataArray.push({\n key: 'trackingId',\n value: this.webex.sessionId,\n });\n }\n\n if (this.webex.internal.support.config.appVersion) {\n metadataArray.push({\n key: 'appVersion',\n value: this.webex.internal.support.config.appVersion,\n });\n }\n\n if (this.webex.internal.device.userId) {\n metadataArray.push({\n key: 'userId',\n value: this.webex.internal.device.userId,\n });\n }\n\n if (this.webex.internal.device.orgId) {\n metadataArray.push({\n key: 'orgId',\n value: this.webex.internal.device.orgId,\n });\n }\n\n return metadataArray;\n },\n});\n\nexport default Support;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_lodash","_uuid","_interopRequireDefault","Support","WebexPlugin","extend","namespace","getFeedbackUrl","options","request","method","api","resource","body","defaults","appVersion","config","appType","feedbackId","uuid","v4","languageCode","then","res","url","getSupportUrl","webex","qs","submitLogs","metadata","logs","_this","arguments","length","undefined","metadataArray","_constructFileMetadata","type","logger","sdkBuffer","clientBuffer","buffer","diff","incrementalLogs","formatLogs","filename","locusId","callStart","concat","sessionId","userId","credentials","getUserToken","catch","getClientToken","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","token","headers","initalOpts","finalOpts","uploadOptions","wrap","_callee$","_context","prev","next","authorization","toString","service","file","shouldAttemptReauth","phases","initialize","upload","$uri","session","tempURL","finalize","$body","logFilename","data","internal","device","abrupt","stop","_x","apply","map","key","value","filter","entry","Boolean","push","support","orgId","version","_default","exports"],"sources":["support.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {defaults} from 'lodash';\nimport uuid from 'uuid';\n\nconst Support = WebexPlugin.extend({\n namespace: 'Support',\n\n getFeedbackUrl(options) {\n options = options || {};\n\n return this.request({\n method: 'POST',\n api: 'conversation',\n resource: 'users/deskFeedbackUrl',\n body: defaults(options, {\n appVersion: this.config.appVersion,\n appType: this.config.appType,\n feedbackId: options.feedbackId || uuid.v4(),\n languageCode: this.config.languageCode,\n }),\n }).then((res) => res.body.url);\n },\n\n getSupportUrl() {\n return this.webex\n .request({\n method: 'GET',\n api: 'conversation',\n resource: 'users/deskSupportUrl',\n qs: {\n languageCode: this.config.languageCode,\n },\n })\n .then((res) => res.body.url);\n },\n\n /**\n * Sends logs to the backend\n *\n * @param {Object} metadata metadata about the logs\n * @param {Array} logs logs to send, if undefined, SDK's logs will be sent\n * @param {Object} options additional options\n * @param {string} options.type 'full' or 'diff', if not specified then the config.incrementalLogs value is used to determine the type,\n * this option only applies if logs parameter is undefined\n * 'diff' means that only the logs since the last log upload will be sent\n * 'full' means that all the logs from internal buffers will be sent\n * @returns {Promise}\n */\n submitLogs(metadata, logs, options = {}) {\n const metadataArray = this._constructFileMetadata(metadata);\n\n const {type} = options;\n\n // this is really testing that Ampersand is fully ready. once it's ready, these exist\n if (\n !logs &&\n this.webex.logger.sdkBuffer &&\n this.webex.logger.clientBuffer &&\n this.webex.logger.buffer\n ) {\n const diff = type !== undefined ? type === 'diff' : this.config.incrementalLogs;\n\n logs = this.webex.logger.formatLogs({diff});\n }\n\n let filename;\n\n if (metadata.locusId && metadata.callStart) {\n filename = `${metadata.locusId}_${metadata.callStart}.txt`;\n } else {\n filename = `${this.webex.sessionId}.txt`;\n }\n\n let userId;\n\n return this.webex.credentials\n .getUserToken()\n .catch(() => this.webex.credentials.getClientToken())\n .then(async (token) => {\n const headers = {authorization: token.toString()};\n\n const initalOpts = {\n service: 'clientLogs',\n resource: 'logs/urls',\n };\n\n const finalOpts = {\n service: 'clientLogs',\n resource: 'logs/meta',\n };\n\n const uploadOptions = defaults(initalOpts, {\n file: logs,\n shouldAttemptReauth: false,\n headers,\n phases: {\n initialize: {\n body: {\n file: filename,\n },\n },\n upload: {\n $uri: (session) => session.tempURL,\n },\n finalize: defaults(finalOpts, {\n $body: (session) => {\n userId = session.userId;\n\n return {\n filename: session.logFilename,\n data: metadataArray,\n userId: this.webex.internal.device.userId || session.userId,\n };\n },\n }),\n },\n });\n\n return this.webex.upload(uploadOptions);\n })\n .then((body) => {\n if (userId && !body.userId) {\n body.userId = userId;\n }\n\n return body;\n });\n },\n\n /**\n * Constructs an array of key-value pairs for log upload.\n * @param {*} metadata\n * @returns {array}\n */\n _constructFileMetadata(metadata) {\n const metadataArray = [\n 'locusId',\n 'appVersion',\n 'callStart',\n 'feedbackId',\n 'correlationId',\n 'meetingId',\n 'surveySessionId',\n 'productAreaTag',\n 'issueTypeTag',\n 'issueDescTag',\n 'locussessionid',\n 'autoupload',\n ]\n .map((key) => {\n if (metadata[key]) {\n return {\n key,\n value: metadata[key],\n };\n }\n\n return null;\n })\n .filter((entry) => Boolean(entry));\n\n if (this.webex.sessionId) {\n metadataArray.push({\n key: 'trackingId',\n value: this.webex.sessionId,\n });\n }\n\n if (this.webex.internal.support.config.appVersion) {\n metadataArray.push({\n key: 'appVersion',\n value: this.webex.internal.support.config.appVersion,\n });\n }\n\n if (this.webex.internal.device.userId) {\n metadataArray.push({\n key: 'userId',\n value: this.webex.internal.device.userId,\n });\n }\n\n if (this.webex.internal.device.orgId) {\n metadataArray.push({\n key: 'orgId',\n value: this.webex.internal.device.orgId,\n });\n }\n\n return metadataArray;\n },\n});\n\nexport default Support;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
]
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@webex/internal-plugin-device": "3.
|
|
24
|
-
"@webex/internal-plugin-search": "3.
|
|
25
|
-
"@webex/test-helper-chai": "3.
|
|
26
|
-
"@webex/test-helper-file": "3.
|
|
27
|
-
"@webex/test-helper-mock-webex": "3.
|
|
28
|
-
"@webex/test-helper-test-users": "3.
|
|
29
|
-
"@webex/webex-core": "3.
|
|
23
|
+
"@webex/internal-plugin-device": "3.8.0-next.9",
|
|
24
|
+
"@webex/internal-plugin-search": "3.8.0-next.10",
|
|
25
|
+
"@webex/test-helper-chai": "3.8.0-next.9",
|
|
26
|
+
"@webex/test-helper-file": "3.8.0-next.9",
|
|
27
|
+
"@webex/test-helper-mock-webex": "3.8.0-next.9",
|
|
28
|
+
"@webex/test-helper-test-users": "3.8.0-next.9",
|
|
29
|
+
"@webex/webex-core": "3.8.0-next.9",
|
|
30
30
|
"lodash": "^4.17.21",
|
|
31
31
|
"uuid": "^3.3.2"
|
|
32
32
|
},
|
|
@@ -46,12 +46,12 @@
|
|
|
46
46
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
47
47
|
"@webex/jest-config-legacy": "0.0.0",
|
|
48
48
|
"@webex/legacy-tools": "0.0.0",
|
|
49
|
-
"@webex/test-helper-chai": "3.
|
|
50
|
-
"@webex/test-helper-mocha": "3.
|
|
51
|
-
"@webex/test-helper-mock-webex": "3.
|
|
52
|
-
"@webex/test-helper-test-users": "3.
|
|
49
|
+
"@webex/test-helper-chai": "3.8.0-next.9",
|
|
50
|
+
"@webex/test-helper-mocha": "3.8.0-next.9",
|
|
51
|
+
"@webex/test-helper-mock-webex": "3.8.0-next.9",
|
|
52
|
+
"@webex/test-helper-test-users": "3.8.0-next.9",
|
|
53
53
|
"eslint": "^8.24.0",
|
|
54
54
|
"prettier": "^2.7.1"
|
|
55
55
|
},
|
|
56
|
-
"version": "3.
|
|
56
|
+
"version": "3.8.0-next.10"
|
|
57
57
|
}
|
package/src/config.js
CHANGED
package/src/support.js
CHANGED
|
@@ -38,9 +38,23 @@ const Support = WebexPlugin.extend({
|
|
|
38
38
|
.then((res) => res.body.url);
|
|
39
39
|
},
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Sends logs to the backend
|
|
43
|
+
*
|
|
44
|
+
* @param {Object} metadata metadata about the logs
|
|
45
|
+
* @param {Array} logs logs to send, if undefined, SDK's logs will be sent
|
|
46
|
+
* @param {Object} options additional options
|
|
47
|
+
* @param {string} options.type 'full' or 'diff', if not specified then the config.incrementalLogs value is used to determine the type,
|
|
48
|
+
* this option only applies if logs parameter is undefined
|
|
49
|
+
* 'diff' means that only the logs since the last log upload will be sent
|
|
50
|
+
* 'full' means that all the logs from internal buffers will be sent
|
|
51
|
+
* @returns {Promise}
|
|
52
|
+
*/
|
|
53
|
+
submitLogs(metadata, logs, options = {}) {
|
|
42
54
|
const metadataArray = this._constructFileMetadata(metadata);
|
|
43
55
|
|
|
56
|
+
const {type} = options;
|
|
57
|
+
|
|
44
58
|
// this is really testing that Ampersand is fully ready. once it's ready, these exist
|
|
45
59
|
if (
|
|
46
60
|
!logs &&
|
|
@@ -48,7 +62,9 @@ const Support = WebexPlugin.extend({
|
|
|
48
62
|
this.webex.logger.clientBuffer &&
|
|
49
63
|
this.webex.logger.buffer
|
|
50
64
|
) {
|
|
51
|
-
|
|
65
|
+
const diff = type !== undefined ? type === 'diff' : this.config.incrementalLogs;
|
|
66
|
+
|
|
67
|
+
logs = this.webex.logger.formatLogs({diff});
|
|
52
68
|
}
|
|
53
69
|
|
|
54
70
|
let filename;
|
|
@@ -77,7 +93,7 @@ const Support = WebexPlugin.extend({
|
|
|
77
93
|
resource: 'logs/meta',
|
|
78
94
|
};
|
|
79
95
|
|
|
80
|
-
const
|
|
96
|
+
const uploadOptions = defaults(initalOpts, {
|
|
81
97
|
file: logs,
|
|
82
98
|
shouldAttemptReauth: false,
|
|
83
99
|
headers,
|
|
@@ -104,7 +120,7 @@ const Support = WebexPlugin.extend({
|
|
|
104
120
|
},
|
|
105
121
|
});
|
|
106
122
|
|
|
107
|
-
return this.webex.upload(
|
|
123
|
+
return this.webex.upload(uploadOptions);
|
|
108
124
|
})
|
|
109
125
|
.then((body) => {
|
|
110
126
|
if (userId && !body.userId) {
|
|
@@ -131,6 +147,7 @@ const Support = WebexPlugin.extend({
|
|
|
131
147
|
'surveySessionId',
|
|
132
148
|
'productAreaTag',
|
|
133
149
|
'issueTypeTag',
|
|
150
|
+
'issueDescTag',
|
|
134
151
|
'locussessionid',
|
|
135
152
|
'autoupload',
|
|
136
153
|
]
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
/* eslint-disable no-underscore-dangle */
|
|
6
|
-
|
|
6
|
+
import sinon from 'sinon';
|
|
7
7
|
import Support from '@webex/internal-plugin-support';
|
|
8
8
|
import {assert} from '@webex/test-helper-chai';
|
|
9
9
|
import MockWebex from '@webex/test-helper-mock-webex';
|
|
@@ -151,12 +151,73 @@ describe('plugin-support', () => {
|
|
|
151
151
|
|
|
152
152
|
assert.equal(found?.value, autoupload);
|
|
153
153
|
});
|
|
154
|
+
|
|
155
|
+
it('sends issuedesctag if specified in metadata', () => {
|
|
156
|
+
const issueDescTag = 'issueDescTag';
|
|
157
|
+
const result = webex.internal.support._constructFileMetadata({issueDescTag});
|
|
158
|
+
const found = result.find((attr) => attr.key === 'issueDescTag');
|
|
159
|
+
|
|
160
|
+
assert.equal(found?.value, issueDescTag);
|
|
161
|
+
});
|
|
154
162
|
});
|
|
155
163
|
|
|
156
164
|
describe('#submitLogs()', () => {
|
|
165
|
+
beforeEach(() => {
|
|
166
|
+
webex.logger = {
|
|
167
|
+
formatLogs: sinon.stub().returns(['fake logs']),
|
|
168
|
+
sdkBuffer: [],
|
|
169
|
+
clientBuffer: [],
|
|
170
|
+
buffer: [],
|
|
171
|
+
};
|
|
172
|
+
webex.upload = sinon.stub().returns(Promise.resolve({}));
|
|
173
|
+
});
|
|
174
|
+
|
|
157
175
|
it('calls getUserToken', () => {
|
|
158
176
|
webex.internal.support.submitLogs({});
|
|
159
177
|
assert.calledOnce(webex.credentials.getUserToken);
|
|
160
178
|
});
|
|
179
|
+
|
|
180
|
+
[
|
|
181
|
+
{type: undefined, incrementalLogsConfig: true, expectedDiff: true},
|
|
182
|
+
{type: undefined, incrementalLogsConfig: false, expectedDiff: false},
|
|
183
|
+
|
|
184
|
+
{type: 'full', incrementalLogsConfig: true, expectedDiff: false}, // the sendFullLog param overrides the config
|
|
185
|
+
{type: 'full', incrementalLogsConfig: false, expectedDiff: false},
|
|
186
|
+
|
|
187
|
+
{type: 'diff', incrementalLogsConfig: true, expectedDiff: true},
|
|
188
|
+
{type: 'diff', incrementalLogsConfig: false, expectedDiff: true}, // the sendFullLog param overrides the config
|
|
189
|
+
].forEach(({type, incrementalLogsConfig, expectedDiff}) => {
|
|
190
|
+
it(`submits ${
|
|
191
|
+
expectedDiff ? 'incremental' : 'full'
|
|
192
|
+
} logs if called with options.type=${type} and config.incrementalLogs=${incrementalLogsConfig}`, async () => {
|
|
193
|
+
webex.internal.support.config.incrementalLogs = incrementalLogsConfig;
|
|
194
|
+
if (type !== undefined) {
|
|
195
|
+
await webex.internal.support.submitLogs({}, undefined, {type});
|
|
196
|
+
} else {
|
|
197
|
+
await webex.internal.support.submitLogs({});
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
assert.calledOnceWithExactly(webex.logger.formatLogs, {diff: expectedDiff});
|
|
201
|
+
assert.calledOnce(webex.upload);
|
|
202
|
+
|
|
203
|
+
const uploadArgs = webex.upload.args[0];
|
|
204
|
+
|
|
205
|
+
assert.deepEqual(uploadArgs[0].file, ['fake logs']);
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
it('submits provided logs', async () => {
|
|
209
|
+
webex.internal.support.config.incrementalLogs = incrementalLogsConfig;
|
|
210
|
+
const testLogs = ['test logs'];
|
|
211
|
+
|
|
212
|
+
await webex.internal.support.submitLogs({}, testLogs);
|
|
213
|
+
|
|
214
|
+
assert.notCalled(webex.logger.formatLogs);
|
|
215
|
+
assert.calledOnce(webex.upload);
|
|
216
|
+
|
|
217
|
+
const uploadArgs = webex.upload.args[0];
|
|
218
|
+
|
|
219
|
+
assert.deepEqual(uploadArgs[0].file, ['test logs']);
|
|
220
|
+
});
|
|
221
|
+
});
|
|
161
222
|
});
|
|
162
223
|
});
|