From 317ef1de86bc0d86975e15180067e99fce0e508c Mon Sep 17 00:00:00 2001 From: Andres Martinez Gotor Date: Fri, 27 Jan 2023 16:29:05 +0100 Subject: [PATCH] Azure Monitor: Add variable function to list regions (#62297) --- .../__mocks__/query.ts | 1 + .../azure_monitor_datasource.test.ts | 24 +++++++++++++++++++ .../azure_monitor/azure_monitor_datasource.ts | 1 + .../VariableEditor/VariableEditor.test.tsx | 16 +++++++++++++ .../VariableEditor/VariableEditor.tsx | 4 ++++ .../types/query.ts | 1 + .../variables.ts | 11 +++++++++ 7 files changed, 58 insertions(+) diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/__mocks__/query.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/__mocks__/query.ts index 4b8d43f11a8..8cf4faa3f7b 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/__mocks__/query.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/__mocks__/query.ts @@ -41,6 +41,7 @@ export default function createMockQuery(overrides?: Partial): alias: '', // timeGrains: [], top: '10', + region: '', ...overrides?.azureMonitor, }, }; 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 26275e04e74..8d5cdf15074 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 @@ -159,6 +159,30 @@ describe('AzureMonitorDatasource', () => { }, }); }); + + it('expand template variables for a region', () => { + const region = '$reg'; + templateSrv.init([ + { + id: 'reg', + name: 'reg', + current: { + value: `eastus`, + }, + }, + ]); + const query = createMockQuery({ + azureMonitor: { + region, + }, + }); + const templatedQuery = ctx.ds.azureMonitorDatasource.applyTemplateVariables(query, {}); + expect(templatedQuery).toMatchObject({ + azureMonitor: { + region: 'eastus', + }, + }); + }); }); describe('When performing getMetricNamespaces', () => { 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 4a30a99c961..84d8b3bebf9 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 @@ -125,6 +125,7 @@ export default class AzureMonitorDatasource extends DataSourceWithBackend { }) ); }); + + it('should run the query if requesting regions', async () => { + const onChange = jest.fn(); + const { rerender } = render(); + // wait for initial load + await waitFor(() => expect(screen.getByText('Logs')).toBeInTheDocument()); + await selectAndRerender('select query type', 'Regions', onChange, rerender); + await selectAndRerender('select subscription', 'Primary Subscription', onChange, rerender); + expect(onChange).toHaveBeenCalledWith( + expect.objectContaining({ + queryType: AzureQueryType.LocationsQuery, + subscription: 'sub', + refId: 'A', + }) + ); + }); }); }); diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/VariableEditor/VariableEditor.tsx b/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/VariableEditor/VariableEditor.tsx index 3b5feed71d0..44c77300584 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/VariableEditor/VariableEditor.tsx +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/VariableEditor/VariableEditor.tsx @@ -30,6 +30,7 @@ const VariableEditor = (props: Props) => { { label: 'Subscriptions', value: AzureQueryType.SubscriptionsQuery }, { label: 'Resource Groups', value: AzureQueryType.ResourceGroupsQuery }, { label: 'Namespaces', value: AzureQueryType.NamespacesQuery }, + { label: 'Regions', value: AzureQueryType.LocationsQuery }, { label: 'Resource Names', value: AzureQueryType.ResourceNamesQuery }, { label: 'Metric Names', value: AzureQueryType.MetricNamesQuery }, { label: 'Workspaces', value: AzureQueryType.WorkspacesQuery }, @@ -93,6 +94,9 @@ const VariableEditor = (props: Props) => { setRequireNamespace(true); setRequireResource(true); break; + case AzureQueryType.LocationsQuery: + setRequireSubscription(true); + break; } }, [queryType]); diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/types/query.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/types/query.ts index 316091d5aa6..d0bd3547b77 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/types/query.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/types/query.ts @@ -12,6 +12,7 @@ export enum AzureQueryType { ResourceNamesQuery = 'Azure Resource Names', MetricNamesQuery = 'Azure Metric Names', WorkspacesQuery = 'Azure Workspaces', + LocationsQuery = 'Azure Locations', /** Deprecated */ GrafanaTemplateVariableFn = 'Grafana Template Variable Function', } diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/variables.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/variables.ts index 0fad891a40a..6acec60c9f8 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/variables.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/variables.ts @@ -108,6 +108,17 @@ export class VariableSupport extends CustomVariableSupport = []; + locationMap.forEach((loc) => { + res.push({ text: loc.displayName, value: loc.name }); + }); + return { + data: res?.length ? [toDataFrame(res)] : [], + }; + } default: request.targets[0] = queryObj; const queryResp = await lastValueFrom(this.datasource.query(request));