diff --git a/superset/assets/spec/javascripts/chart/chartActions_spec.js b/superset/assets/spec/javascripts/chart/chartActions_spec.js index 21fbf90837df4..4e2d63420f794 100644 --- a/superset/assets/spec/javascripts/chart/chartActions_spec.js +++ b/superset/assets/spec/javascripts/chart/chartActions_spec.js @@ -79,6 +79,7 @@ describe('chart actions', () => { expect(dispatch.callCount).toBe(4); expect(fetchMock.calls(MOCK_URL)).toHaveLength(1); expect(dispatch.args[3][0].type).toBe(actions.CHART_UPDATE_SUCCEEDED); + expect(loggerStub.callCount).toBe(1); return Promise.resolve(); }); @@ -95,6 +96,8 @@ describe('chart actions', () => { // chart update, trigger query, update form data, fail expect(dispatch.callCount).toBe(4); expect(dispatch.args[3][0].type).toBe(actions.CHART_UPDATE_TIMEOUT); + expect(loggerStub.callCount).toBe(1); + expect(loggerStub.args[0][1].error_details).toBe('timeout'); setupDefaultFetchMock(); return Promise.resolve(); @@ -113,6 +116,9 @@ describe('chart actions', () => { const updateFailedAction = dispatch.args[3][0]; expect(updateFailedAction.type).toBe(actions.CHART_UPDATE_FAILED); expect(updateFailedAction.queryResponse.error).toBe('misc error'); + + expect(loggerStub.callCount).toBe(1); + expect(loggerStub.args[0][1].error_details).toBe('misc error'); setupDefaultFetchMock(); return Promise.resolve(); diff --git a/superset/assets/src/chart/chartAction.js b/superset/assets/src/chart/chartAction.js index fb0f3da3b419b..38e4ad2fb8f8e 100644 --- a/superset/assets/src/chart/chartAction.js +++ b/superset/assets/src/chart/chartAction.js @@ -164,22 +164,28 @@ export function runQuery(formData, force = false, timeout = 60, key) { return dispatch(chartUpdateSucceeded(json, key)); }) .catch((response) => { - Logger.append(LOG_ACTIONS_LOAD_CHART, { - slice_id: key, - has_err: true, - datasource: formData.datasource, - start_offset: logStart, - duration: Logger.getTimestamp() - logStart, - }); + const appendErrorLog = (errorDetails) => { + Logger.append(LOG_ACTIONS_LOAD_CHART, { + slice_id: key, + has_err: true, + error_details: errorDetails, + datasource: formData.datasource, + start_offset: logStart, + duration: Logger.getTimestamp() - logStart, + }); + }; if (response.statusText === 'timeout') { + appendErrorLog('timeout'); return dispatch(chartUpdateTimeout(response.statusText, timeout, key)); } else if (response.name === 'AbortError') { + appendErrorLog('abort'); return dispatch(chartUpdateStopped(key)); } - return getClientErrorObject(response).then(parsedResponse => - dispatch(chartUpdateFailed(parsedResponse, key)), - ); + return getClientErrorObject(response).then((parsedResponse) => { + appendErrorLog(parsedResponse.error); + return dispatch(chartUpdateFailed(parsedResponse, key)); + }); }); const annotationLayers = formData.annotation_layers || [];