private MetricAlertResource GetSampleMetricRuleResourceParams() { MetricAlertSingleResourceMultipleMetricCriteria metricCriteria = GetSampleMetricCriteria(); return(new MetricAlertResource( description: "alert description", severity: 3, location: "Location", enabled: true, scopes: new List <string>() { "/subscriptions/80430018-24ee-4b28-a7bd-fb23b5a221d6/resourceGroups/SanjaychResourceGroup/providers/Microsoft.Compute/virtualMachines/SCCMDemo2" }, evaluationFrequency: new TimeSpan(hours: 0, minutes: 5, seconds: 0), windowSize: new TimeSpan(hours: 0, minutes: 5, seconds: 0), criteria: metricCriteria, actions: new List <MetricAlertAction>() { new MetricAlertAction() { ActionGroupId = "/subscriptions/80430018-24ee-4b28-a7bd-fb23b5a221d6/resourcegroups/custommetricdemo/providers/microsoft.insights/actiongroups/scactiongroup" } } )); }
///GENMHASH:0202A00A1DCF248D2647DBDBEF2CA865:3D3357BF7A9E06A99BB65E3E9DAF00FD public override async Task <Microsoft.Azure.Management.Monitor.Fluent.IMetricAlert> CreateResourceAsync(CancellationToken cancellationToken = default(CancellationToken)) { this.Inner.Location = "global"; var crit = new MetricAlertSingleResourceMultipleMetricCriteria(); crit.AllOf = new List <MetricCriteria>(); foreach (var mc in conditions.Values) { crit.AllOf.Add(mc.Inner); } this.Inner.Criteria = crit; SetInner(await this.Manager.Inner.MetricAlerts.CreateOrUpdateAsync(this.ResourceGroupName, this.Name, this.Inner, cancellationToken)); return(this); }
public static void Compare(MetricAlertSingleResourceMultipleMetricCriteria exp, MetricAlertSingleResourceMultipleMetricCriteria act) { if (exp != null) { for (int i = 0; i < exp.AllOf.Count; i++) { AreEqual(exp.AllOf[i], act.AllOf[i]); } } else { Assert.Null(act); } }
///GENMHASH:0202A00A1DCF248D2647DBDBEF2CA865:3D3357BF7A9E06A99BB65E3E9DAF00FD public override async Task <Microsoft.Azure.Management.Monitor.Fluent.IMetricAlert> CreateResourceAsync(CancellationToken cancellationToken = default(CancellationToken)) { if (!this.conditions.Any() && !this.dynamicConditions.Any()) { throw new ArgumentException("Condition cannot be empty"); } else if (this.conditions.Any() && this.dynamicConditions.Any()) { throw new ArgumentException("Static condition and dynamic condition cannot co-exist"); } this.Inner.Location = "global"; if (this.conditions.Any()) { if (!multipleResource) { var crit = new MetricAlertSingleResourceMultipleMetricCriteria(); crit.AllOf = new List <MetricCriteria>(); foreach (var mc in conditions.Values) { crit.AllOf.Add(mc.Inner); } this.Inner.Criteria = crit; } else { var crit = new MetricAlertMultipleResourceMultipleMetricCriteria(); crit.AllOf = new List <MultiMetricCriteria>(); foreach (var mc in conditions.Values) { crit.AllOf.Add(mc.Inner); } this.Inner.Criteria = crit; } } else if (this.dynamicConditions.Any()) { var crit = new MetricAlertMultipleResourceMultipleMetricCriteria(); crit.AllOf = new List <MultiMetricCriteria>(); foreach (var mc in dynamicConditions.Values) { crit.AllOf.Add(mc.Inner); } this.Inner.Criteria = crit; } SetInner(await this.Manager.Inner.MetricAlerts.CreateOrUpdateAsync(this.ResourceGroupName, this.Name, this.Inner, cancellationToken)); return(this); }
private MetricAlertResource GetCreateOrUpdateRuleParameters() { MetricAlertSingleResourceMultipleMetricCriteria metricCriteria = new MetricAlertSingleResourceMultipleMetricCriteria( allOf: new List <MetricCriteria>() { new MetricCriteria() { MetricName = "Transactions", MetricNamespace = "Microsoft.Storage/storageAccounts", Name = "metric1", Dimensions = new MetricDimension[0], Threshold = 100, OperatorProperty = "GreaterThan", TimeAggregation = "Total", } } ); return(new MetricAlertResource( description: " This is for Metric Alert SDK Scenario Test", severity: 3, location: "global", enabled: true, scopes: new List <string>() { "/subscriptions/80430018-24ee-4b28-a7bd-fb23b5a221d6/resourceGroups/SanjaychResourceGroup/providers/Microsoft.Storage/storageAccounts/metricalertsdktestacc" }, evaluationFrequency: new TimeSpan(hours: 0, minutes: 15, seconds: 0), windowSize: new TimeSpan(hours: 0, minutes: 15, seconds: 0), criteria: metricCriteria, actions: new List <MetricAlertAction>() { new MetricAlertAction() { ActionGroupId = "/subscriptions/80430018-24ee-4b28-a7bd-fb23b5a221d6/resourcegroups/sanjaychresourcegroup/providers/microsoft.insights/actiongroups/scnewactiongroup" } } )); }
protected override void ProcessRecordInternal() { if (this.TargetResourceScope == null)//Single Resource Metric Alert Rule { var scopes = new List <string>(); scopes.Add(this.TargetResourceId); var metricCriteria = new List <MetricCriteria>(); foreach (var condition in this.Condition) { 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)); } var criteria = new MetricAlertSingleResourceMultipleMetricCriteria( allOf: metricCriteria ); var actions = new List <MetricAlertAction>(); foreach (var actionGroup in this.ActionGroup) { actions.Add(new MetricAlertAction(actionGroupId: actionGroup.ActionGroupId, webhookProperties: actionGroup.WebhookProperties)); } var metricAlertResource = new MetricAlertResource( description: this.Description ?? Utilities.GetDefaultDescription("new Metric alert rule"), severity: this.Severity, location: "global", enabled: !this.DisableRule, scopes: scopes, evaluationFrequency: this.Frequency, windowSize: this.WindowSize, criteria: criteria, actions: actions ); if (ShouldProcess( target: string.Format("Create/update an alert rule: {0} from resource group: {1}", this.Name, this.ResourceGroupName), action: "Create/update an alert rule")) { var result = this.MonitorManagementClient.MetricAlerts.CreateOrUpdateAsync(resourceGroupName: this.ResourceGroupName, ruleName: this.Name, parameters: metricAlertResource).Result; WriteObject(result); } } else// Multi Resource Metric Alert Rule { List <MultiMetricCriteria> multiMetricCriterias = new List <MultiMetricCriteria>(); foreach (var condition in this.Condition) { multiMetricCriterias.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)); } MetricAlertMultipleResourceMultipleMetricCriteria metricCriteria = new MetricAlertMultipleResourceMultipleMetricCriteria( allOf: multiMetricCriterias ); var actions = new List <MetricAlertAction>(); foreach (var actionGroup in this.ActionGroup) { actions.Add(new MetricAlertAction(actionGroupId: actionGroup.ActionGroupId, webhookProperties: actionGroup.WebhookProperties)); } var metricAlertResource = new MetricAlertResource( description: this.Description ?? Utilities.GetDefaultDescription("New multi resource Metric alert rule"), severity: this.Severity, location: "global", enabled: !this.DisableRule, scopes: this.TargetResourceScope, targetResourceRegion: this.TargetResourceRegion, targetResourceType: this.TargetResourceType, evaluationFrequency: this.Frequency, windowSize: this.WindowSize, criteria: metricCriteria, actions: actions ); if (ShouldProcess( target: string.Format("Create/update an alert rule: {0} from resource group: {1}", this.Name, this.ResourceGroupName), action: "Create/update an alert rule")) { var result = this.MonitorManagementClient.MetricAlerts.CreateOrUpdateAsync(resourceGroupName: this.ResourceGroupName, ruleName: this.Name, parameters: metricAlertResource).Result; WriteObject(result); } } }
protected override void ProcessRecordInternal() { var actions = new List <MetricAlertAction>(); if (this.ActionGroup != null && this.ActionGroup.Length > 0) { actions.AddRange(this.ActionGroup.Select(actionGroup => new MetricAlertAction(actionGroupId: actionGroup.ActionGroupId, webHookProperties: actionGroup.WebhookProperties))); } if (this.ActionGroupId != null && this.ActionGroupId.Length > 0) { var newActionGroupIds = this.ActionGroupId.Where(id => !actions.Exists(action => action.ActionGroupId == id)); actions.AddRange(newActionGroupIds.Select(actionGroupId => new MetricAlertAction(actionGroupId: actionGroupId))); } if (this.Condition.Any(c => c.CriterionType == CriterionType.DynamicThresholdCriterion)) { this.TargetResourceScope = this.TargetResourceScope ?? new string[] { this.TargetResourceId }; } IDictionary <string, string> tags = null; if (this.TargetResourceScope == null)//Single Resource Metric Alert Rule { var scopes = new List <string> { this.TargetResourceId }; MetricAlertCriteria criteria; if (this.Condition.Any(c => c.CriterionType == CriterionType.WebtestLocationAvailabilityCriterion)) { if (this.Condition.Count > 1) { throw new ArgumentException("Only single Webtest location availability criterion is supported"); } var psWebtestCriteria = this.Condition.First() as PSWebtestLocationAvailabilityCriteria; criteria = new WebtestLocationAvailabilityCriteria(psWebtestCriteria.WebTestId, psWebtestCriteria.ComponentId, psWebtestCriteria.FailedLocationCount); scopes.Add(psWebtestCriteria.ComponentId); tags = new Dictionary <string, string>() { { $"hidden-link:{psWebtestCriteria.WebTestId}", "Resource" }, { $"hidden-link:{psWebtestCriteria.ComponentId}", "Resource" } }; } else { var metricCriteria = new List <MetricCriteria>(); foreach (var metricCondition in this.Condition) { var condition = metricCondition as PSMetricCriteria; 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)); } criteria = new MetricAlertSingleResourceMultipleMetricCriteria( allOf: metricCriteria ); } var metricAlertResource = new MetricAlertResource( description: this.Description ?? Utilities.GetDefaultDescription("new Metric alert rule"), severity: this.Severity, location: "global", enabled: !this.DisableRule, scopes: scopes, evaluationFrequency: this.Frequency, windowSize: this.WindowSize, criteria: criteria, actions: actions, tags: tags ); if (ShouldProcess( target: $"Create/update an alert rule: {this.Name} from resource group: {this.ResourceGroupName}", action: "Create/update an alert rule")) { var result = this.MonitorManagementClient.MetricAlerts.CreateOrUpdateAsync(resourceGroupName: this.ResourceGroupName, ruleName: this.Name, parameters: metricAlertResource).Result; WriteObject(result); } } else// Multi Resource Metric Alert Rule { List <MultiMetricCriteria> multiMetricCriteria = new List <MultiMetricCriteria>(); foreach (var condition in this.Condition) { if (condition is PSMetricCriteria) { var psStaticMetricCriteria = condition as PSMetricCriteria; multiMetricCriteria.Add(new MetricCriteria(name: psStaticMetricCriteria.Name, metricName: psStaticMetricCriteria.MetricName, operatorProperty: psStaticMetricCriteria.OperatorProperty.ToString(), timeAggregation: psStaticMetricCriteria.TimeAggregation.ToString(), threshold: psStaticMetricCriteria.Threshold, metricNamespace: psStaticMetricCriteria.MetricNamespace, dimensions: psStaticMetricCriteria.Dimensions, skipMetricValidation: psStaticMetricCriteria.SkipMetricValidation)); } else { var psDynamicMetricCriteria = condition as PSDynamicMetricCriteria; multiMetricCriteria.Add(new DynamicMetricCriteria(name: psDynamicMetricCriteria.Name, metricName: psDynamicMetricCriteria.MetricName, operatorProperty: psDynamicMetricCriteria.OperatorProperty.ToString(), timeAggregation: psDynamicMetricCriteria.TimeAggregation.ToString(), metricNamespace: psDynamicMetricCriteria.MetricNamespace, dimensions: psDynamicMetricCriteria.Dimensions, alertSensitivity: psDynamicMetricCriteria.AlertSensitivity, failingPeriods: psDynamicMetricCriteria.FailingPeriods, ignoreDataBefore: psDynamicMetricCriteria.IgnoreDataBefore, skipMetricValidation: psDynamicMetricCriteria.SkipMetricValidation)); } } MetricAlertMultipleResourceMultipleMetricCriteria metricCriteria = new MetricAlertMultipleResourceMultipleMetricCriteria( allOf: multiMetricCriteria ); var metricAlertResource = new MetricAlertResource( description: this.Description ?? Utilities.GetDefaultDescription("New multi resource Metric alert rule"), severity: this.Severity, location: "global", enabled: !this.DisableRule, scopes: this.TargetResourceScope, targetResourceRegion: this.TargetResourceRegion, targetResourceType: this.TargetResourceType, evaluationFrequency: this.Frequency, windowSize: this.WindowSize, criteria: metricCriteria, actions: actions ); if (ShouldProcess( target: string.Format("Create/update an alert rule: {0} from resource group: {1}", this.Name, this.ResourceGroupName), action: "Create/update an alert rule")) { var result = this.MonitorManagementClient.MetricAlerts.CreateOrUpdateAsync(resourceGroupName: this.ResourceGroupName, ruleName: this.Name, parameters: metricAlertResource).Result; WriteObject(result); } } }
protected override void ProcessRecordInternal() { if (this.Condition.Any(c => c.CriterionType == CriterionType.DynamicThresholdCriterion)) { this.TargetResourceScope = this.TargetResourceScope ?? new string[] { this.TargetResourceId }; } var actions = new List <MetricAlertAction>(); if (this.ActionGroup != null) { actions.AddRange(this.ActionGroup.Select(actionGroup => new MetricAlertAction(actionGroupId: actionGroup.ActionGroupId, webhookProperties: actionGroup.WebhookProperties))); } if (this.ActionGroupId != null) { actions.AddRange(this.ActionGroupId.Select(actionGroupId => new MetricAlertAction(actionGroupId: actionGroupId))); } if (this.TargetResourceScope == null)//Single Resource Metric Alert Rule { var scopes = new List <string>(); scopes.Add(this.TargetResourceId); var metricCriteria = new List <MetricCriteria>(); foreach (var metricCondition in this.Condition) { var condition = metricCondition as PSMetricCriteria; 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)); } var criteria = new MetricAlertSingleResourceMultipleMetricCriteria( allOf: metricCriteria ); var metricAlertResource = new MetricAlertResource( description: this.Description ?? Utilities.GetDefaultDescription("new Metric alert rule"), severity: this.Severity, location: "global", enabled: !this.DisableRule, scopes: scopes, evaluationFrequency: this.Frequency, windowSize: this.WindowSize, criteria: criteria, actions: actions ); if (ShouldProcess( target: string.Format("Create/update an alert rule: {0} from resource group: {1}", this.Name, this.ResourceGroupName), action: "Create/update an alert rule")) { var result = this.MonitorManagementClient.MetricAlerts.CreateOrUpdateAsync(resourceGroupName: this.ResourceGroupName, ruleName: this.Name, parameters: metricAlertResource).Result; WriteObject(result); } } else// Multi Resource Metric Alert Rule { List <MultiMetricCriteria> multiMetricCriteria = new List <MultiMetricCriteria>(); foreach (var condition in this.Condition) { if (condition is PSMetricCriteria) { var psStaticMetricCriteria = condition as PSMetricCriteria; multiMetricCriteria.Add(new MetricCriteria(name: psStaticMetricCriteria.Name, metricName: psStaticMetricCriteria.MetricName, operatorProperty: psStaticMetricCriteria.OperatorProperty.ToString(), timeAggregation: psStaticMetricCriteria.TimeAggregation.ToString(), threshold: psStaticMetricCriteria.Threshold, metricNamespace: psStaticMetricCriteria.MetricNamespace, dimensions: psStaticMetricCriteria.Dimensions)); } else { var psDynamicMetricCriteria = condition as PSDynamicMetricCriteria; multiMetricCriteria.Add(new DynamicMetricCriteria(name: psDynamicMetricCriteria.Name, metricName: psDynamicMetricCriteria.MetricName, operatorProperty: psDynamicMetricCriteria.OperatorProperty.ToString(), timeAggregation: psDynamicMetricCriteria.TimeAggregation.ToString(), metricNamespace: psDynamicMetricCriteria.MetricNamespace, dimensions: psDynamicMetricCriteria.Dimensions, alertSensitivity: psDynamicMetricCriteria.AlertSensitivity, failingPeriods: psDynamicMetricCriteria.FailingPeriods, ignoreDataBefore: psDynamicMetricCriteria.IgnoreDataBefore)); } } MetricAlertMultipleResourceMultipleMetricCriteria metricCriteria = new MetricAlertMultipleResourceMultipleMetricCriteria( allOf: multiMetricCriteria ); var metricAlertResource = new MetricAlertResource( description: this.Description ?? Utilities.GetDefaultDescription("New multi resource Metric alert rule"), severity: this.Severity, location: "global", enabled: !this.DisableRule, scopes: this.TargetResourceScope, targetResourceRegion: this.TargetResourceRegion, targetResourceType: this.TargetResourceType, evaluationFrequency: this.Frequency, windowSize: this.WindowSize, criteria: metricCriteria, actions: actions ); if (ShouldProcess( target: string.Format("Create/update an alert rule: {0} from resource group: {1}", this.Name, this.ResourceGroupName), action: "Create/update an alert rule")) { var result = this.MonitorManagementClient.MetricAlerts.CreateOrUpdateAsync(resourceGroupName: this.ResourceGroupName, ruleName: this.Name, parameters: metricAlertResource).Result; WriteObject(result); } } }