AzureMonitor: Fixes metric definition for Azure Storage queue/file/bl… (#49412)
* 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 34fa7b493c)
# 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
This commit is contained in:
+16
@@ -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`
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+4
-2
@@ -197,9 +197,12 @@ export default class AzureMonitorDatasource extends DataSourceWithBackend<AzureM
|
||||
}
|
||||
|
||||
getResourceNames(subscriptionId: string, resourceGroup: string, metricDefinition: string, skipToken?: string) {
|
||||
const validMetricDefinition = startsWith(metricDefinition, 'Microsoft.Storage/storageAccounts/')
|
||||
? 'Microsoft.Storage/storageAccounts'
|
||||
: metricDefinition;
|
||||
let url =
|
||||
`${this.resourcePath}/${subscriptionId}/resourceGroups/${resourceGroup}/resources?` +
|
||||
`$filter=resourceType eq '${metricDefinition}'&` +
|
||||
`$filter=resourceType eq '${validMetricDefinition}'&` +
|
||||
`api-version=${this.listByResourceGroupApiVersion}`;
|
||||
if (skipToken) {
|
||||
url += `&$skiptoken=${skipToken}`;
|
||||
@@ -240,7 +243,6 @@ export default class AzureMonitorDatasource extends DataSourceWithBackend<AzureM
|
||||
resourceName,
|
||||
this.apiPreviewVersion
|
||||
);
|
||||
|
||||
return this.getResource(url).then((result: any) => {
|
||||
return ResponseParser.parseResponseValues(result, 'name', 'properties.metricNamespaceName');
|
||||
});
|
||||
|
||||
+4
-2
@@ -31,9 +31,11 @@ const MetricNamespaceField: React.FC<MetricNamespaceFieldProps> = ({
|
||||
);
|
||||
|
||||
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 });
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user