Skip to content

Commit

Permalink
provide finer detail on action execution errors
Browse files Browse the repository at this point in the history
resolves elastic#52103
  • Loading branch information
pmuellr committed Dec 3, 2019
1 parent 0ac7d53 commit 03f5a18
Show file tree
Hide file tree
Showing 14 changed files with 92 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ const actionTypeRegistryParams = {
beforeEach(() => jest.resetAllMocks());

const executor: ExecutorType = async options => {
return { status: 'ok' };
return { status: 'ok', actionId: options.actionId };
};

describe('register()', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ const actionTypeRegistryParams = {
let actionsClient: ActionsClient;
let actionTypeRegistry: ActionTypeRegistry;
const executor: ExecutorType = async options => {
return { status: 'ok' };
return { status: 'ok', actionId: options.actionId };
};

beforeEach(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,19 +156,17 @@ async function executor(
result = await sendEmail(logger, sendEmailOptions);
} catch (err) {
const message = i18n.translate('xpack.actions.builtin.email.errorSendingErrorMessage', {
defaultMessage: 'error in action "{actionId}" sending email: {errorMessage}',
values: {
actionId,
errorMessage: err.message,
},
defaultMessage: 'error sending email',
});
return {
status: 'error',
actionId,
message,
serviceMessage: err.message,
};
}

return { status: 'ok', data: result };
return { status: 'ok', data: result, actionId };
}

// utilities
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,11 @@ async function executor(

if (config.index == null && params.index == null) {
const message = i18n.translate('xpack.actions.builtin.esIndex.indexParamRequiredErrorMessage', {
defaultMessage: 'index param needs to be set because not set in config for action {actionId}',
values: {
actionId,
},
defaultMessage: 'index param needs to be set because not set in config for action',
});
return {
status: 'error',
actionId,
message,
};
}
Expand Down Expand Up @@ -101,17 +99,15 @@ async function executor(
result = await services.callCluster('bulk', bulkParams);
} catch (err) {
const message = i18n.translate('xpack.actions.builtin.esIndex.errorIndexingErrorMessage', {
defaultMessage: 'error in action "{actionId}" indexing data: {errorMessage}',
values: {
actionId,
errorMessage: err.message,
},
defaultMessage: 'error indexing documents',
});
return {
status: 'error',
actionId,
message,
serviceMessage: err.message,
};
}

return { status: 'ok', data: result };
return { status: 'ok', data: result, actionId };
}
Original file line number Diff line number Diff line change
Expand Up @@ -123,16 +123,14 @@ async function executor(
response = await postPagerduty({ apiUrl, data, headers, services });
} catch (err) {
const message = i18n.translate('xpack.actions.builtin.pagerduty.postingErrorMessage', {
defaultMessage: 'error in pagerduty action "{actionId}" posting event: {errorMessage}',
values: {
actionId,
errorMessage: err.message,
},
defaultMessage: 'error posting pagerduty event',
});
logger.warn(`error thrown posting pagerduty event: ${err.message}`);
return {
status: 'error',
actionId,
message,
serviceMessage: err.message,
};
}

Expand All @@ -141,38 +139,37 @@ async function executor(
if (response.status === 202) {
return {
status: 'ok',
actionId,
data: response.data,
};
}

if (response.status === 429 || response.status >= 500) {
const message = i18n.translate('xpack.actions.builtin.pagerduty.postingRetryErrorMessage', {
defaultMessage:
'error in pagerduty action "{actionId}" posting event: status {status}, retry later',
defaultMessage: 'error posting pagerduty event: http status {status}, retry later',
values: {
actionId,
status: response.status,
},
});

return {
status: 'error',
actionId,
message,
retry: true,
};
}

const message = i18n.translate('xpack.actions.builtin.pagerduty.postingUnexpectedErrorMessage', {
defaultMessage:
'error in pagerduty action "{actionId}" posting event: unexpected status {status}',
defaultMessage: 'error posting pagerduty event: unexpected status {status}',
values: {
actionId,
status: response.status,
},
});

return {
status: 'error',
actionId,
message,
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,15 @@ async function executor(
logger[params.level](params.message);
} catch (err) {
const message = i18n.translate('xpack.actions.builtin.serverLog.errorLoggingErrorMessage', {
defaultMessage: 'error in action "{actionId}" logging message: {errorMessage}',
values: {
actionId,
errorMessage: err.message,
},
defaultMessage: 'error logging message',
});
return {
status: 'error',
message,
serviceMessage: err.message,
actionId,
};
}

return { status: 'ok' };
return { status: 'ok', actionId };
}
62 changes: 34 additions & 28 deletions x-pack/legacy/plugins/actions/server/builtin_action_types/slack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ async function slackExecutor(
result = await webhook.send(message);
} catch (err) {
if (err.original == null || err.original.response == null) {
return errorResult(actionId, err.message);
return serviceErrorResult(actionId, err.message);
}

const { status, statusText, headers } = err.original.response;
Expand All @@ -88,69 +88,76 @@ async function slackExecutor(
);
}

return errorResult(actionId, `${err.message} - ${statusText}`);
}

if (result == null) {
const errMessage = i18n.translate(
'xpack.actions.builtin.slack.unexpectedNullResponseErrorMessage',
{
defaultMessage: 'unexpected null response from slack',
defaultMessage: 'unexpected http response from slack {httpStatus} {httpStatusText}',
values: {
httpStatus: status,
httpStatusText: statusText,
},
}
);
return errorResult(actionId, errMessage);
}

if (result.text !== 'ok') {
if (result == null) {
const errMessage = i18n.translate(
'xpack.actions.builtin.slack.unexpectedTextResponseErrorMessage',
'xpack.actions.builtin.slack.unexpectedNullResponseErrorMessage',
{
defaultMessage: 'unexpected text response from slack',
defaultMessage: 'unexpected null response from slack',
}
);
return errorResult(actionId, errMessage);
}

return successResult(result);
if (result.text !== 'ok') {
return serviceErrorResult(actionId, result.text);
}

return successResult(actionId, result);
}

function successResult(data: any): ActionTypeExecutorResult {
return { status: 'ok', data };
function successResult(actionId: string, data: any): ActionTypeExecutorResult {
return { status: 'ok', data, actionId };
}

function errorResult(id: string, message: string): ActionTypeExecutorResult {
function errorResult(actionId: string, message: string): ActionTypeExecutorResult {
return {
status: 'error',
message,
actionId,
};
}
function serviceErrorResult(actionId: string, serviceMessage: string): ActionTypeExecutorResult {
const errMessage = i18n.translate('xpack.actions.builtin.slack.errorPostingErrorMessage', {
defaultMessage: 'an error occurred in action "{id}" posting a slack message: {message}',
values: {
id,
message,
},
defaultMessage: 'error posting slack message',
});
return {
status: 'error',
message: errMessage,
actionId,
serviceMessage,
};
}

function retryResult(id: string, message: string): ActionTypeExecutorResult {
function retryResult(actionId: string, message: string): ActionTypeExecutorResult {
const errMessage = i18n.translate(
'xpack.actions.builtin.slack.errorPostingRetryLaterErrorMessage',
{
defaultMessage: 'an error occurred in action "{id}" posting a slack message, retry later',
values: {
id,
},
defaultMessage: 'error posting a slack message, retry later',
}
);
return {
status: 'error',
message: errMessage,
retry: true,
actionId,
};
}

function retryResultSeconds(
id: string,
actionId: string,
message: string,
retryAfter: number
): ActionTypeExecutorResult {
Expand All @@ -160,18 +167,17 @@ function retryResultSeconds(
const errMessage = i18n.translate(
'xpack.actions.builtin.slack.errorPostingRetryDateErrorMessage',
{
defaultMessage:
'an error occurred in action "{id}" posting a slack message, retry at {retryString}: {message}',
defaultMessage: 'error posting a slack message, retry at {retryString}',
values: {
id,
retryString,
message,
},
}
);
return {
status: 'error',
message: errMessage,
retry,
actionId,
serviceMessage: message,
};
}
Loading

0 comments on commit 03f5a18

Please sign in to comment.