|
16 | 16 | using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
|
17 | 17 | using Microsoft.Azure.Management.Monitor;
|
18 | 18 | using Microsoft.Azure.Management.Monitor.Models;
|
19 |
| -using Microsoft.Azure.Management.Monitor.Management.Models; |
20 | 19 | using System;
|
21 | 20 | using System.Collections.Generic;
|
22 | 21 | using System.Linq;
|
@@ -80,15 +79,13 @@ public class AddAzureRmMetricAlertRuleV2Command : ManagementCmdletBase
|
80 | 79 | /// <summary>
|
81 | 80 | /// Gets or sets the TargetResourceType parameter
|
82 | 81 | /// </summary>
|
83 |
| - [Parameter(ParameterSetName = CreateAlertByScopes, Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The target resource type for rule")] |
84 |
| - [ValidateNotNullOrEmpty] |
| 82 | + [Parameter(ParameterSetName = CreateAlertByScopes, ValueFromPipelineByPropertyName = true, HelpMessage = "The target resource type for rule")] |
85 | 83 | public string TargetResourceType { get; set; }
|
86 | 84 |
|
87 | 85 | /// <summary>
|
88 | 86 | /// Gets or sets the TargetResourceRegion parameter
|
89 | 87 | /// </summary>
|
90 |
| - [Parameter(ParameterSetName = CreateAlertByScopes, Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The target resource region for rule")] |
91 |
| - [ValidateNotNullOrEmpty] |
| 88 | + [Parameter(ParameterSetName = CreateAlertByScopes, ValueFromPipelineByPropertyName = true, HelpMessage = "The target resource region for rule")] |
92 | 89 | public string TargetResourceRegion { get; set; }
|
93 | 90 |
|
94 | 91 | /// <summary>
|
@@ -159,42 +156,64 @@ protected override void ProcessRecordInternal()
|
159 | 156 | }
|
160 | 157 |
|
161 | 158 | IDictionary<string, string> tags = null;
|
162 |
| - if (this.TargetResourceScope == null)//Single Resource Metric Alert Rule |
| 159 | + if (this.Condition.Any(c => c.CriterionType == CriterionType.WebtestLocationAvailabilityCriterion)) |
163 | 160 | {
|
164 |
| - var scopes = new List<string> {this.TargetResourceId}; |
165 |
| - |
| 161 | + var scopes = this.TargetResourceScope?.ToList<string>() ?? new List<string> { this.TargetResourceId }; |
166 | 162 | MetricAlertCriteria criteria;
|
167 |
| - |
168 |
| - if (this.Condition.Any(c => c.CriterionType == CriterionType.WebtestLocationAvailabilityCriterion)) |
| 163 | + if (this.Condition.Count > 1) |
169 | 164 | {
|
170 |
| - if (this.Condition.Count > 1) |
171 |
| - { |
172 |
| - throw new ArgumentException("Only single Webtest location availability criterion is supported"); |
173 |
| - } |
| 165 | + throw new ArgumentException("Only single Webtest location availability criterion is supported"); |
| 166 | + } |
174 | 167 |
|
175 |
| - var psWebtestCriteria = this.Condition.First() as PSWebtestLocationAvailabilityCriteria ; |
| 168 | + var psWebtestCriteria = this.Condition.First() as PSWebtestLocationAvailabilityCriteria; |
176 | 169 |
|
177 |
| - criteria = new WebtestLocationAvailabilityCriteria(psWebtestCriteria.WebTestId, psWebtestCriteria.ComponentId, psWebtestCriteria.FailedLocationCount); |
| 170 | + criteria = new WebtestLocationAvailabilityCriteria(psWebtestCriteria.WebTestId, psWebtestCriteria.ComponentId, psWebtestCriteria.FailedLocationCount); |
| 171 | + if (!scopes.Contains(psWebtestCriteria.ComponentId)) |
| 172 | + { |
178 | 173 | scopes.Add(psWebtestCriteria.ComponentId);
|
| 174 | + } |
179 | 175 |
|
180 |
| - tags = new Dictionary<string, string>() |
| 176 | + tags = new Dictionary<string, string>() |
181 | 177 | {
|
182 | 178 | {$"hidden-link:{psWebtestCriteria.WebTestId}", "Resource" },
|
183 | 179 | {$"hidden-link:{psWebtestCriteria.ComponentId}", "Resource" }
|
184 | 180 | };
|
| 181 | + var metricAlertResource = new MetricAlertResource( |
| 182 | + description: this.Description ?? Utilities.GetDefaultDescription("new Metric alert rule"), |
| 183 | + severity: this.Severity, |
| 184 | + location: "global", |
| 185 | + enabled: !this.DisableRule, |
| 186 | + scopes: this.TargetResourceScope, |
| 187 | + evaluationFrequency: this.Frequency, |
| 188 | + windowSize: this.WindowSize, |
| 189 | + criteria: criteria, |
| 190 | + autoMitigate: this.AutoMitigate, |
| 191 | + actions: actions, |
| 192 | + tags: tags |
| 193 | + ); |
| 194 | + if (ShouldProcess( |
| 195 | + target: $"Create/update an alert rule: {this.Name} from resource group: {this.ResourceGroupName}", |
| 196 | + action: "Create/update an alert rule")) |
| 197 | + { |
| 198 | + var result = this.MonitorManagementClient.MetricAlerts.CreateOrUpdateAsync(resourceGroupName: this.ResourceGroupName, ruleName: this.Name, parameters: metricAlertResource).Result; |
| 199 | + WriteObject(result); |
185 | 200 | }
|
186 |
| - else |
| 201 | + } |
| 202 | + else if (this.TargetResourceScope == null)//Single Resource Metric Alert Rule |
| 203 | + { |
| 204 | + var scopes = new List<string> {this.TargetResourceId}; |
| 205 | + |
| 206 | + MetricAlertCriteria criteria; |
| 207 | + |
| 208 | + var metricCriteria = new List<MetricCriteria>(); |
| 209 | + foreach (var metricCondition in this.Condition) |
187 | 210 | {
|
188 |
| - var metricCriteria = new List<MetricCriteria>(); |
189 |
| - foreach (var metricCondition in this.Condition) |
190 |
| - { |
191 |
| - var condition = metricCondition as PSMetricCriteria; |
192 |
| - metricCriteria.Add(new MetricCriteria(name: condition.Name, metricName: condition.MetricName, operatorProperty: condition.OperatorProperty.ToString(), timeAggregation: condition.TimeAggregation.ToString(), threshold: condition.Threshold, metricNamespace: condition.MetricNamespace, dimensions: condition.Dimensions, skipMetricValidation: condition.SkipMetricValidation)); |
193 |
| - } |
194 |
| - criteria = new MetricAlertSingleResourceMultipleMetricCriteria( |
195 |
| - allOf: metricCriteria |
196 |
| - ); |
| 211 | + var condition = metricCondition as PSMetricCriteria; |
| 212 | + metricCriteria.Add(new MetricCriteria(name: condition.Name, metricName: condition.MetricName, operatorProperty: condition.OperatorProperty.ToString(), timeAggregation: condition.TimeAggregation.ToString(), threshold: condition.Threshold, metricNamespace: condition.MetricNamespace, dimensions: condition.Dimensions, skipMetricValidation: condition.SkipMetricValidation)); |
197 | 213 | }
|
| 214 | + criteria = new MetricAlertSingleResourceMultipleMetricCriteria( |
| 215 | + allOf: metricCriteria |
| 216 | + ); |
198 | 217 |
|
199 | 218 | var metricAlertResource = new MetricAlertResource(
|
200 | 219 | description: this.Description ?? Utilities.GetDefaultDescription("new Metric alert rule"),
|
|
0 commit comments