Skip to content

Commit 7430c74

Browse files
authored
{monitor} fix dynamic metric alert creation with a single scope (Azure#16225)
* fix dynamic metric alert creation with a single scope * fix style issues
1 parent 57a0b81 commit 7430c74

12 files changed

+2733
-3553
lines changed

.ionide/symbolCache.db

8 KB
Binary file not shown.

src/azure-cli/azure/cli/command_modules/monitor/operations/metric_alert.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# Copyright (c) Microsoft Corporation. All rights reserved.
33
# Licensed under the MIT License. See License.txt in the project root for license information.
44
# --------------------------------------------------------------------------------------------
5+
# pylint: disable=too-many-locals
56

67
from azure.cli.command_modules.monitor.util import get_operator_map, get_aggregation_map
78
from knack.log import get_logger
@@ -16,7 +17,8 @@ def create_metric_alert(client, resource_group_name, rule_name, scopes, conditio
1617
auto_mitigate=None, target_resource_type=None, target_resource_region=None):
1718
from azure.mgmt.monitor.models import (MetricAlertResource,
1819
MetricAlertSingleResourceMultipleMetricCriteria,
19-
MetricAlertMultipleResourceMultipleMetricCriteria)
20+
MetricAlertMultipleResourceMultipleMetricCriteria,
21+
MetricCriteria)
2022
from azure.cli.core import CLIError
2123
# generate names for the conditions
2224
for i, cond in enumerate(condition):
@@ -28,7 +30,7 @@ def create_metric_alert(client, resource_group_name, rule_name, scopes, conditio
2830
raise CLIError('--target-resource-type and --target-resource-region must be provided.')
2931
criteria = MetricAlertMultipleResourceMultipleMetricCriteria(all_of=condition)
3032
else:
31-
if len(scopes) == 1:
33+
if len(scopes) == 1 and isinstance(condition, MetricCriteria):
3234
criteria = MetricAlertSingleResourceMultipleMetricCriteria(all_of=condition)
3335
else:
3436
criteria = MetricAlertMultipleResourceMultipleMetricCriteria(all_of=condition)

src/azure-cli/azure/cli/command_modules/monitor/tests/latest/recordings/test_dynamic_metric_alert_basic.yaml

+777
Large diffs are not rendered by default.

src/azure-cli/azure/cli/command_modules/monitor/tests/latest/recordings/test_dynamic_metric_alert_multiple_scopes.yaml

+392-326
Large diffs are not rendered by default.

src/azure-cli/azure/cli/command_modules/monitor/tests/latest/recordings/test_metric_alert_basic_scenarios.yaml

-1,612
This file was deleted.

src/azure-cli/azure/cli/command_modules/monitor/tests/latest/recordings/test_metric_alert_condition_create.yaml

+344-135
Large diffs are not rendered by default.

src/azure-cli/azure/cli/command_modules/monitor/tests/latest/recordings/test_metric_alert_for_rg_and_sub.yaml

+373-438
Large diffs are not rendered by default.

src/azure-cli/azure/cli/command_modules/monitor/tests/latest/recordings/test_metric_alert_multiple_scopes.yaml

+282-297
Large diffs are not rendered by default.

src/azure-cli/azure/cli/command_modules/monitor/tests/latest/recordings/test_metric_alert_special_char_scenario.yaml

+183-398
Large diffs are not rendered by default.

src/azure-cli/azure/cli/command_modules/monitor/tests/latest/recordings/test_metric_alert_v2_scenario.yaml

+303-284
Large diffs are not rendered by default.

src/azure-cli/azure/cli/command_modules/monitor/tests/latest/recordings/test_metrics_alert_metric_name_with_special_characters.yaml

+39-61
Large diffs are not rendered by default.

src/azure-cli/azure/cli/command_modules/monitor/tests/latest/test_monitor_metric_alert_scenarios.py

+36
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,42 @@ def test_metric_alert_multiple_scopes(self, resource_group, vm1, vm2):
265265
self.check('length(scopes)', 2),
266266
])
267267

268+
@ResourceGroupPreparer(name_prefix='cli_test_dynamic_metric_alert')
269+
@VMPreparer(parameter_name='vm1')
270+
def test_dynamic_metric_alert_basic(self, resource_group, vm1):
271+
from azure.mgmt.core.tools import resource_id
272+
self.kwargs.update({
273+
'alert': 'alert1',
274+
'plan': 'plan1',
275+
'app': self.create_random_name('app', 15),
276+
'ag1': 'ag1',
277+
'webhooks': '{{test=banoodle}}',
278+
'sub': self.get_subscription_id(),
279+
'vm_id': resource_id(
280+
resource_group=resource_group,
281+
subscription=self.get_subscription_id(),
282+
name=vm1,
283+
namespace='Microsoft.Compute',
284+
type='virtualMachines'),
285+
})
286+
self.cmd('monitor action-group create -g {rg} -n {ag1}')
287+
self.cmd(
288+
'monitor metrics alert create -g {rg} -n {alert} --scopes {vm_id} --action {ag1} --condition "avg Percentage CPU > dynamic low 2 of 4 since 2020-11-01T16:00:00.000Z" --description "High CPU"',
289+
checks=[
290+
self.check('description', 'High CPU'),
291+
self.check('severity', 2),
292+
self.check('autoMitigate', None),
293+
self.check('windowSize', '0:05:00'),
294+
self.check('evaluationFrequency', '0:01:00'),
295+
self.check('length(scopes)', 1),
296+
self.check('criteria.allOf[0].alertSensitivity', 'Low'),
297+
self.check('criteria.allOf[0].criterionType', 'DynamicThresholdCriterion'),
298+
self.check('criteria.allOf[0].failingPeriods.minFailingPeriodsToAlert', 2.0),
299+
self.check('criteria.allOf[0].failingPeriods.numberOfEvaluationPeriods', 4.0),
300+
self.check('criteria.allOf[0].operator', 'GreaterThan'),
301+
self.check('criteria.allOf[0].ignoreDataBefore', '2020-11-01T16:00:00+00:00')
302+
])
303+
268304
@ResourceGroupPreparer(name_prefix='cli_test_dynamic_metric_alert_v2')
269305
@VMPreparer(parameter_name='vm1')
270306
@VMPreparer(parameter_name='vm2')

0 commit comments

Comments
 (0)