mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Azure Monitor: Fix resource picker selection for subresources (#56392)
This commit is contained in:
parent
3bea8f2462
commit
5b1ff83ee9
@ -6,16 +6,16 @@ import { findRow, parseResourceURI, setResource } from './utils';
|
|||||||
describe('AzureMonitor ResourcePicker utils', () => {
|
describe('AzureMonitor ResourcePicker utils', () => {
|
||||||
describe('parseResourceURI', () => {
|
describe('parseResourceURI', () => {
|
||||||
it('should parse subscription URIs', () => {
|
it('should parse subscription URIs', () => {
|
||||||
expect(parseResourceURI('/subscriptions/44693801-6ee6-49de-9b2d-9106972f9572')).toEqual({
|
expect(parseResourceURI('/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee')).toEqual({
|
||||||
subscription: '44693801-6ee6-49de-9b2d-9106972f9572',
|
subscription: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should parse resource group URIs', () => {
|
it('should parse resource group URIs', () => {
|
||||||
expect(
|
expect(
|
||||||
parseResourceURI('/subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources')
|
parseResourceURI('/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources')
|
||||||
).toEqual({
|
).toEqual({
|
||||||
subscription: '44693801-6ee6-49de-9b2d-9106972f9572',
|
subscription: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
|
||||||
resourceGroup: 'cloud-datasources',
|
resourceGroup: 'cloud-datasources',
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -23,10 +23,10 @@ describe('AzureMonitor ResourcePicker utils', () => {
|
|||||||
it('should parse resource URIs', () => {
|
it('should parse resource URIs', () => {
|
||||||
expect(
|
expect(
|
||||||
parseResourceURI(
|
parseResourceURI(
|
||||||
'/subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources/providers/Microsoft.Compute/virtualMachines/GithubTestDataVM'
|
'/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources/providers/Microsoft.Compute/virtualMachines/GithubTestDataVM'
|
||||||
)
|
)
|
||||||
).toEqual({
|
).toEqual({
|
||||||
subscription: '44693801-6ee6-49de-9b2d-9106972f9572',
|
subscription: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
|
||||||
resourceGroup: 'cloud-datasources',
|
resourceGroup: 'cloud-datasources',
|
||||||
metricNamespace: 'Microsoft.Compute/virtualMachines',
|
metricNamespace: 'Microsoft.Compute/virtualMachines',
|
||||||
resourceName: 'GithubTestDataVM',
|
resourceName: 'GithubTestDataVM',
|
||||||
@ -36,10 +36,10 @@ describe('AzureMonitor ResourcePicker utils', () => {
|
|||||||
it('should parse resource URIs with a subresource', () => {
|
it('should parse resource URIs with a subresource', () => {
|
||||||
expect(
|
expect(
|
||||||
parseResourceURI(
|
parseResourceURI(
|
||||||
'/subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources/providers/Microsoft.Storage/storageAccounts/csb100320016c43d2d0/fileServices/default'
|
'/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources/providers/Microsoft.Storage/storageAccounts/csb100320016c43d2d0/fileServices/default'
|
||||||
)
|
)
|
||||||
).toEqual({
|
).toEqual({
|
||||||
subscription: '44693801-6ee6-49de-9b2d-9106972f9572',
|
subscription: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
|
||||||
resourceGroup: 'cloud-datasources',
|
resourceGroup: 'cloud-datasources',
|
||||||
metricNamespace: 'Microsoft.Storage/storageAccounts/fileServices',
|
metricNamespace: 'Microsoft.Storage/storageAccounts/fileServices',
|
||||||
resourceName: 'csb100320016c43d2d0/default',
|
resourceName: 'csb100320016c43d2d0/default',
|
||||||
@ -47,30 +47,30 @@ describe('AzureMonitor ResourcePicker utils', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('returns undefined for invalid input', () => {
|
it('returns undefined for invalid input', () => {
|
||||||
expect(parseResourceURI('44693801-6ee6-49de-9b2d-9106972f9572')).toEqual({});
|
expect(parseResourceURI('aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee')).toEqual({});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns a valid response with a missing element in the metric namespace and name', () => {
|
it('returns a valid response with a missing element in the metric namespace and name', () => {
|
||||||
expect(
|
expect(
|
||||||
parseResourceURI(
|
parseResourceURI(
|
||||||
'/subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources/providers/foo'
|
'/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources/providers/foo'
|
||||||
)
|
)
|
||||||
).toEqual({
|
).toEqual({
|
||||||
metricNamespace: 'foo',
|
metricNamespace: 'foo',
|
||||||
resourceGroup: 'cloud-datasources',
|
resourceGroup: 'cloud-datasources',
|
||||||
resourceName: '',
|
resourceName: '',
|
||||||
subscription: '44693801-6ee6-49de-9b2d-9106972f9572',
|
subscription: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
parseResourceURI(
|
parseResourceURI(
|
||||||
'/subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources/providers/foo/bar'
|
'/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources/providers/foo/bar'
|
||||||
)
|
)
|
||||||
).toEqual({
|
).toEqual({
|
||||||
metricNamespace: 'foo/bar',
|
metricNamespace: 'foo/bar',
|
||||||
resourceGroup: 'cloud-datasources',
|
resourceGroup: 'cloud-datasources',
|
||||||
resourceName: '',
|
resourceName: '',
|
||||||
subscription: '44693801-6ee6-49de-9b2d-9106972f9572',
|
subscription: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -87,7 +87,7 @@ describe('AzureMonitor ResourcePicker utils', () => {
|
|||||||
const rows: ResourceRowGroup = [
|
const rows: ResourceRowGroup = [
|
||||||
{
|
{
|
||||||
id: '',
|
id: '',
|
||||||
uri: '/subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources/providers/Microsoft.Storage/storageAccounts/csb100320016c43d2d0',
|
uri: '/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources/providers/Microsoft.Storage/storageAccounts/csb100320016c43d2d0',
|
||||||
name: '',
|
name: '',
|
||||||
type: ResourceRowType.Resource,
|
type: ResourceRowType.Resource,
|
||||||
typeLabel: '',
|
typeLabel: '',
|
||||||
@ -96,7 +96,7 @@ describe('AzureMonitor ResourcePicker utils', () => {
|
|||||||
expect(
|
expect(
|
||||||
findRow(
|
findRow(
|
||||||
rows,
|
rows,
|
||||||
'/subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources/providers/Microsoft.Storage/storageAccounts/csb100320016c43d2d0/fileServices/default'
|
'/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources/providers/Microsoft.Storage/storageAccounts/csb100320016c43d2d0/fileServices/default'
|
||||||
)
|
)
|
||||||
).toEqual(rows[0]);
|
).toEqual(rows[0]);
|
||||||
});
|
});
|
||||||
@ -105,7 +105,7 @@ describe('AzureMonitor ResourcePicker utils', () => {
|
|||||||
const rows: ResourceRowGroup = [
|
const rows: ResourceRowGroup = [
|
||||||
{
|
{
|
||||||
id: '',
|
id: '',
|
||||||
uri: '/subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources/providers/microsoft.storage/storageaccounts/csb100320016c43d2d0',
|
uri: '/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources/providers/microsoft.storage/storageaccounts/csb100320016c43d2d0',
|
||||||
name: '',
|
name: '',
|
||||||
type: ResourceRowType.Resource,
|
type: ResourceRowType.Resource,
|
||||||
typeLabel: '',
|
typeLabel: '',
|
||||||
@ -114,7 +114,7 @@ describe('AzureMonitor ResourcePicker utils', () => {
|
|||||||
expect(
|
expect(
|
||||||
findRow(
|
findRow(
|
||||||
rows,
|
rows,
|
||||||
'/subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources/providers/Microsoft.Storage/storageAccounts/csb100320016c43d2d0'
|
'/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources/providers/Microsoft.Storage/storageAccounts/csb100320016c43d2d0'
|
||||||
)
|
)
|
||||||
).toEqual(rows[0]);
|
).toEqual(rows[0]);
|
||||||
});
|
});
|
||||||
@ -123,7 +123,7 @@ describe('AzureMonitor ResourcePicker utils', () => {
|
|||||||
const rows: ResourceRowGroup = [
|
const rows: ResourceRowGroup = [
|
||||||
{
|
{
|
||||||
id: '',
|
id: '',
|
||||||
uri: '/subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/CLOUD-DATASOURCES/providers/microsoft.storage/storageaccounts/csb100320016c43d2d0',
|
uri: '/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/CLOUD-DATASOURCES/providers/microsoft.storage/storageaccounts/csb100320016c43d2d0',
|
||||||
name: '',
|
name: '',
|
||||||
type: ResourceRowType.Resource,
|
type: ResourceRowType.Resource,
|
||||||
typeLabel: '',
|
typeLabel: '',
|
||||||
@ -132,10 +132,35 @@ describe('AzureMonitor ResourcePicker utils', () => {
|
|||||||
expect(
|
expect(
|
||||||
findRow(
|
findRow(
|
||||||
rows,
|
rows,
|
||||||
'/subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources/providers/Microsoft.Storage/storageAccounts/csb100320016c43d2d0'
|
'/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources/providers/Microsoft.Storage/storageAccounts/csb100320016c43d2d0'
|
||||||
)
|
)
|
||||||
).toEqual(rows[0]);
|
).toEqual(rows[0]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should find a row matching the right subresource', () => {
|
||||||
|
const rows: ResourceRowGroup = [
|
||||||
|
{
|
||||||
|
id: '',
|
||||||
|
uri: '/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources/providers/Microsoft.Sql/servers/foo',
|
||||||
|
name: '',
|
||||||
|
type: ResourceRowType.Resource,
|
||||||
|
typeLabel: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '',
|
||||||
|
uri: '/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources/providers/Microsoft.Sql/servers/foo/databases/bar',
|
||||||
|
name: '',
|
||||||
|
type: ResourceRowType.Resource,
|
||||||
|
typeLabel: '',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
expect(
|
||||||
|
findRow(
|
||||||
|
rows,
|
||||||
|
'/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/cloud-datasources/providers/Microsoft.Sql/servers/foo/databases/bar'
|
||||||
|
)
|
||||||
|
).toEqual(rows[1]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('setResource', () => {
|
describe('setResource', () => {
|
||||||
|
@ -62,6 +62,22 @@ export function isGUIDish(input: string) {
|
|||||||
return !!input.match(/^[A-Z0-9]+/i);
|
return !!input.match(/^[A-Z0-9]+/i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function compareNamespaceAndName(
|
||||||
|
rowNamespace?: string,
|
||||||
|
rowName?: string,
|
||||||
|
resourceNamespace?: string,
|
||||||
|
resourceName?: string
|
||||||
|
) {
|
||||||
|
// StorageAccounts subresources are not listed independently
|
||||||
|
if (resourceNamespace?.startsWith('microsoft.storage/storageaccounts')) {
|
||||||
|
resourceNamespace = 'microsoft.storage/storageaccounts';
|
||||||
|
if (resourceName?.endsWith('/default')) {
|
||||||
|
resourceName = resourceName.slice(0, -'/default'.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rowNamespace === resourceNamespace && rowName === resourceName;
|
||||||
|
}
|
||||||
|
|
||||||
function matchURI(rowURI: string, resourceURI: string) {
|
function matchURI(rowURI: string, resourceURI: string) {
|
||||||
const targetParams = parseResourceDetails(resourceURI);
|
const targetParams = parseResourceDetails(resourceURI);
|
||||||
const rowParams = parseResourceDetails(rowURI);
|
const rowParams = parseResourceDetails(rowURI);
|
||||||
@ -69,11 +85,12 @@ function matchURI(rowURI: string, resourceURI: string) {
|
|||||||
return (
|
return (
|
||||||
rowParams?.subscription === targetParams?.subscription &&
|
rowParams?.subscription === targetParams?.subscription &&
|
||||||
rowParams?.resourceGroup?.toLowerCase() === targetParams?.resourceGroup?.toLowerCase() &&
|
rowParams?.resourceGroup?.toLowerCase() === targetParams?.resourceGroup?.toLowerCase() &&
|
||||||
// metricNamespace may include a subresource that we don't need to compare
|
compareNamespaceAndName(
|
||||||
rowParams?.metricNamespace?.toLowerCase().split('/')[0] ===
|
rowParams?.metricNamespace?.toLowerCase(),
|
||||||
targetParams?.metricNamespace?.toLowerCase().split('/')[0] &&
|
rowParams?.resourceName,
|
||||||
// resourceName may include a subresource that we don't need to compare
|
targetParams?.metricNamespace?.toLowerCase(),
|
||||||
rowParams?.resourceName?.split('/')[0] === targetParams?.resourceName?.split('/')[0]
|
targetParams?.resourceName
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user