diff --git a/public/app/features/alerting/unified/PanelAlertTabContent.test.tsx b/public/app/features/alerting/unified/PanelAlertTabContent.test.tsx index e025183896a..7b99964a5c9 100644 --- a/public/app/features/alerting/unified/PanelAlertTabContent.test.tsx +++ b/public/app/features/alerting/unified/PanelAlertTabContent.test.tsx @@ -34,9 +34,16 @@ const dataSources = { prometheus: mockDataSource({ name: 'Prometheus', type: DataSourceType.Prometheus, + isDefault: false, + }), + default: mockDataSource({ + name: 'Default', + type: DataSourceType.Prometheus, + isDefault: true, }), }; dataSources.prometheus.meta.alerting = true; +dataSources.default.meta.alerting = true; const mocks = { getAllDataSources: typeAsJestMock(getAllDataSources), @@ -165,6 +172,10 @@ describe('PanelAlertTabContent', () => { dsService.datasources[dataSources.prometheus.name] = new PrometheusDatasource( dataSources.prometheus ) as DataSourceApi; + dsService.datasources[dataSources.default.name] = new PrometheusDatasource(dataSources.default) as DataSourceApi< + any, + any + >; setDataSourceSrv(dsService); }); @@ -189,6 +200,28 @@ describe('PanelAlertTabContent', () => { }); }); + it('Will work with default datasource', async () => { + await renderAlertTabContent(dashboard, ({ + ...panel, + datasource: undefined, + maxDataPoints: 100, + interval: '10s', + } as any) as PanelModel); + const button = await ui.createButton.find(); + const href = button.href; + const match = href.match(/alerting\/new\?defaults=(.*)&returnTo=/); + expect(match).toHaveLength(2); + const defaults = JSON.parse(decodeURIComponent(match![1])); + expect(defaults.queries[0].model).toEqual({ + expr: 'sum(some_metric [5m])) by (app)', + refId: 'A', + datasource: 'Default', + interval: '', + intervalMs: 300000, + maxDataPoints: 100, + }); + }); + it('Will take into account datasource minInterval', async () => { ((getDatasourceSrv() as any) as MockDataSourceSrv).datasources[dataSources.prometheus.name].interval = '7m'; diff --git a/public/app/features/alerting/unified/utils/rule-form.ts b/public/app/features/alerting/unified/utils/rule-form.ts index 58dd949d139..7bce2decc79 100644 --- a/public/app/features/alerting/unified/utils/rule-form.ts +++ b/public/app/features/alerting/unified/utils/rule-form.ts @@ -229,8 +229,8 @@ const dataQueriesToGrafanaQueries = async ( ): Promise => { const result: AlertQuery[] = []; for (const target of queries) { - const dsName = target.datasource || datasourceName; - const datasource = await getDataSourceSrv().get(dsName); + const datasource = await getDataSourceSrv().get(target.datasource || datasourceName); + const dsName = datasource.name; const range = rangeUtil.relativeToTimeRange(relativeTimeRange); const { interval, intervalMs } = getIntervals(range, minInterval ?? datasource.interval, maxDataPoints);