mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 01:13:23 -04:00
parent
78cc5fdb82
commit
29fcdda9cb
7 changed files with 74 additions and 16 deletions
|
@ -39,7 +39,7 @@ const getRuleResultService = ({
|
|||
const ruleResultService = new RuleResultService();
|
||||
const { addLastRunError, addLastRunWarning, setLastRunOutcomeMessage } =
|
||||
ruleResultService.getLastRunSetters();
|
||||
errors.forEach((error) => addLastRunError(error));
|
||||
errors.forEach((error) => addLastRunError(error.message));
|
||||
warnings.forEach((warning) => addLastRunWarning(warning));
|
||||
setLastRunOutcomeMessage(outcomeMessage);
|
||||
return ruleResultService;
|
||||
|
@ -250,7 +250,7 @@ describe('lastRunFromState', () => {
|
|||
metrics: getMetrics({ hasReachedAlertLimit: true }),
|
||||
},
|
||||
getRuleResultService({
|
||||
errors: ['MOCK_ERROR'],
|
||||
errors: [{ message: 'MOCK_ERROR', userError: false }],
|
||||
outcomeMessage: 'Rule execution reported an error',
|
||||
})
|
||||
);
|
||||
|
|
|
@ -76,7 +76,7 @@ export function executionStatusFromState({
|
|||
// These errors are reported by ruleResultService.addLastRunError, therefore they are landed in successful execution map
|
||||
error = {
|
||||
reason: RuleExecutionStatusErrorReasons.Unknown,
|
||||
message: errorsFromLastRun.join(','),
|
||||
message: errorsFromLastRun.map((lastRunError) => lastRunError.message).join(','),
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,16 @@ describe('RuleResultService', () => {
|
|||
|
||||
test('should return errors array with added error', () => {
|
||||
lastRunSetters.addLastRunError('First error');
|
||||
expect(ruleResultService.getLastRunErrors()).toEqual(['First error']);
|
||||
expect(ruleResultService.getLastRunErrors()).toEqual([
|
||||
{ message: 'First error', userError: false },
|
||||
]);
|
||||
});
|
||||
|
||||
test('should return errors array with added user error', () => {
|
||||
lastRunSetters.addLastRunError('First error', true);
|
||||
expect(ruleResultService.getLastRunErrors()).toEqual([
|
||||
{ message: 'First error', userError: true },
|
||||
]);
|
||||
});
|
||||
|
||||
test('should return warnings array with added warning', () => {
|
||||
|
@ -49,7 +58,12 @@ describe('RuleResultService', () => {
|
|||
lastRunSetters.addLastRunWarning('warning');
|
||||
lastRunSetters.setLastRunOutcomeMessage('outcome message');
|
||||
const expectedLastRun: RuleResultServiceResults = {
|
||||
errors: ['error'],
|
||||
errors: [
|
||||
{
|
||||
message: 'error',
|
||||
userError: false,
|
||||
},
|
||||
],
|
||||
warnings: ['warning'],
|
||||
outcomeMessage: 'outcome message',
|
||||
};
|
||||
|
@ -63,7 +77,16 @@ describe('RuleResultService', () => {
|
|||
lastRunSetters.setLastRunOutcomeMessage('second outcome message');
|
||||
lastRunSetters.setLastRunOutcomeMessage('last outcome message');
|
||||
const expectedLastRun = {
|
||||
errors: ['first error', 'second error'],
|
||||
errors: [
|
||||
{
|
||||
message: 'first error',
|
||||
userError: false,
|
||||
},
|
||||
{
|
||||
message: 'second error',
|
||||
userError: false,
|
||||
},
|
||||
],
|
||||
warnings: [],
|
||||
outcomeMessage: 'last outcome message',
|
||||
};
|
||||
|
|
|
@ -8,17 +8,22 @@
|
|||
import { PublicLastRunSetters } from '../types';
|
||||
|
||||
export interface RuleResultServiceResults {
|
||||
errors: string[];
|
||||
errors: LastRunError[];
|
||||
warnings: string[];
|
||||
outcomeMessage: string;
|
||||
}
|
||||
|
||||
interface LastRunError {
|
||||
message: string;
|
||||
userError: boolean;
|
||||
}
|
||||
|
||||
export class RuleResultService {
|
||||
private errors: string[] = [];
|
||||
private errors: LastRunError[] = [];
|
||||
private warnings: string[] = [];
|
||||
private outcomeMessage: string = '';
|
||||
|
||||
public getLastRunErrors(): string[] {
|
||||
public getLastRunErrors(): LastRunError[] {
|
||||
return this.errors;
|
||||
}
|
||||
|
||||
|
@ -46,8 +51,8 @@ export class RuleResultService {
|
|||
};
|
||||
}
|
||||
|
||||
private addLastRunError(error: string) {
|
||||
this.errors.push(error);
|
||||
private addLastRunError(message: string, userError: boolean = false) {
|
||||
this.errors.push({ message, userError });
|
||||
}
|
||||
|
||||
private addLastRunWarning(warning: string) {
|
||||
|
|
|
@ -3311,7 +3311,10 @@ describe('Task Runner', () => {
|
|||
});
|
||||
|
||||
ruleResultService.getLastRunResults.mockImplementation(() => ({
|
||||
errors: ['an error occurred'],
|
||||
errors: [
|
||||
{ message: 'an error occurred', userError: false },
|
||||
{ message: 'second error occurred', userError: true },
|
||||
],
|
||||
warnings: [],
|
||||
outcomeMessage: '',
|
||||
}));
|
||||
|
@ -3325,11 +3328,37 @@ describe('Task Runner', () => {
|
|||
testAlertingEventLogCalls({
|
||||
status: 'error',
|
||||
softErrorFromLastRun: true,
|
||||
errorMessage: 'an error occurred',
|
||||
errorMessage: 'an error occurred,second error occurred',
|
||||
errorReason: 'unknown',
|
||||
});
|
||||
|
||||
expect(getErrorSource(runnerResult.taskRunError as Error)).toBe(TaskErrorSource.FRAMEWORK);
|
||||
expect(runnerResult.taskRunError).toEqual(new Error('an error occurred,second error occurred'));
|
||||
});
|
||||
|
||||
test('returns user error if all the errors are user error', async () => {
|
||||
rulesClient.getAlertFromRaw.mockReturnValue(mockedRuleTypeSavedObject as Rule);
|
||||
encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValue(mockedRawRuleSO);
|
||||
|
||||
const taskRunner = new TaskRunner({
|
||||
ruleType,
|
||||
taskInstance: mockedTaskInstance,
|
||||
context: taskRunnerFactoryInitializerParams,
|
||||
inMemoryMetrics,
|
||||
});
|
||||
|
||||
ruleResultService.getLastRunResults.mockImplementation(() => ({
|
||||
errors: [
|
||||
{ message: 'an error occurred', userError: true },
|
||||
{ message: 'second error occurred', userError: true },
|
||||
],
|
||||
warnings: [],
|
||||
outcomeMessage: '',
|
||||
}));
|
||||
|
||||
const runnerResult = await taskRunner.run();
|
||||
|
||||
expect(getErrorSource(runnerResult.taskRunError as Error)).toBe(TaskErrorSource.USER);
|
||||
});
|
||||
|
||||
function testAlertingEventLogCalls({
|
||||
|
|
|
@ -715,10 +715,11 @@ export class TaskRunner<
|
|||
|
||||
const { errors: errorsFromLastRun } = this.ruleResult.getLastRunResults();
|
||||
if (errorsFromLastRun.length > 0) {
|
||||
const isUserError = !errorsFromLastRun.some((lastRunError) => !lastRunError.userError);
|
||||
return {
|
||||
taskRunError: createTaskRunError(
|
||||
new Error(errorsFromLastRun.join(',')),
|
||||
TaskErrorSource.FRAMEWORK
|
||||
new Error(errorsFromLastRun.map((lastRunError) => lastRunError.message).join(',')),
|
||||
isUserError ? TaskErrorSource.USER : TaskErrorSource.FRAMEWORK
|
||||
),
|
||||
};
|
||||
}
|
||||
|
|
|
@ -414,7 +414,7 @@ export interface PublicMetricsSetters {
|
|||
}
|
||||
|
||||
export interface PublicLastRunSetters {
|
||||
addLastRunError: (outcome: string) => void;
|
||||
addLastRunError: (message: string, userError?: boolean) => void;
|
||||
addLastRunWarning: (outcomeMsg: string) => void;
|
||||
setLastRunOutcomeMessage: (warning: string) => void;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue