diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.test.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.test.ts index 429310f8482..81dc2586e4e 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.test.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.test.ts @@ -235,6 +235,30 @@ describe('AzureLogAnalyticsDatasource', () => { expect(results[1].value).toBe('Policy'); }); }); + + describe('and contain options', () => { + const queryResponse = { + tables: [], + }; + + it('should substitute macros', async () => { + ctx.ds.azureLogAnalyticsDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const params = new URLSearchParams(path.split('?')[1]); + const query = params.get('query'); + expect(query).toEqual( + 'Perf| where TimeGenerated >= datetime(2021-01-01T05:01:00.000Z) and TimeGenerated <= datetime(2021-01-01T05:02:00.000Z)' + ); + return Promise.resolve(queryResponse); + }); + ctx.ds.azureLogAnalyticsDatasource.defaultOrFirstWorkspace = 'foo'; + await ctx.ds.metricFindQuery('Perf| where TimeGenerated >= $__timeFrom() and TimeGenerated <= $__timeTo()', { + range: { + from: new Date('2021-01-01 00:01:00'), + to: new Date('2021-01-01 00:02:00'), + }, + }); + }); + }); }); describe('When performing annotationQuery', () => { diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.ts index 82bdc9c6f64..7273429e724 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.ts @@ -220,7 +220,7 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< * And some of the azure internal data sources return null in this function, which the * external interface does not support */ - metricFindQueryInternal(query: string): Promise { + metricFindQueryInternal(query: string, optionalOptions?: unknown): Promise { // workspaces() - Get workspaces in the default subscription const workspacesQuery = query.match(/^workspaces\(\)/i); if (workspacesQuery) { @@ -245,7 +245,7 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< return []; } - const queries = this.buildQuery(query, null, resourceURI); + const queries = this.buildQuery(query, optionalOptions, resourceURI); const promises = this.doQueries(queries); return Promise.all(promises) diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/datasource.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/datasource.ts index 191f354bc4c..df9e3ee3a7d 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/datasource.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/datasource.ts @@ -136,7 +136,7 @@ export default class Datasource extends DataSourceApi { expect(query).toContain(`%24__escapeMulti(%5Cgrafana-vm%2CNetwork(eth0)Total%20Bytes%20Received)`); }); }); + + describe('when there is no raw range', () => { + it('should still generate a time filter condition', () => { + builder = new LogAnalyticsQuerystringBuilder( + 'query=Tablename | where $__timeFilter()', + { + interval: '5m', + range: { + from: dateTime().subtract(24, 'hours'), + to: dateTime(), + }, + }, + 'TimeGenerated' + ); + const query = builder.generate().uriString; + + expect(query).toContain('where%20TimeGenerated%20%20%3E%3D%20datetime('); + }); + }); }); diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/log_analytics/querystring_builder.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/log_analytics/querystring_builder.ts index 0d2824831dc..e20011f5481 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/log_analytics/querystring_builder.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/log_analytics/querystring_builder.ts @@ -45,7 +45,7 @@ export default class LogAnalyticsQuerystringBuilder { } getUntil(options: any) { - if (options.rangeRaw.to === 'now') { + if (options.rangeRaw?.to === 'now') { const now = Date.now(); return `datetime(${dateTime(now).startOf('minute').toISOString()})`; } else { @@ -56,7 +56,7 @@ export default class LogAnalyticsQuerystringBuilder { getTimeFilter(timeFieldArg: any, options: any) { const timeField = timeFieldArg || this.defaultTimeField; - if (options.rangeRaw.to === 'now') { + if (options.rangeRaw?.to === 'now') { return `${timeField} >= ${this.getFrom(options)}`; } else { return `${timeField} >= ${this.getFrom(options)} and ${timeField} <= ${this.getUntil(options)}`;