From 90b802a62d9397c6da371aaff6787088134c4eb8 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Mon, 25 Oct 2021 16:37:50 +0100 Subject: [PATCH] AzureMonitor: Prevent incomplete Logs queries from running (#40512) * AzureMonitor: Prevent incomplete queries from running * fix --- .../azure_log_analytics_datasource.test.ts | 72 ++++++++++++++++++- .../azure_log_analytics_datasource.ts | 4 ++ 2 files changed, 75 insertions(+), 1 deletion(-) 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 befcad9ab45..fd575e113a8 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 @@ -1,7 +1,8 @@ import AzureMonitorDatasource from '../datasource'; +import AzureLogAnalyticsDatasource from './azure_log_analytics_datasource'; import FakeSchemaData from './__mocks__/schema'; import { TemplateSrv } from 'app/features/templating/template_srv'; -import { AzureLogsVariable, DatasourceValidationResult } from '../types'; +import { AzureLogsVariable, AzureMonitorQuery, DatasourceValidationResult } from '../types'; import { toUtc } from '@grafana/data'; const templateSrv = new TemplateSrv(); @@ -376,4 +377,73 @@ describe('AzureLogAnalyticsDatasource', () => { expect(workspace).toEqual('foo'); }); }); + + describe('When performing filterQuery', () => { + const ctx: any = {}; + let laDatasource: AzureLogAnalyticsDatasource; + + beforeEach(() => { + ctx.instanceSettings = { + jsonData: { subscriptionId: 'xxx' }, + url: 'http://azureloganalyticsapi', + }; + + laDatasource = new AzureLogAnalyticsDatasource(ctx.instanceSettings); + }); + + it('should run complete queries', () => { + const query: AzureMonitorQuery = { + refId: 'A', + azureLogAnalytics: { + resource: '/sub/124/rg/cloud/vm/server', + query: 'perf | take 100', + }, + }; + + expect(laDatasource.filterQuery(query)).toBeTruthy(); + }); + + it('should not run empty queries', () => { + const query: AzureMonitorQuery = { + refId: 'A', + }; + + expect(laDatasource.filterQuery(query)).toBeFalsy(); + }); + + it('should not run hidden queries', () => { + const query: AzureMonitorQuery = { + refId: 'A', + hide: true, + azureLogAnalytics: { + resource: '/sub/124/rg/cloud/vm/server', + query: 'perf | take 100', + }, + }; + + expect(laDatasource.filterQuery(query)).toBeFalsy(); + }); + + it('should not run queries missing a kusto query', () => { + const query: AzureMonitorQuery = { + refId: 'A', + azureLogAnalytics: { + resource: '/sub/124/rg/cloud/vm/server', + }, + }; + + expect(laDatasource.filterQuery(query)).toBeFalsy(); + }); + + it('should not run queries missing a resource', () => { + const query: AzureMonitorQuery = { + refId: 'A', + azureLogAnalytics: { + query: 'perf | take 100', + }, + }; + + expect(laDatasource.filterQuery(query)).toBeFalsy(); + }); + }); }); 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 be06ac3e498..97037ea5d3a 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 @@ -59,6 +59,10 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< return !this.validateDatasource(); } + filterQuery(item: AzureMonitorQuery): boolean { + return item.hide !== true && !!item.azureLogAnalytics?.query && !!item.azureLogAnalytics.resource; + } + async getSubscriptions(): Promise> { if (!this.isConfigured()) { return [];