From bca7bbd1dac47048bd17f8f2e1a28fe0bef9b70d Mon Sep 17 00:00:00 2001 From: Bailey Cash Date: Tue, 20 May 2025 14:54:53 -0400 Subject: [PATCH 01/13] begin enhancing rules ebt telemetry --- .../components/collapsed_item_actions.tsx | 23 +++++++++++-------- .../rule_snooze/panel/base_snooze_panel.tsx | 20 ++++++++-------- .../components/rule_snooze/panel/index.tsx | 4 ++++ .../components/rule_snooze/scheduler.tsx | 10 ++++---- .../components/rule_snooze_modal.tsx | 3 +++ .../components/header_actions.tsx | 14 ++++++----- 6 files changed, 46 insertions(+), 28 deletions(-) diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx index 9445f0aebf354..4c64058b35c4c 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx @@ -76,6 +76,8 @@ export const CollapsedItemActions: React.FunctionComponent = ({ const [isDisabled, setIsDisabled] = useState(!item.enabled); const [isUntrackAlertsModalOpen, setIsUntrackAlertsModalOpen] = useState(false); + const snakeRuleType = item.ruleTypeId.replace(/:/g, '_'); + const collapsedItemActionsCss = css` .collapsedItemActions__deleteButton { color: ${euiTheme.colors.textDanger}; @@ -169,13 +171,13 @@ export const CollapsedItemActions: React.FunctionComponent = ({ return [ { disabled: !item.isEditable || !item.enabledInLicense, - 'data-test-subj': 'snoozeButton', + 'data-test-subj': `snoozeButton__${snakeRuleType}`, icon: 'bellSlash', name: snoozedButtonText, panel: 1, }, ]; - }, [isDisabled, item, snoozedButtonText]); + }, [isDisabled, item, snoozedButtonText, snakeRuleType]); const onDisableModalOpen = useCallback(() => { setIsUntrackAlertsModalOpen(true); @@ -224,7 +226,9 @@ export const CollapsedItemActions: React.FunctionComponent = ({ }, { disabled: !item.isEditable || !item.enabledInLicense, - 'data-test-subj': 'disableButton', + 'data-test-subj': isDisabled + ? `enableRule__${snakeRuleType}` + : `disableRule__${snakeRuleType}`, onClick: onDisableClick, name: isDisabled ? i18n.translate( @@ -238,7 +242,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ }, { disabled: !item.isEditable || item.consumer === AlertConsumers.SIEM, - 'data-test-subj': 'cloneRule', + 'data-test-subj': `cloneRule__${snakeRuleType}`, onClick: async () => { setIsPopoverOpen(!isPopoverOpen); onCloneRule(item.id); @@ -250,7 +254,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ }, { disabled: !item.isEditable || !isRuleTypeEditableInContext, - 'data-test-subj': 'editRule', + 'data-test-subj': `editRule__${snakeRuleType}`, onClick: () => { setIsPopoverOpen(!isPopoverOpen); onEditRule(item); @@ -262,7 +266,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ }, { disabled: !item.isEditable, - 'data-test-subj': 'updateApiKey', + 'data-test-subj': `updateApiKey__${snakeRuleType}`, onClick: () => { setIsPopoverOpen(!isPopoverOpen); onUpdateAPIKey(item); @@ -274,7 +278,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ }, { disabled: !item.isEditable, - 'data-test-subj': 'runRule', + 'data-test-subj': `runRule__${snakeRuleType}`, onClick: () => { setIsPopoverOpen(!isPopoverOpen); onRunRule(item); @@ -286,8 +290,8 @@ export const CollapsedItemActions: React.FunctionComponent = ({ }, { disabled: !item.isEditable, + 'data-test-subj': `deleteRule__${snakeRuleType}`, className: 'collapsedItemActions__deleteButton', - 'data-test-subj': 'deleteRule', onClick: () => { setIsPopoverOpen(!isPopoverOpen); onDeleteRule(item); @@ -318,6 +322,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ content: ( = ({ setIsPopoverOpen(!isPopoverOpen)} diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx index db61f3353be1e..bef19ccf272a8 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx @@ -39,6 +39,7 @@ import { durationToTextString, scheduleSummary, usePreviousSnoozeInterval } from import { DAYS, HOURS, MINUTES, MONTHS, WEEKS } from './translations'; export interface BaseSnoozePanelProps { + ruleType: string; interval?: string; snoozeRule: (schedule: SnoozeSchedule) => Promise; unsnoozeRule: (scheduleIds?: string[]) => Promise; @@ -54,6 +55,7 @@ export interface BaseSnoozePanelProps { } export const BaseSnoozePanel: React.FunctionComponent = ({ + ruleType, isLoading, interval = '3d', snoozeRule, @@ -170,7 +172,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ fill color="primary" onClick={onClickAddSchedule} - data-test-subj="ruleAddSchedule" + data-test-subj={`ruleAddSchedule__${ruleType}`} iconType="calendar" > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.addSchedule', { @@ -201,7 +203,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ color="danger" size="xs" onClick={() => setIsRemoveAllModalVisible(true)} - data-test-subj="ruleRemoveAllSchedules" + data-test-subj={`ruleRemoveAllSchedules__${ruleType}`} > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.removeAllButton', { defaultMessage: 'Remove all', @@ -221,7 +223,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ onClick={onClickEditScheduleFactory(schedule as SnoozeSchedule)} iconType={isActive ? 'bellSlash' : 'calendar'} iconSide="left" - style={{ + css={{ paddingLeft: '9px', paddingRight: '9px', color: isActive @@ -250,7 +252,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ = 5} - data-test-subj="ruleSchedulesListAddButton" + data-test-subj={`ruleSchedulesListAddButton__${ruleType}`} iconType="plusInCircleFilled" onClick={onClickAddSchedule} > @@ -277,7 +279,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ flush="left" size="s" iconType="refresh" - data-test-subj="ruleSnoozePreviousButton" + data-test-subj={`ruleSnoozePreviousButton__${ruleType}`} onClick={() => applySnooze(parsedPrevSnooze.value, parsedPrevSnooze.unit as SnoozeUnit)} > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.previousSnooze', { @@ -359,7 +361,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ disabled={!intervalValue || intervalValue < 1} isLoading={isLoading} onClick={onClickApplyButton} - data-test-subj="ruleSnoozeApply" + data-test-subj={`ruleSnoozeApply__${ruleType}`} minWidth={0} > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.applySnooze', { @@ -399,7 +401,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ flush="left" size="s" onClick={onApplyIndefinite} - data-test-subj="ruleSnoozeIndefiniteApply" + data-test-subj={`ruleSnoozeIndefiniteApply__${ruleType}`} > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeIndefinitely', { defaultMessage: 'Snooze indefinitely', @@ -419,7 +421,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ isLoading={isLoading} color="danger" onClick={onClickCancelSnooze} - data-test-subj="ruleSnoozeCancel" + data-test-subj={`ruleSnoozeCancel__${ruleType}`} > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.cancelSnooze', { defaultMessage: 'Cancel snooze', @@ -464,7 +466,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ title={i18n.translate('xpack.triggersActionsUI.sections.rulesList.cancelSnooze', { defaultMessage: 'Cancel snooze', })} - style={{ maxWidth: '420px' }} + css={{ maxWidth: '420px' }} onCancel={() => setIsCancelModalVisible(false)} onConfirm={onCancelSnooze} cancelButtonText={i18n.translate( diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx index 9c1f1c844c699..6634c1f80317e 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx @@ -14,6 +14,7 @@ export { futureTimeToInterval } from './helpers'; type SnoozePanelProps = Pick< BaseSnoozePanelProps, + | 'ruleType' | 'interval' | 'snoozeRule' | 'unsnoozeRule' @@ -26,6 +27,7 @@ type SnoozePanelProps = Pick< >; export const SnoozePanel: React.FC = ({ + ruleType, interval, snoozeRule, unsnoozeRule, @@ -108,6 +110,7 @@ export const SnoozePanel: React.FC = ({ return !isSchedulerOpen ? ( = ({ /> ) : ( void; onCancelSchedules: (ids: string[]) => void; initialSchedule: SnoozeSchedule | null; @@ -88,7 +89,7 @@ export const RuleSnoozeScheduler: React.FunctionComponent = ({ - + {title} @@ -101,6 +102,7 @@ export const RuleSnoozeScheduler: React.FunctionComponent = ({ }; const RuleSnoozeSchedulerPanel: React.FunctionComponent = ({ + ruleType, onSaveSchedule, initialSchedule, isLoading, @@ -349,7 +351,7 @@ const RuleSnoozeSchedulerPanel: React.FunctionComponent = ({ = ({ disabled={!startDT || !endDT || startDT.isSameOrAfter(endDT) || startDT.isBefore(minDate)} onClick={onClickSaveSchedule} isLoading={isLoading} - data-test-subj="scheduler-saveSchedule" + data-test-subj={`scheduler-saveSchedule__${ruleType}`} > {i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.saveSchedule', { defaultMessage: 'Save schedule', @@ -406,7 +408,7 @@ const RuleSnoozeSchedulerPanel: React.FunctionComponent = ({ {!inPopover && } = ({ return isRuleSnoozed(rule); }, [rule]); + const snakeRuleType = rule.ruleTypeId.replace(/:/g, '_'); + const onApplySnooze = useCallback( async (snoozeSchedule: SnoozeSchedule) => { try { @@ -88,6 +90,7 @@ export const RuleSnoozeModal: React.FunctionComponent = ({ Date: Thu, 22 May 2025 10:35:50 -0400 Subject: [PATCH 02/13] switch rule type to single div --- .../components/collapsed_item_actions.tsx | 41 +++++++++---------- .../rule_snooze/panel/base_snooze_panel.tsx | 16 ++++---- .../components/rule_snooze/panel/index.tsx | 4 -- .../components/rule_snooze/scheduler.tsx | 6 +-- .../components/rule_snooze_modal.tsx | 3 -- .../components/header_actions.tsx | 32 +++++++-------- 6 files changed, 44 insertions(+), 58 deletions(-) diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx index 4c64058b35c4c..5fbc18b9590ea 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx @@ -76,8 +76,6 @@ export const CollapsedItemActions: React.FunctionComponent = ({ const [isDisabled, setIsDisabled] = useState(!item.enabled); const [isUntrackAlertsModalOpen, setIsUntrackAlertsModalOpen] = useState(false); - const snakeRuleType = item.ruleTypeId.replace(/:/g, '_'); - const collapsedItemActionsCss = css` .collapsedItemActions__deleteButton { color: ${euiTheme.colors.textDanger}; @@ -171,13 +169,13 @@ export const CollapsedItemActions: React.FunctionComponent = ({ return [ { disabled: !item.isEditable || !item.enabledInLicense, - 'data-test-subj': `snoozeButton__${snakeRuleType}`, + 'data-test-subj': 'snoozeButton', icon: 'bellSlash', name: snoozedButtonText, panel: 1, }, ]; - }, [isDisabled, item, snoozedButtonText, snakeRuleType]); + }, [isDisabled, item, snoozedButtonText]); const onDisableModalOpen = useCallback(() => { setIsUntrackAlertsModalOpen(true); @@ -226,9 +224,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ }, { disabled: !item.isEditable || !item.enabledInLicense, - 'data-test-subj': isDisabled - ? `enableRule__${snakeRuleType}` - : `disableRule__${snakeRuleType}`, + 'data-test-subj': 'disableButton', onClick: onDisableClick, name: isDisabled ? i18n.translate( @@ -242,7 +238,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ }, { disabled: !item.isEditable || item.consumer === AlertConsumers.SIEM, - 'data-test-subj': `cloneRule__${snakeRuleType}`, + 'data-test-subj': 'cloneRule', onClick: async () => { setIsPopoverOpen(!isPopoverOpen); onCloneRule(item.id); @@ -254,7 +250,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ }, { disabled: !item.isEditable || !isRuleTypeEditableInContext, - 'data-test-subj': `editRule__${snakeRuleType}`, + 'data-test-subj': 'editRule', onClick: () => { setIsPopoverOpen(!isPopoverOpen); onEditRule(item); @@ -266,7 +262,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ }, { disabled: !item.isEditable, - 'data-test-subj': `updateApiKey__${snakeRuleType}`, + 'data-test-subj': 'updateApiKey', onClick: () => { setIsPopoverOpen(!isPopoverOpen); onUpdateAPIKey(item); @@ -278,7 +274,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ }, { disabled: !item.isEditable, - 'data-test-subj': `runRule__${snakeRuleType}`, + 'data-test-subj': 'runRule', onClick: () => { setIsPopoverOpen(!isPopoverOpen); onRunRule(item); @@ -290,8 +286,8 @@ export const CollapsedItemActions: React.FunctionComponent = ({ }, { disabled: !item.isEditable, - 'data-test-subj': `deleteRule__${snakeRuleType}`, className: 'collapsedItemActions__deleteButton', + 'data-test-subj': 'deleteRule', onClick: () => { setIsPopoverOpen(!isPopoverOpen); onDeleteRule(item); @@ -322,7 +318,6 @@ export const CollapsedItemActions: React.FunctionComponent = ({ content: ( = ({ setIsPopoverOpen(!isPopoverOpen)} @@ -363,14 +358,16 @@ export const CollapsedItemActions: React.FunctionComponent = ({ panelPaddingSize="none" data-test-subj="collapsedItemActions" > - +
+ +
{isUntrackAlertsModalOpen && ( diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx index bef19ccf272a8..5d2a579393788 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx @@ -39,7 +39,6 @@ import { durationToTextString, scheduleSummary, usePreviousSnoozeInterval } from import { DAYS, HOURS, MINUTES, MONTHS, WEEKS } from './translations'; export interface BaseSnoozePanelProps { - ruleType: string; interval?: string; snoozeRule: (schedule: SnoozeSchedule) => Promise; unsnoozeRule: (scheduleIds?: string[]) => Promise; @@ -55,7 +54,6 @@ export interface BaseSnoozePanelProps { } export const BaseSnoozePanel: React.FunctionComponent = ({ - ruleType, isLoading, interval = '3d', snoozeRule, @@ -172,7 +170,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ fill color="primary" onClick={onClickAddSchedule} - data-test-subj={`ruleAddSchedule__${ruleType}`} + data-test-subj="ruleAddSchedule" iconType="calendar" > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.addSchedule', { @@ -203,7 +201,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ color="danger" size="xs" onClick={() => setIsRemoveAllModalVisible(true)} - data-test-subj={`ruleRemoveAllSchedules__${ruleType}`} + data-test-subj="ruleRemoveAllSchedules" > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.removeAllButton', { defaultMessage: 'Remove all', @@ -252,7 +250,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ = 5} - data-test-subj={`ruleSchedulesListAddButton__${ruleType}`} + data-test-subj="ruleSchedulesListAddButton" iconType="plusInCircleFilled" onClick={onClickAddSchedule} > @@ -279,7 +277,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ flush="left" size="s" iconType="refresh" - data-test-subj={`ruleSnoozePreviousButton__${ruleType}`} + data-test-subj="ruleSnoozePreviousButton" onClick={() => applySnooze(parsedPrevSnooze.value, parsedPrevSnooze.unit as SnoozeUnit)} > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.previousSnooze', { @@ -361,7 +359,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ disabled={!intervalValue || intervalValue < 1} isLoading={isLoading} onClick={onClickApplyButton} - data-test-subj={`ruleSnoozeApply__${ruleType}`} + data-test-subj="ruleSnoozeApply" minWidth={0} > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.applySnooze', { @@ -401,7 +399,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ flush="left" size="s" onClick={onApplyIndefinite} - data-test-subj={`ruleSnoozeIndefiniteApply__${ruleType}`} + data-test-subj="ruleSnoozeIndefiniteApply" > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeIndefinitely', { defaultMessage: 'Snooze indefinitely', @@ -421,7 +419,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ isLoading={isLoading} color="danger" onClick={onClickCancelSnooze} - data-test-subj={`ruleSnoozeCancel__${ruleType}`} + data-test-subj="ruleSnoozeCancel" > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.cancelSnooze', { defaultMessage: 'Cancel snooze', diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx index 6634c1f80317e..9c1f1c844c699 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx @@ -14,7 +14,6 @@ export { futureTimeToInterval } from './helpers'; type SnoozePanelProps = Pick< BaseSnoozePanelProps, - | 'ruleType' | 'interval' | 'snoozeRule' | 'unsnoozeRule' @@ -27,7 +26,6 @@ type SnoozePanelProps = Pick< >; export const SnoozePanel: React.FC = ({ - ruleType, interval, snoozeRule, unsnoozeRule, @@ -110,7 +108,6 @@ export const SnoozePanel: React.FC = ({ return !isSchedulerOpen ? ( = ({ /> ) : ( void; onCancelSchedules: (ids: string[]) => void; initialSchedule: SnoozeSchedule | null; @@ -102,7 +101,6 @@ export const RuleSnoozeScheduler: React.FunctionComponent = ({ }; const RuleSnoozeSchedulerPanel: React.FunctionComponent = ({ - ruleType, onSaveSchedule, initialSchedule, isLoading, @@ -333,7 +331,7 @@ const RuleSnoozeSchedulerPanel: React.FunctionComponent = ({ /> - + = ({ disabled={!startDT || !endDT || startDT.isSameOrAfter(endDT) || startDT.isBefore(minDate)} onClick={onClickSaveSchedule} isLoading={isLoading} - data-test-subj={`scheduler-saveSchedule__${ruleType}`} + data-test-subj="scheduler-saveSchedule" > {i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.saveSchedule', { defaultMessage: 'Save schedule', diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze_modal.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze_modal.tsx index 31781ca367204..a40033e898582 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze_modal.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze_modal.tsx @@ -46,8 +46,6 @@ export const RuleSnoozeModal: React.FunctionComponent = ({ return isRuleSnoozed(rule); }, [rule]); - const snakeRuleType = rule.ruleTypeId.replace(/:/g, '_'); - const onApplySnooze = useCallback( async (snoozeSchedule: SnoozeSchedule) => { try { @@ -90,7 +88,6 @@ export const RuleSnoozeModal: React.FunctionComponent = ({ } > - +
+ +
From 5a8c43766a09f9f2c8c495dcc48b57ab1ea9920e Mon Sep 17 00:00:00 2001 From: Bailey Cash Date: Thu, 22 May 2025 10:46:03 -0400 Subject: [PATCH 03/13] add context to subj --- .../sections/rules_list/components/collapsed_item_actions.tsx | 2 +- .../public/pages/rule_details/components/header_actions.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx index 5fbc18b9590ea..3f257a7f816f9 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx @@ -358,7 +358,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ panelPaddingSize="none" data-test-subj="collapsedItemActions" > -
+
} > -
+
Date: Thu, 22 May 2025 14:09:01 -0400 Subject: [PATCH 04/13] resolve conflicts with data-test-subj --- .../sections/rules_list/components/collapsed_item_actions.tsx | 2 +- .../public/pages/rule_details/components/header_actions.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx index 3f257a7f816f9..16c540891571b 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx @@ -358,7 +358,7 @@ export const CollapsedItemActions: React.FunctionComponent = ({ panelPaddingSize="none" data-test-subj="collapsedItemActions" > -
+
} > -
+
Date: Thu, 22 May 2025 14:23:02 -0400 Subject: [PATCH 05/13] move test subj to table row --- .../components/collapsed_item_actions.tsx | 18 ++++++++---------- .../rules_list/components/rules_list_table.tsx | 6 +++++- .../rule_details/components/header_actions.tsx | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx index 16c540891571b..9445f0aebf354 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/collapsed_item_actions.tsx @@ -358,16 +358,14 @@ export const CollapsedItemActions: React.FunctionComponent = ({ panelPaddingSize="none" data-test-subj="collapsedItemActions" > -
- -
+ {isUntrackAlertsModalOpen && ( diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx index edb1e3b29dedd..49bf5e0ee7105 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx @@ -777,7 +777,11 @@ export const RulesListTable = (props: RulesListTableProps) => { width: '90px', render(rule: RuleTableItem) { return ( - + {rule.isEditable && isRuleTypeEditableInContext(rule.ruleTypeId) ? ( diff --git a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx index 9cf6f3997f230..2ab8420499b50 100644 --- a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx +++ b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx @@ -207,7 +207,7 @@ export function HeaderActions({ } > -
+
Date: Tue, 3 Jun 2025 17:11:51 -0400 Subject: [PATCH 06/13] move ruletype label for details page menu --- .../components/header_actions.tsx | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx index 2ab8420499b50..5a882f3cd97b5 100644 --- a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx +++ b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx @@ -194,7 +194,7 @@ export function HeaderActions({ closePopover={togglePopover} button={ } > -
- -
+ From 55ab92f8e620aad8280cd1a85d02225448c2db67 Mon Sep 17 00:00:00 2001 From: Bailey Cash Date: Tue, 3 Jun 2025 17:52:52 -0400 Subject: [PATCH 07/13] reduce risky changes --- .../public/pages/rule_details/components/header_actions.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx index 5a882f3cd97b5..4fa120d254a70 100644 --- a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx +++ b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx @@ -194,7 +194,7 @@ export function HeaderActions({ closePopover={togglePopover} button={ From 7735531a91ccf2fea16e00eddc763db838608fab Mon Sep 17 00:00:00 2001 From: Bailey Cash Date: Thu, 5 Jun 2025 15:38:57 -0400 Subject: [PATCH 08/13] improve subj filters --- .../components/rules_list_table.tsx | 50 ++++++++++--------- .../components/header_actions.tsx | 18 ++++--- 2 files changed, 37 insertions(+), 31 deletions(-) diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx index 49bf5e0ee7105..64634cbc607fe 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx @@ -322,16 +322,18 @@ export const RulesListTable = (props: RulesListTableProps) => { const renderRuleStatusDropdown = useCallback( (rule: RuleTableItem) => { return ( - await onEnableRule(rule)} - snoozeRule={async () => {}} - unsnoozeRule={async () => {}} - rule={rule} - onRuleChanged={onRuleChanged} - isEditable={rule.isEditable && isRuleTypeEditableInContext(rule.ruleTypeId)} - /> +
+ await onEnableRule(rule)} + snoozeRule={async () => {}} + unsnoozeRule={async () => {}} + rule={rule} + onRuleChanged={onRuleChanged} + isEditable={rule.isEditable && isRuleTypeEditableInContext(rule.ruleTypeId)} + /> +
); }, [isRuleTypeEditableInContext, onDisableRuleInternal, onEnableRule, onRuleChanged] @@ -541,18 +543,20 @@ export const RulesListTable = (props: RulesListTableProps) => { } return ( - { - await onSnoozeRule(rule, snoozeSchedule); - }} - unsnoozeRule={async (scheduleIds) => await onUnsnoozeRule(rule, scheduleIds)} - isRuleEditable={rule.isEditable} - /> +
+ { + await onSnoozeRule(rule, snoozeSchedule); + }} + unsnoozeRule={async (scheduleIds) => await onUnsnoozeRule(rule, scheduleIds)} + isRuleEditable={rule.isEditable} + /> +
); }, }, @@ -780,7 +784,7 @@ export const RulesListTable = (props: RulesListTableProps) => { diff --git a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx index 4fa120d254a70..5ac0dd89d7a77 100644 --- a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx +++ b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx @@ -207,14 +207,16 @@ export function HeaderActions({
} > - +
+ +
From d93a4104e1df0e9dbdff639e1dad9b5ce6b302aa Mon Sep 17 00:00:00 2001 From: Bailey Cash Date: Thu, 5 Jun 2025 15:53:19 -0400 Subject: [PATCH 09/13] revert untouched files --- .../components/rule_snooze/panel/base_snooze_panel.tsx | 4 ++-- .../rules_list/components/rule_snooze/scheduler.tsx | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx index 5d2a579393788..db61f3353be1e 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx @@ -221,7 +221,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ onClick={onClickEditScheduleFactory(schedule as SnoozeSchedule)} iconType={isActive ? 'bellSlash' : 'calendar'} iconSide="left" - css={{ + style={{ paddingLeft: '9px', paddingRight: '9px', color: isActive @@ -464,7 +464,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ title={i18n.translate('xpack.triggersActionsUI.sections.rulesList.cancelSnooze', { defaultMessage: 'Cancel snooze', })} - css={{ maxWidth: '420px' }} + style={{ maxWidth: '420px' }} onCancel={() => setIsCancelModalVisible(false)} onConfirm={onCancelSnooze} cancelButtonText={i18n.translate( diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx index 518750c45b7b8..fe3cc92b18ea4 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx @@ -88,7 +88,7 @@ export const RuleSnoozeScheduler: React.FunctionComponent = ({ - + {title} @@ -331,7 +331,7 @@ const RuleSnoozeSchedulerPanel: React.FunctionComponent = ({ /> - + = ({ = ({ {!inPopover && } Date: Fri, 6 Jun 2025 10:47:03 -0400 Subject: [PATCH 10/13] improve subj descriptions and improve test data --- .../alerting/server/usage/task_state.test.ts | 14 +++++++++-- .../components/header_actions.tsx | 24 ++++++++++--------- .../pages/rule_details/rule_details.tsx | 2 +- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/x-pack/platform/plugins/shared/alerting/server/usage/task_state.test.ts b/x-pack/platform/plugins/shared/alerting/server/usage/task_state.test.ts index ccef029a6ab30..f69646503ba87 100644 --- a/x-pack/platform/plugins/shared/alerting/server/usage/task_state.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/usage/task_state.test.ts @@ -667,10 +667,20 @@ describe('telemetry task state', () => { count_rules_executions_timeouts_by_type_per_day: { '.index-threshold': 30 }, count_rules_executions_timeouts_per_day: 31, count_rules_muted: 32, - count_rules_muted_by_type: {}, + count_rules_muted_by_type: { + // eslint-disable-next-line @typescript-eslint/naming-convention + observability__rules__custom_threshold: 5, + // eslint-disable-next-line @typescript-eslint/naming-convention + slo__rules__burnRate: 4, + }, count_rules_namespaces: 33, count_rules_snoozed: 34, - count_rules_snoozed_by_type: {}, + count_rules_snoozed_by_type: { + // eslint-disable-next-line @typescript-eslint/naming-convention + observability__rules__custom_threshold: 2, + // eslint-disable-next-line @typescript-eslint/naming-convention + slo__rules__burnRate: 1, + }, count_rules_with_muted_alerts: 35, count_rules_with_tags: 36, count_rules_with_linked_dashboards: 10, diff --git a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx index 5ac0dd89d7a77..a2da1b70b7fca 100644 --- a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx +++ b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/components/header_actions.tsx @@ -185,7 +185,11 @@ export function HeaderActions({ return ( <> - + } > -
- -
+
diff --git a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/rule_details.tsx b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/rule_details.tsx index 9ab96006f8c37..b13dc4ca05b75 100644 --- a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/rule_details.tsx +++ b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/rule_details.tsx @@ -242,7 +242,7 @@ export function RuleDetailsPage() { }} > - + Date: Fri, 6 Jun 2025 11:25:17 -0400 Subject: [PATCH 11/13] fix typos --- .../observability/public/pages/rule_details/rule_details.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/rule_details.tsx b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/rule_details.tsx index b13dc4ca05b75..0616d50516cc7 100644 --- a/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/rule_details.tsx +++ b/x-pack/solutions/observability/plugins/observability/public/pages/rule_details/rule_details.tsx @@ -242,7 +242,7 @@ export function RuleDetailsPage() { }} > - + Date: Tue, 10 Jun 2025 14:15:01 -0400 Subject: [PATCH 12/13] simplify structure --- .../components/rule_status_dropdown.tsx | 4 ++-- .../components/rules_list_table.tsx | 22 +++++++++---------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx index 27f05487fb6e6..c661da2b2c3fe 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx @@ -33,7 +33,7 @@ const SNOOZE_END_TIME_FORMAT = 'LL @ LT'; type DropdownRuleRecord = Pick< Rule, - 'enabled' | 'muteAll' | 'isSnoozedUntil' | 'snoozeSchedule' | 'activeSnoozes' + 'enabled' | 'muteAll' | 'isSnoozedUntil' | 'snoozeSchedule' | 'activeSnoozes' | 'ruleTypeId' >; export interface ComponentOpts { @@ -223,7 +223,7 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ gutterSize={direction === 'row' ? 's' : 'xs'} responsive={false} > - + {isEditable ? ( { const renderRuleStatusDropdown = useCallback( (rule: RuleTableItem) => { return ( -
- await onEnableRule(rule)} - snoozeRule={async () => {}} - unsnoozeRule={async () => {}} - rule={rule} - onRuleChanged={onRuleChanged} - isEditable={rule.isEditable && isRuleTypeEditableInContext(rule.ruleTypeId)} - /> -
+ await onEnableRule(rule)} + snoozeRule={async () => {}} + unsnoozeRule={async () => {}} + rule={rule} + onRuleChanged={onRuleChanged} + isEditable={rule.isEditable && isRuleTypeEditableInContext(rule.ruleTypeId)} + /> ); }, [isRuleTypeEditableInContext, onDisableRuleInternal, onEnableRule, onRuleChanged] From c2ec57792df3d9b789157ab66cff53ffeefc271c Mon Sep 17 00:00:00 2001 From: Bailey Cash Date: Wed, 11 Jun 2025 10:49:06 -0400 Subject: [PATCH 13/13] fix typing error --- .../sections/rules_list/components/rule_status_dropdown.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx index c661da2b2c3fe..06915244cc4ae 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx @@ -33,8 +33,9 @@ const SNOOZE_END_TIME_FORMAT = 'LL @ LT'; type DropdownRuleRecord = Pick< Rule, - 'enabled' | 'muteAll' | 'isSnoozedUntil' | 'snoozeSchedule' | 'activeSnoozes' | 'ruleTypeId' ->; + 'enabled' | 'muteAll' | 'isSnoozedUntil' | 'snoozeSchedule' | 'activeSnoozes' +> & + Partial>; export interface ComponentOpts { rule: DropdownRuleRecord;