From 4ed9a009094858b6bc0aa842b5a3fc78f80f21b6 Mon Sep 17 00:00:00 2001 From: Andreas Christou Date: Mon, 23 May 2022 16:00:51 +0100 Subject: [PATCH] =?UTF-8?q?AzureMonitor:=20Fixes=20metric=20definition=20f?= =?UTF-8?q?or=20Azure=20Storage=20queue/file/bl=E2=80=A6=20(#49412)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * AzureMonitor: Fixes metric definition for Azure Storage queue/file/blob/table resources. (#49101) * Appropriately set metric definition - Nested storage account resources (queues/blobs/tables/files) require metric definition of Microsoft.Storage/storageAccounts - Update tests accordingly * Restructure getResourceNames test - Add expect on getResource args * Update to fix issue for new query editor - Reconstruct resourceUri if the resource is a storage account - Correctly push storage namespaces as options for metric namespaces - Filter options appropriately * Fix duplicate options * Fix lint issues * Add comment explaining URI modification (cherry picked from commit 34fa7b493cd1a38145f3ca2f0514ac4a10bea497) # Conflicts: # public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.test.ts # public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.ts # public/app/plugins/datasource/grafana-azure-monitor-datasource/components/NewMetricsQueryEditor/dataHooks.ts * Fix lint issue --- .../azure_monitor_datasource.test.ts | 16 ++++++++++++++++ .../azure_monitor/azure_monitor_datasource.ts | 6 ++++-- .../MetricsQueryEditor/MetricNamespaceField.tsx | 6 ++++-- 3 files changed, 24 insertions(+), 4 deletions(-) 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 }); }