Skip to content

Commit

Permalink
Alerting: Fix for data source filter on cloud rules. (#79327)
Browse files Browse the repository at this point in the history
* fix data source filter not worling for cloud rules

* Add test
  • Loading branch information
soniaAguilarPeiron committed Dec 11, 2023
1 parent 12793bf commit e6f2de5
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 7 deletions.
Expand Up @@ -2,7 +2,9 @@ import { setDataSourceSrv } from '@grafana/runtime';

import { PromAlertingRuleState } from '../../../../types/unified-alerting-dto';
import {
getCloudRule,
mockAlertQuery,
mockCombinedCloudRuleNamespace,
mockCombinedRule,
mockCombinedRuleGroup,
mockCombinedRuleNamespace,
Expand Down Expand Up @@ -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', () => {
Expand Down
Expand Up @@ -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;
}
}
Expand Down
17 changes: 14 additions & 3 deletions public/app/features/alerting/unified/mocks.ts
Expand Up @@ -15,16 +15,16 @@ import {
ScopedVars,
TestDataSourceResponse,
} from '@grafana/data';
import { config, DataSourceSrv, GetDataSourceListFilters } from '@grafana/runtime';
import { DataSourceSrv, GetDataSourceListFilters, config } from '@grafana/runtime';
import { defaultDashboard } from '@grafana/schema';
import { contextSrv } from 'app/core/services/context_srv';
import { DatasourceSrv } from 'app/features/plugins/datasource_srv';
import {
AlertmanagerAlert,
AlertManagerCortexConfig,
AlertState,
AlertmanagerAlert,
AlertmanagerGroup,
AlertmanagerStatus,
AlertState,
GrafanaManagedReceiverConfig,
MatcherOperator,
Silence,
Expand Down Expand Up @@ -657,6 +657,17 @@ export function mockCombinedRuleNamespace(namespace: Partial<CombinedRuleNamespa
...namespace,
};
}
export function mockCombinedCloudRuleNamespace(
namespace: Partial<CombinedRuleNamespace>,
dataSourceName: string
): CombinedRuleNamespace {
return {
name: 'Grafana',
groups: [],
rulesSource: mockDataSource({ name: dataSourceName, uid: 'Prometheus-1' }),
...namespace,
};
}

export function getGrafanaRule(override?: Partial<CombinedRule>, rulerOverride?: Partial<GrafanaRuleDefinition>) {
return mockCombinedRule({
Expand Down

0 comments on commit e6f2de5

Please sign in to comment.