diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.test.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.test.ts index 8236bb81437..0aedf197d37 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.test.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.test.ts @@ -1,3 +1,5 @@ +import { startsWith } from 'lodash'; + import { DataSourceInstanceSettings } from '@grafana/data'; import { TemplateSrv } from 'app/features/templating/template_srv'; @@ -275,12 +277,26 @@ describe('AzureMonitorDatasource', () => { it('should return list of Resource Names', () => { metricDefinition = 'Microsoft.Storage/storageAccounts/blobServices'; + const validMetricDefinition = startsWith(metricDefinition, 'Microsoft.Storage/storageAccounts/') + ? 'Microsoft.Storage/storageAccounts' + : metricDefinition; + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = `azuremonitor/subscriptions/${subscription}/resourceGroups`; + expect(path).toBe( + basePath + + `/${resourceGroup}/resources?$filter=resourceType eq '${validMetricDefinition}'&api-version=2021-04-01` + ); + return Promise.resolve(response); + }); return ctx.ds .getResourceNames(subscription, resourceGroup, metricDefinition) .then((results: Array<{ text: string; value: string }>) => { expect(results.length).toEqual(1); expect(results[0].text).toEqual('storagetest/default'); expect(results[0].value).toEqual('storagetest/default'); + expect(ctx.ds.azureMonitorDatasource.getResource).toHaveBeenCalledWith( + `azuremonitor/subscriptions/${subscription}/resourceGroups/${resourceGroup}/resources?$filter=resourceType eq '${validMetricDefinition}'&api-version=2021-04-01` + ); }); }); }); diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.ts index 1e4e91f0468..53433c391d4 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.ts @@ -197,9 +197,12 @@ export default class AzureMonitorDatasource extends DataSourceWithBackend { return ResponseParser.parseResponseValues(result, 'name', 'properties.metricNamespaceName'); }); diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/MetricNamespaceField.tsx b/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/MetricNamespaceField.tsx index 8dff6139894..0f78776aad2 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/MetricNamespaceField.tsx +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/MetricsQueryEditor/MetricNamespaceField.tsx @@ -31,9 +31,11 @@ const MetricNamespaceField: React.FC = ({ ); const options = useMemo(() => [...metricNamespaces, variableOptionGroup], [metricNamespaces, variableOptionGroup]); - const optionValues = metricNamespaces.map((m) => m.value).concat(variableOptionGroup.options.map((p) => p.value)); + const optionValues = metricNamespaces + .map((m) => m.value.toLowerCase()) + .concat(variableOptionGroup.options.map((p) => p.value)); const value = query.azureMonitor?.metricNamespace; - if (value && !optionValues.includes(value)) { + if (value && !optionValues.includes(value.toLowerCase())) { options.push({ label: value, value }); }