Skip to content

Commit 8d222b4

Browse files
committed
Address comments
1 parent 789384e commit 8d222b4

File tree

6 files changed

+74
-37
lines changed

6 files changed

+74
-37
lines changed

x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/map_filters_to_kuery_node.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,30 @@ describe('mapFiltersToKueryNode', () => {
5757
);
5858
});
5959

60+
test('should handle ruleLastRunOutcomesFilter', () => {
61+
expect(
62+
toElasticsearchQuery(
63+
mapFiltersToKueryNode({
64+
ruleLastRunOutcomesFilter: ['succeeded'],
65+
}) as KueryNode
66+
)
67+
).toEqual(
68+
toElasticsearchQuery(fromKueryExpression('alert.attributes.lastRun.outcome: succeeded'))
69+
);
70+
71+
expect(
72+
toElasticsearchQuery(
73+
mapFiltersToKueryNode({
74+
ruleLastRunOutcomesFilter: ['succeeded', 'failed', 'warning'],
75+
}) as KueryNode
76+
)
77+
).toEqual(
78+
toElasticsearchQuery(
79+
fromKueryExpression('alert.attributes.lastRun.outcome: (succeeded or failed or warning)')
80+
)
81+
);
82+
});
83+
6084
test('should handle ruleStatusesFilter', () => {
6185
expect(
6286
toElasticsearchQuery(
@@ -260,6 +284,7 @@ describe('mapFiltersToKueryNode', () => {
260284
typesFilter: ['type', 'filter'],
261285
actionTypesFilter: ['action', 'types', 'filter'],
262286
ruleExecutionStatusesFilter: ['alert', 'statuses', 'filter'],
287+
ruleLastRunOutcomesFilter: ['warning', 'failed'],
263288
tagsFilter: ['a', 'b', 'c'],
264289
}) as KueryNode
265290
)
@@ -271,6 +296,7 @@ describe('mapFiltersToKueryNode', () => {
271296
alert.attributes.actions:{ actionTypeId:types } OR
272297
alert.attributes.actions:{ actionTypeId:filter }) and
273298
alert.attributes.executionStatus.status:(alert or statuses or filter) and
299+
alert.attributes.lastRun.outcome:(warning or failed) and
274300
alert.attributes.tags:(a or b or c)`
275301
)
276302
)

x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_event_log_list_status.tsx

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88
import React, { useMemo } from 'react';
99
import { EuiIcon } from '@elastic/eui';
1010
import { RuleAlertingOutcome } from '@kbn/alerting-plugin/common';
11+
import {
12+
RULE_LAST_RUN_OUTCOME_SUCCEEDED,
13+
RULE_LAST_RUN_OUTCOME_FAILED,
14+
RULE_LAST_RUN_OUTCOME_WARNING,
15+
ALERT_STATUS_UNKNOWN,
16+
} from '../../rules_list/translations';
1117

1218
interface RuleEventLogListStatusProps {
1319
status: RuleAlertingOutcome;
@@ -32,10 +38,10 @@ const STATUS_TO_COLOR: Record<RuleAlertingOutcome, string> = {
3238
};
3339

3440
const STATUS_TO_OUTCOME: Record<RuleAlertingOutcome, string> = {
35-
success: 'succeeded',
36-
failure: 'failed',
37-
warning: 'warning',
38-
unknown: 'unknown',
41+
success: RULE_LAST_RUN_OUTCOME_SUCCEEDED,
42+
failure: RULE_LAST_RUN_OUTCOME_FAILED,
43+
warning: RULE_LAST_RUN_OUTCOME_WARNING,
44+
unknown: ALERT_STATUS_UNKNOWN,
3945
};
4046

4147
export const RuleEventLogListStatus = (props: RuleEventLogListStatusProps) => {
@@ -44,7 +50,7 @@ export const RuleEventLogListStatus = (props: RuleEventLogListStatusProps) => {
4450

4551
const statusString = useMemo(() => {
4652
if (lastRunOutcomeEnabled) {
47-
return STATUS_TO_OUTCOME[status];
53+
return STATUS_TO_OUTCOME[status].toLocaleLowerCase();
4854
}
4955
return status;
5056
}, [lastRunOutcomeEnabled, status]);

x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_last_run_outcome_filter.tsx

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* 2.0.
66
*/
77

8-
import React, { useCallback, useEffect, useState } from 'react';
8+
import React, { useCallback, useState } from 'react';
99
import { FormattedMessage } from '@kbn/i18n-react';
1010
import { EuiPopover, EuiFilterButton, EuiFilterSelectItem, EuiHealth } from '@elastic/eui';
1111
import { RuleLastRunOutcomes, RuleLastRunOutcomeValues } from '@kbn/alerting-plugin/common';
@@ -23,7 +23,6 @@ export const RuleLastRunOutcomeFilter: React.FunctionComponent<RuleLastRunOutcom
2323
selectedOutcomes,
2424
onChange,
2525
}: RuleLastRunOutcomeFilterProps) => {
26-
const [selectedValues, setSelectedValues] = useState<string[]>(selectedOutcomes);
2726
const [isPopoverOpen, setIsPopoverOpen] = useState<boolean>(false);
2827

2928
const onTogglePopover = useCallback(() => {
@@ -34,16 +33,17 @@ export const RuleLastRunOutcomeFilter: React.FunctionComponent<RuleLastRunOutcom
3433
setIsPopoverOpen(false);
3534
}, [setIsPopoverOpen]);
3635

37-
useEffect(() => {
38-
if (onChange) {
39-
onChange(selectedValues);
40-
}
41-
// eslint-disable-next-line react-hooks/exhaustive-deps
42-
}, [selectedValues]);
43-
44-
useEffect(() => {
45-
setSelectedValues(selectedOutcomes);
46-
}, [selectedOutcomes]);
36+
const onFilterSelectItem = useCallback(
37+
(filterItem: string) => () => {
38+
const isPreviouslyChecked = selectedOutcomes.includes(filterItem);
39+
if (isPreviouslyChecked) {
40+
onChange?.(selectedOutcomes.filter((val) => val !== filterItem));
41+
} else {
42+
onChange?.(selectedOutcomes.concat(filterItem));
43+
}
44+
},
45+
[onChange, selectedOutcomes]
46+
);
4747

4848
return (
4949
<EuiPopover
@@ -52,9 +52,9 @@ export const RuleLastRunOutcomeFilter: React.FunctionComponent<RuleLastRunOutcom
5252
button={
5353
<EuiFilterButton
5454
iconType="arrowDown"
55-
hasActiveFilters={selectedValues.length > 0}
56-
numActiveFilters={selectedValues.length}
57-
numFilters={selectedValues.length}
55+
hasActiveFilters={selectedOutcomes.length > 0}
56+
numActiveFilters={selectedOutcomes.length}
57+
numFilters={selectedOutcomes.length}
5858
onClick={onTogglePopover}
5959
data-test-subj="ruleLastRunOutcomeFilterButton"
6060
>
@@ -72,15 +72,8 @@ export const RuleLastRunOutcomeFilter: React.FunctionComponent<RuleLastRunOutcom
7272
<EuiFilterSelectItem
7373
key={item}
7474
style={{ textTransform: 'capitalize' }}
75-
onClick={() => {
76-
const isPreviouslyChecked = selectedValues.includes(item);
77-
if (isPreviouslyChecked) {
78-
setSelectedValues(selectedValues.filter((val) => val !== item));
79-
} else {
80-
setSelectedValues(selectedValues.concat(item));
81-
}
82-
}}
83-
checked={selectedValues.includes(item) ? 'on' : undefined}
75+
onClick={onFilterSelectItem(item)}
76+
checked={selectedOutcomes.includes(item) ? 'on' : undefined}
8477
data-test-subj={`ruleLastRunOutcome${item}FilterOption`}
8578
>
8679
<EuiHealth color={healthColor}>

x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import {
3434
RuleExecutionStatus,
3535
ALERTS_FEATURE_ID,
3636
RuleExecutionStatusErrorReasons,
37+
RuleLastRunOutcomeValues,
3738
} from '@kbn/alerting-plugin/common';
3839
import { AlertingConnectorFeatureId } from '@kbn/actions-plugin/common';
3940
import {
@@ -301,7 +302,7 @@ export const RulesList = ({
301302
const { loadRuleAggregations, rulesStatusesTotal, rulesLastRunOutcomesTotal } =
302303
useLoadRuleAggregations({
303304
searchText,
304-
typesFilter,
305+
typesFilter: rulesTypesFilter,
305306
actionTypesFilter,
306307
ruleExecutionStatusesFilter,
307308
ruleLastRunOutcomesFilter,
@@ -489,7 +490,7 @@ export const RulesList = ({
489490
setShowErrors((prevValue) => {
490491
if (!prevValue) {
491492
const rulesToExpand = rulesState.data.reduce((acc, ruleItem) => {
492-
if (ruleItem.lastRun?.outcome === 'failed') {
493+
if (ruleItem.lastRun?.outcome === RuleLastRunOutcomeValues[2]) {
493494
return {
494495
...acc,
495496
[ruleItem.id]: (

x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_statuses.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import React from 'react';
9-
import { EuiFlexItem, EuiHealth } from '@elastic/eui';
9+
import { EuiFlexGroup, EuiFlexItem, EuiHealth } from '@elastic/eui';
1010
import { getIsExperimentalFeatureEnabled } from '../../../../common/get_experimental_features';
1111

1212
import {
@@ -33,7 +33,7 @@ export const RulesListStatuses = (props: RulesListStatusesProps) => {
3333

3434
if (isRuleLastRunOutcomeEnabled) {
3535
return (
36-
<>
36+
<EuiFlexGroup alignItems="center" gutterSize="none">
3737
<EuiFlexItem grow={false}>
3838
<EuiHealth color="success" data-test-subj="totalSucceededRulesCount">
3939
{RULE_LAST_RUN_OUTCOME_SUCCEEDED_DESCRIPTION(rulesLastRunOutcomes.succeeded)}
@@ -49,12 +49,12 @@ export const RulesListStatuses = (props: RulesListStatusesProps) => {
4949
{RULE_LAST_RUN_OUTCOME_WARNING_DESCRIPTION(rulesLastRunOutcomes.warning)}
5050
</EuiHealth>
5151
</EuiFlexItem>
52-
</>
52+
</EuiFlexGroup>
5353
);
5454
}
5555

5656
return (
57-
<>
57+
<EuiFlexGroup alignItems="center" gutterSize="none">
5858
<EuiFlexItem grow={false}>
5959
<EuiHealth color="success" data-test-subj="totalActiveRulesCount">
6060
{RULE_STATUS_ACTIVE(rulesStatuses.active)}
@@ -85,6 +85,6 @@ export const RulesListStatuses = (props: RulesListStatusesProps) => {
8585
{RULE_STATUS_UNKNOWN(rulesStatuses.unknown)}
8686
</EuiHealth>
8787
</EuiFlexItem>
88-
</>
88+
</EuiFlexGroup>
8989
);
9090
};

x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import { RuleTagBadge } from './rule_tag_badge';
6262
import { RuleStatusDropdown } from './rule_status_dropdown';
6363
import { RulesListNotifyBadge } from './rules_list_notify_badge';
6464
import { RulesListTableStatusCell } from './rules_list_table_status_cell';
65+
import { getIsExperimentalFeatureEnabled } from '../../../../common/get_experimental_features';
6566
import {
6667
RulesListColumns,
6768
RulesListVisibleColumns,
@@ -214,6 +215,8 @@ export const RulesListTable = (props: RulesListTableProps) => {
214215
const [currentlyOpenNotify, setCurrentlyOpenNotify] = useState<string>();
215216
const [isLoadingMap, setIsLoadingMap] = useState<Record<string, boolean>>({});
216217

218+
const isRuleLastRunOutcomeEnabled = getIsExperimentalFeatureEnabled('ruleLastRunOutcome');
219+
217220
const [defaultNumberFormat] = useUiSetting$<string>(DEFAULT_NUMBER_FORMAT);
218221
const { euiTheme } = useEuiTheme();
219222

@@ -325,6 +328,13 @@ export const RulesListTable = (props: RulesListTableProps) => {
325328
};
326329
}, [isPageSelected, onSelectPage, onSelectRow, isRowSelected]);
327330

331+
const ruleOutcomeColumnField = useMemo(() => {
332+
if (isRuleLastRunOutcomeEnabled) {
333+
return 'lastRun.outcome';
334+
}
335+
return 'executionStatus.status';
336+
}, [isRuleLastRunOutcomeEnabled]);
337+
328338
const getRulesTableColumns = useCallback((): RulesListColumns[] => {
329339
return [
330340
{
@@ -662,7 +672,7 @@ export const RulesListTable = (props: RulesListTableProps) => {
662672
},
663673
{
664674
id: 'ruleExecutionStatus',
665-
field: 'lastRun.outcome',
675+
field: ruleOutcomeColumnField,
666676
name: i18n.translate(
667677
'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastResponseTitle',
668678
{ defaultMessage: 'Last response' }
@@ -781,6 +791,7 @@ export const RulesListTable = (props: RulesListTableProps) => {
781791
ruleTypesState.data,
782792
selectedPercentile,
783793
tagPopoverOpenIndex,
794+
ruleOutcomeColumnField,
784795
]);
785796

786797
const allRuleColumns = useMemo(() => getRulesTableColumns(), [getRulesTableColumns]);

0 commit comments

Comments
 (0)