From 2f814bb786ece7bd461af4f96ae1645f5b2a52a6 Mon Sep 17 00:00:00 2001 From: Sonia Aguilar <33540275+soniaAguilarPeiron@users.noreply.github.com> Date: Mon, 11 Dec 2023 21:25:53 +0100 Subject: [PATCH] [v10.2.x] Alerting: Fix for data source filter on cloud rules. (#79327) (#79350) Alerting: Fix for data source filter on cloud rules. (#79327) * fix data source filter not worling for cloud rules * Add test (cherry picked from commit e6f2de51a3e190832c8b2cd4fc4db2b7a2ee917b) (cherry picked from commit b1cb170fa148c7bd8d7fc224dcfaf13392b58343) --- .../unified/hooks/useFilteredRules.test.ts | 14 ++++++++++++-- .../alerting/unified/hooks/useFilteredRules.ts | 8 ++++++-- public/app/features/alerting/unified/mocks.ts | 11 +++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/public/app/features/alerting/unified/hooks/useFilteredRules.test.ts b/public/app/features/alerting/unified/hooks/useFilteredRules.test.ts index 4c249840916..5b2c151e34d 100644 --- a/public/app/features/alerting/unified/hooks/useFilteredRules.test.ts +++ b/public/app/features/alerting/unified/hooks/useFilteredRules.test.ts @@ -2,7 +2,9 @@ import { setDataSourceSrv } from '@grafana/runtime'; import { PromAlertingRuleState } from '../../../../types/unified-alerting-dto'; import { + getCloudRule, mockAlertQuery, + mockCombinedCloudRuleNamespace, mockCombinedRule, mockCombinedRuleGroup, mockCombinedRuleNamespace, @@ -154,16 +156,24 @@ describe('filterRules', function () { data: [mockAlertQuery({ datasourceUid: dataSources.loki.uid })], }), }), + getCloudRule({ name: 'Cloud' }), ]; const ns = mockCombinedRuleNamespace({ groups: [mockCombinedRuleGroup('Resources usage group', rules)], }); + const cloudNs = mockCombinedCloudRuleNamespace( + { + groups: [mockCombinedRuleGroup('Resources usage group', rules)], + }, + 'Prometheus-ds' + ); - const filtered = filterRules([ns], getFilter({ dataSourceNames: ['loki'] })); + const filtered = filterRules([ns, cloudNs], getFilter({ dataSourceNames: ['loki', 'Prometheus-ds'] })); - expect(filtered[0].groups[0].rules).toHaveLength(1); + expect(filtered[0].groups[0].rules).toHaveLength(2); expect(filtered[0].groups[0].rules[0].name).toBe('Memory too low'); + expect(filtered[0].groups[0].rules[1].name).toBe('Cloud'); }); it('should be able to combine multiple predicates with AND', () => { diff --git a/public/app/features/alerting/unified/hooks/useFilteredRules.ts b/public/app/features/alerting/unified/hooks/useFilteredRules.ts index 2b8ef7722d5..e8d7b222b76 100644 --- a/public/app/features/alerting/unified/hooks/useFilteredRules.ts +++ b/public/app/features/alerting/unified/hooks/useFilteredRules.ts @@ -204,9 +204,13 @@ const reduceGroups = (filterState: RulesFilter) => { } if ('dataSourceNames' in matchesFilterFor) { - const doesNotQueryDs = isGrafanaRulerRule(rule.rulerRule) && isQueryingDataSource(rule.rulerRule, filterState); + if (isGrafanaRulerRule(rule.rulerRule)) { + const doesNotQueryDs = isQueryingDataSource(rule.rulerRule, filterState); - if (doesNotQueryDs) { + if (doesNotQueryDs) { + matchesFilterFor.dataSourceNames = true; + } + } else { matchesFilterFor.dataSourceNames = true; } } diff --git a/public/app/features/alerting/unified/mocks.ts b/public/app/features/alerting/unified/mocks.ts index 4831544f40e..a8ff3640567 100644 --- a/public/app/features/alerting/unified/mocks.ts +++ b/public/app/features/alerting/unified/mocks.ts @@ -657,6 +657,17 @@ export function mockCombinedRuleNamespace(namespace: Partial, + dataSourceName: string +): CombinedRuleNamespace { + return { + name: 'Grafana', + groups: [], + rulesSource: mockDataSource({ name: dataSourceName, uid: 'Prometheus-1' }), + ...namespace, + }; +} export function getGrafanaRule(override?: Partial, rulerOverride?: Partial) { return mockCombinedRule({