diff --git a/profiles/preview/preview/monitor/mgmt/insights/models.go b/profiles/preview/preview/monitor/mgmt/insights/models.go index 106b7bc7fe5d..b6f4356c0da7 100644 --- a/profiles/preview/preview/monitor/mgmt/insights/models.go +++ b/profiles/preview/preview/monitor/mgmt/insights/models.go @@ -96,8 +96,9 @@ const ( type CriterionType = original.CriterionType const ( - CriterionTypeMultiMetricCriteria CriterionType = original.CriterionTypeMultiMetricCriteria - CriterionTypeStaticThresholdCriterion CriterionType = original.CriterionTypeStaticThresholdCriterion + CriterionTypeDynamicThresholdCriterion CriterionType = original.CriterionTypeDynamicThresholdCriterion + CriterionTypeMultiMetricCriteria CriterionType = original.CriterionTypeMultiMetricCriteria + CriterionTypeStaticThresholdCriterion CriterionType = original.CriterionTypeStaticThresholdCriterion ) type DataStatus = original.DataStatus @@ -355,6 +356,8 @@ type DiagnosticSettingsClient = original.DiagnosticSettingsClient type DiagnosticSettingsResource = original.DiagnosticSettingsResource type DiagnosticSettingsResourceCollection = original.DiagnosticSettingsResourceCollection type Dimension = original.Dimension +type DynamicMetricCriteria = original.DynamicMetricCriteria +type DynamicThresholdFailingPeriods = original.DynamicThresholdFailingPeriods type EmailNotification = original.EmailNotification type EmailReceiver = original.EmailReceiver type EnableRequest = original.EnableRequest @@ -407,7 +410,6 @@ type MetricAvailability = original.MetricAvailability type MetricBaselineClient = original.MetricBaselineClient type MetricBaselinesProperties = original.MetricBaselinesProperties type MetricBaselinesResponse = original.MetricBaselinesResponse -type MetricCriteria = original.MetricCriteria type MetricDefinition = original.MetricDefinition type MetricDefinitionCollection = original.MetricDefinitionCollection type MetricDefinitionsClient = original.MetricDefinitionsClient @@ -452,6 +454,7 @@ type SingleBaseline = original.SingleBaseline type SingleMetricBaseline = original.SingleMetricBaseline type SmsReceiver = original.SmsReceiver type Source = original.Source +type StaticMetricCriteria = original.StaticMetricCriteria type TenantActivityLogsClient = original.TenantActivityLogsClient type ThresholdRuleCondition = original.ThresholdRuleCondition type TimeSeriesBaseline = original.TimeSeriesBaseline diff --git a/services/preview/monitor/mgmt/2018-03-01/insights/models.go b/services/preview/monitor/mgmt/2018-03-01/insights/models.go index 7697beea652c..0268f419d144 100644 --- a/services/preview/monitor/mgmt/2018-03-01/insights/models.go +++ b/services/preview/monitor/mgmt/2018-03-01/insights/models.go @@ -152,6 +152,8 @@ func PossibleConditionOperatorValues() []ConditionOperator { type CriterionType string const ( + // CriterionTypeDynamicThresholdCriterion ... + CriterionTypeDynamicThresholdCriterion CriterionType = "DynamicThresholdCriterion" // CriterionTypeMultiMetricCriteria ... CriterionTypeMultiMetricCriteria CriterionType = "MultiMetricCriteria" // CriterionTypeStaticThresholdCriterion ... @@ -160,7 +162,7 @@ const ( // PossibleCriterionTypeValues returns an array of possible values for the CriterionType const type. func PossibleCriterionTypeValues() []CriterionType { - return []CriterionType{CriterionTypeMultiMetricCriteria, CriterionTypeStaticThresholdCriterion} + return []CriterionType{CriterionTypeDynamicThresholdCriterion, CriterionTypeMultiMetricCriteria, CriterionTypeStaticThresholdCriterion} } // Enabled enumerates the values for enabled. @@ -2109,6 +2111,218 @@ type Dimension struct { Values *[]string `json:"values,omitempty"` } +// DynamicMetricCriteria criterion for dynamic threshold. +type DynamicMetricCriteria struct { + // Operator - The operator used to compare the metric value against the threshold. + Operator interface{} `json:"operator,omitempty"` + // AlertSensitivity - The extent of deviation required to trigger an alert. This will affect how tight the threshold is to the metric series pattern. + AlertSensitivity interface{} `json:"alertSensitivity,omitempty"` + // FailingPeriods - The minimum number of violations required within the selected lookback time window required to raise an alert. + FailingPeriods *DynamicThresholdFailingPeriods `json:"failingPeriods,omitempty"` + // IgnoreDataBefore - Use this option to set the date from which to start learning the metric historical data and calculate the dynamic thresholds (in ISO8601 format) + IgnoreDataBefore *date.Time `json:"ignoreDataBefore,omitempty"` + // AdditionalProperties - Unmatched properties from the message are deserialized this collection + AdditionalProperties map[string]interface{} `json:""` + // Name - Name of the criteria. + Name *string `json:"name,omitempty"` + // MetricName - Name of the metric. + MetricName *string `json:"metricName,omitempty"` + // MetricNamespace - Namespace of the metric. + MetricNamespace *string `json:"metricNamespace,omitempty"` + // TimeAggregation - the criteria time aggregation types. + TimeAggregation interface{} `json:"timeAggregation,omitempty"` + // Dimensions - List of dimension conditions. + Dimensions *[]MetricDimension `json:"dimensions,omitempty"` + // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion', 'CriterionTypeDynamicThresholdCriterion' + CriterionType CriterionType `json:"criterionType,omitempty"` +} + +// MarshalJSON is the custom marshaler for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) MarshalJSON() ([]byte, error) { + dmc.CriterionType = CriterionTypeDynamicThresholdCriterion + objectMap := make(map[string]interface{}) + if dmc.Operator != nil { + objectMap["operator"] = dmc.Operator + } + if dmc.AlertSensitivity != nil { + objectMap["alertSensitivity"] = dmc.AlertSensitivity + } + if dmc.FailingPeriods != nil { + objectMap["failingPeriods"] = dmc.FailingPeriods + } + if dmc.IgnoreDataBefore != nil { + objectMap["ignoreDataBefore"] = dmc.IgnoreDataBefore + } + if dmc.Name != nil { + objectMap["name"] = dmc.Name + } + if dmc.MetricName != nil { + objectMap["metricName"] = dmc.MetricName + } + if dmc.MetricNamespace != nil { + objectMap["metricNamespace"] = dmc.MetricNamespace + } + if dmc.TimeAggregation != nil { + objectMap["timeAggregation"] = dmc.TimeAggregation + } + if dmc.Dimensions != nil { + objectMap["dimensions"] = dmc.Dimensions + } + if dmc.CriterionType != "" { + objectMap["criterionType"] = dmc.CriterionType + } + for k, v := range dmc.AdditionalProperties { + objectMap[k] = v + } + return json.Marshal(objectMap) +} + +// AsStaticMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsStaticMetricCriteria() (*StaticMetricCriteria, bool) { + return nil, false +} + +// AsDynamicMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) { + return &dmc, true +} + +// AsMultiMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) { + return nil, false +} + +// AsBasicMultiMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsBasicMultiMetricCriteria() (BasicMultiMetricCriteria, bool) { + return &dmc, true +} + +// UnmarshalJSON is the custom unmarshaler for DynamicMetricCriteria struct. +func (dmc *DynamicMetricCriteria) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "operator": + if v != nil { + var operator interface{} + err = json.Unmarshal(*v, &operator) + if err != nil { + return err + } + dmc.Operator = operator + } + case "alertSensitivity": + if v != nil { + var alertSensitivity interface{} + err = json.Unmarshal(*v, &alertSensitivity) + if err != nil { + return err + } + dmc.AlertSensitivity = alertSensitivity + } + case "failingPeriods": + if v != nil { + var failingPeriods DynamicThresholdFailingPeriods + err = json.Unmarshal(*v, &failingPeriods) + if err != nil { + return err + } + dmc.FailingPeriods = &failingPeriods + } + case "ignoreDataBefore": + if v != nil { + var ignoreDataBefore date.Time + err = json.Unmarshal(*v, &ignoreDataBefore) + if err != nil { + return err + } + dmc.IgnoreDataBefore = &ignoreDataBefore + } + default: + if v != nil { + var additionalProperties interface{} + err = json.Unmarshal(*v, &additionalProperties) + if err != nil { + return err + } + if dmc.AdditionalProperties == nil { + dmc.AdditionalProperties = make(map[string]interface{}) + } + dmc.AdditionalProperties[k] = additionalProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + dmc.Name = &name + } + case "metricName": + if v != nil { + var metricName string + err = json.Unmarshal(*v, &metricName) + if err != nil { + return err + } + dmc.MetricName = &metricName + } + case "metricNamespace": + if v != nil { + var metricNamespace string + err = json.Unmarshal(*v, &metricNamespace) + if err != nil { + return err + } + dmc.MetricNamespace = &metricNamespace + } + case "timeAggregation": + if v != nil { + var timeAggregation interface{} + err = json.Unmarshal(*v, &timeAggregation) + if err != nil { + return err + } + dmc.TimeAggregation = timeAggregation + } + case "dimensions": + if v != nil { + var dimensions []MetricDimension + err = json.Unmarshal(*v, &dimensions) + if err != nil { + return err + } + dmc.Dimensions = &dimensions + } + case "criterionType": + if v != nil { + var criterionType CriterionType + err = json.Unmarshal(*v, &criterionType) + if err != nil { + return err + } + dmc.CriterionType = criterionType + } + } + } + + return nil +} + +// DynamicThresholdFailingPeriods the minimum number of violations required within the selected lookback +// time window required to raise an alert. +type DynamicThresholdFailingPeriods struct { + // NumberOfEvaluationPeriods - The number of aggregated lookback points. The lookback time window is calculated based on the aggregation granularity (windowSize) and the selected number of aggregated points. + NumberOfEvaluationPeriods *float64 `json:"numberOfEvaluationPeriods,omitempty"` + // MinFailingPeriodsToAlert - The number of violations to trigger an alert. Should be smaller or equal to numberOfEvaluationPeriods. + MinFailingPeriodsToAlert *float64 `json:"minFailingPeriodsToAlert,omitempty"` +} + // EmailNotification email notification of an autoscale event. type EmailNotification struct { // SendToSubscriptionAdministrator - a value indicating whether to send email to subscription administrator. @@ -3797,7 +4011,7 @@ func (marp *MetricAlertResourcePatch) UnmarshalJSON(body []byte) error { // resource that has multiple metric criteria. type MetricAlertSingleResourceMultipleMetricCriteria struct { // AllOf - The list of metric criteria for this 'all of' operation. - AllOf *[]MetricCriteria `json:"allOf,omitempty"` + AllOf *[]StaticMetricCriteria `json:"allOf,omitempty"` // AdditionalProperties - Unmatched properties from the message are deserialized this collection AdditionalProperties map[string]interface{} `json:""` // OdataType - Possible values include: 'OdataTypeMetricAlertCriteria', 'OdataTypeMicrosoftAzureMonitorSingleResourceMultipleMetricCriteria', 'OdataTypeMicrosoftAzureMonitorMultipleResourceMultipleMetricCriteria' @@ -3851,7 +4065,7 @@ func (masrmmc *MetricAlertSingleResourceMultipleMetricCriteria) UnmarshalJSON(bo switch k { case "allOf": if v != nil { - var allOf []MetricCriteria + var allOf []StaticMetricCriteria err = json.Unmarshal(*v, &allOf) if err != nil { return err @@ -3938,176 +4152,6 @@ type MetricAvailability struct { Retention *string `json:"retention,omitempty"` } -// MetricCriteria criterion to filter metrics. -type MetricCriteria struct { - // Name - Name of the criteria. - Name *string `json:"name,omitempty"` - // MetricName - Name of the metric. - MetricName *string `json:"metricName,omitempty"` - // MetricNamespace - Namespace of the metric. - MetricNamespace *string `json:"metricNamespace,omitempty"` - // Operator - the criteria operator. - Operator interface{} `json:"operator,omitempty"` - // TimeAggregation - the criteria time aggregation types. - TimeAggregation interface{} `json:"timeAggregation,omitempty"` - // Threshold - the criteria threshold value that activates the alert. - Threshold *float64 `json:"threshold,omitempty"` - // Dimensions - List of dimension conditions. - Dimensions *[]MetricDimension `json:"dimensions,omitempty"` - // AdditionalProperties - Unmatched properties from the message are deserialized this collection - AdditionalProperties map[string]interface{} `json:""` - // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion' - CriterionType CriterionType `json:"criterionType,omitempty"` -} - -// MarshalJSON is the custom marshaler for MetricCriteria. -func (mc MetricCriteria) MarshalJSON() ([]byte, error) { - mc.CriterionType = CriterionTypeStaticThresholdCriterion - objectMap := make(map[string]interface{}) - if mc.Name != nil { - objectMap["name"] = mc.Name - } - if mc.MetricName != nil { - objectMap["metricName"] = mc.MetricName - } - if mc.MetricNamespace != nil { - objectMap["metricNamespace"] = mc.MetricNamespace - } - if mc.Operator != nil { - objectMap["operator"] = mc.Operator - } - if mc.TimeAggregation != nil { - objectMap["timeAggregation"] = mc.TimeAggregation - } - if mc.Threshold != nil { - objectMap["threshold"] = mc.Threshold - } - if mc.Dimensions != nil { - objectMap["dimensions"] = mc.Dimensions - } - if mc.CriterionType != "" { - objectMap["criterionType"] = mc.CriterionType - } - for k, v := range mc.AdditionalProperties { - objectMap[k] = v - } - return json.Marshal(objectMap) -} - -// AsMetricCriteria is the BasicMultiMetricCriteria implementation for MetricCriteria. -func (mc MetricCriteria) AsMetricCriteria() (*MetricCriteria, bool) { - return &mc, true -} - -// AsMultiMetricCriteria is the BasicMultiMetricCriteria implementation for MetricCriteria. -func (mc MetricCriteria) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) { - return nil, false -} - -// AsBasicMultiMetricCriteria is the BasicMultiMetricCriteria implementation for MetricCriteria. -func (mc MetricCriteria) AsBasicMultiMetricCriteria() (BasicMultiMetricCriteria, bool) { - return &mc, true -} - -// UnmarshalJSON is the custom unmarshaler for MetricCriteria struct. -func (mc *MetricCriteria) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - mc.Name = &name - } - case "metricName": - if v != nil { - var metricName string - err = json.Unmarshal(*v, &metricName) - if err != nil { - return err - } - mc.MetricName = &metricName - } - case "metricNamespace": - if v != nil { - var metricNamespace string - err = json.Unmarshal(*v, &metricNamespace) - if err != nil { - return err - } - mc.MetricNamespace = &metricNamespace - } - case "operator": - if v != nil { - var operator interface{} - err = json.Unmarshal(*v, &operator) - if err != nil { - return err - } - mc.Operator = operator - } - case "timeAggregation": - if v != nil { - var timeAggregation interface{} - err = json.Unmarshal(*v, &timeAggregation) - if err != nil { - return err - } - mc.TimeAggregation = timeAggregation - } - case "threshold": - if v != nil { - var threshold float64 - err = json.Unmarshal(*v, &threshold) - if err != nil { - return err - } - mc.Threshold = &threshold - } - case "dimensions": - if v != nil { - var dimensions []MetricDimension - err = json.Unmarshal(*v, &dimensions) - if err != nil { - return err - } - mc.Dimensions = &dimensions - } - default: - if v != nil { - var additionalProperties interface{} - err = json.Unmarshal(*v, &additionalProperties) - if err != nil { - return err - } - if mc.AdditionalProperties == nil { - mc.AdditionalProperties = make(map[string]interface{}) - } - mc.AdditionalProperties[k] = additionalProperties - } - case "criterionType": - if v != nil { - var criterionType CriterionType - err = json.Unmarshal(*v, &criterionType) - if err != nil { - return err - } - mc.CriterionType = criterionType - } - } - } - - return nil -} - // MetricDefinition metric definition class specifies the metadata for a metric. type MetricDefinition struct { // IsDimensionRequired - Flag to indicate whether the dimension is required. @@ -4197,17 +4241,28 @@ type MetricValue struct { Count *int64 `json:"count,omitempty"` } -// BasicMultiMetricCriteria the types of conditions for a multi resource alert +// BasicMultiMetricCriteria the types of conditions for a multi resource alert. type BasicMultiMetricCriteria interface { - AsMetricCriteria() (*MetricCriteria, bool) + AsStaticMetricCriteria() (*StaticMetricCriteria, bool) + AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) } -// MultiMetricCriteria the types of conditions for a multi resource alert +// MultiMetricCriteria the types of conditions for a multi resource alert. type MultiMetricCriteria struct { // AdditionalProperties - Unmatched properties from the message are deserialized this collection AdditionalProperties map[string]interface{} `json:""` - // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion' + // Name - Name of the criteria. + Name *string `json:"name,omitempty"` + // MetricName - Name of the metric. + MetricName *string `json:"metricName,omitempty"` + // MetricNamespace - Namespace of the metric. + MetricNamespace *string `json:"metricNamespace,omitempty"` + // TimeAggregation - the criteria time aggregation types. + TimeAggregation interface{} `json:"timeAggregation,omitempty"` + // Dimensions - List of dimension conditions. + Dimensions *[]MetricDimension `json:"dimensions,omitempty"` + // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion', 'CriterionTypeDynamicThresholdCriterion' CriterionType CriterionType `json:"criterionType,omitempty"` } @@ -4220,9 +4275,13 @@ func unmarshalBasicMultiMetricCriteria(body []byte) (BasicMultiMetricCriteria, e switch m["criterionType"] { case string(CriterionTypeStaticThresholdCriterion): - var mc MetricCriteria - err := json.Unmarshal(body, &mc) - return mc, err + var smc StaticMetricCriteria + err := json.Unmarshal(body, &smc) + return smc, err + case string(CriterionTypeDynamicThresholdCriterion): + var dmc DynamicMetricCriteria + err := json.Unmarshal(body, &dmc) + return dmc, err default: var mmc MultiMetricCriteria err := json.Unmarshal(body, &mmc) @@ -4252,6 +4311,21 @@ func unmarshalBasicMultiMetricCriteriaArray(body []byte) ([]BasicMultiMetricCrit func (mmc MultiMetricCriteria) MarshalJSON() ([]byte, error) { mmc.CriterionType = CriterionTypeMultiMetricCriteria objectMap := make(map[string]interface{}) + if mmc.Name != nil { + objectMap["name"] = mmc.Name + } + if mmc.MetricName != nil { + objectMap["metricName"] = mmc.MetricName + } + if mmc.MetricNamespace != nil { + objectMap["metricNamespace"] = mmc.MetricNamespace + } + if mmc.TimeAggregation != nil { + objectMap["timeAggregation"] = mmc.TimeAggregation + } + if mmc.Dimensions != nil { + objectMap["dimensions"] = mmc.Dimensions + } if mmc.CriterionType != "" { objectMap["criterionType"] = mmc.CriterionType } @@ -4261,8 +4335,13 @@ func (mmc MultiMetricCriteria) MarshalJSON() ([]byte, error) { return json.Marshal(objectMap) } -// AsMetricCriteria is the BasicMultiMetricCriteria implementation for MultiMetricCriteria. -func (mmc MultiMetricCriteria) AsMetricCriteria() (*MetricCriteria, bool) { +// AsStaticMetricCriteria is the BasicMultiMetricCriteria implementation for MultiMetricCriteria. +func (mmc MultiMetricCriteria) AsStaticMetricCriteria() (*StaticMetricCriteria, bool) { + return nil, false +} + +// AsDynamicMetricCriteria is the BasicMultiMetricCriteria implementation for MultiMetricCriteria. +func (mmc MultiMetricCriteria) AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) { return nil, false } @@ -4297,6 +4376,51 @@ func (mmc *MultiMetricCriteria) UnmarshalJSON(body []byte) error { } mmc.AdditionalProperties[k] = additionalProperties } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + mmc.Name = &name + } + case "metricName": + if v != nil { + var metricName string + err = json.Unmarshal(*v, &metricName) + if err != nil { + return err + } + mmc.MetricName = &metricName + } + case "metricNamespace": + if v != nil { + var metricNamespace string + err = json.Unmarshal(*v, &metricNamespace) + if err != nil { + return err + } + mmc.MetricNamespace = &metricNamespace + } + case "timeAggregation": + if v != nil { + var timeAggregation interface{} + err = json.Unmarshal(*v, &timeAggregation) + if err != nil { + return err + } + mmc.TimeAggregation = timeAggregation + } + case "dimensions": + if v != nil { + var dimensions []MetricDimension + err = json.Unmarshal(*v, &dimensions) + if err != nil { + return err + } + mmc.Dimensions = &dimensions + } case "criterionType": if v != nil { var criterionType CriterionType @@ -5043,6 +5167,181 @@ type Source struct { QueryType QueryType `json:"queryType,omitempty"` } +// StaticMetricCriteria criterion to filter metrics. +type StaticMetricCriteria struct { + // Operator - the criteria operator. + Operator interface{} `json:"operator,omitempty"` + // Threshold - the criteria threshold value that activates the alert. + Threshold *float64 `json:"threshold,omitempty"` + // AdditionalProperties - Unmatched properties from the message are deserialized this collection + AdditionalProperties map[string]interface{} `json:""` + // Name - Name of the criteria. + Name *string `json:"name,omitempty"` + // MetricName - Name of the metric. + MetricName *string `json:"metricName,omitempty"` + // MetricNamespace - Namespace of the metric. + MetricNamespace *string `json:"metricNamespace,omitempty"` + // TimeAggregation - the criteria time aggregation types. + TimeAggregation interface{} `json:"timeAggregation,omitempty"` + // Dimensions - List of dimension conditions. + Dimensions *[]MetricDimension `json:"dimensions,omitempty"` + // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion', 'CriterionTypeDynamicThresholdCriterion' + CriterionType CriterionType `json:"criterionType,omitempty"` +} + +// MarshalJSON is the custom marshaler for StaticMetricCriteria. +func (smc StaticMetricCriteria) MarshalJSON() ([]byte, error) { + smc.CriterionType = CriterionTypeStaticThresholdCriterion + objectMap := make(map[string]interface{}) + if smc.Operator != nil { + objectMap["operator"] = smc.Operator + } + if smc.Threshold != nil { + objectMap["threshold"] = smc.Threshold + } + if smc.Name != nil { + objectMap["name"] = smc.Name + } + if smc.MetricName != nil { + objectMap["metricName"] = smc.MetricName + } + if smc.MetricNamespace != nil { + objectMap["metricNamespace"] = smc.MetricNamespace + } + if smc.TimeAggregation != nil { + objectMap["timeAggregation"] = smc.TimeAggregation + } + if smc.Dimensions != nil { + objectMap["dimensions"] = smc.Dimensions + } + if smc.CriterionType != "" { + objectMap["criterionType"] = smc.CriterionType + } + for k, v := range smc.AdditionalProperties { + objectMap[k] = v + } + return json.Marshal(objectMap) +} + +// AsStaticMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsStaticMetricCriteria() (*StaticMetricCriteria, bool) { + return &smc, true +} + +// AsDynamicMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) { + return nil, false +} + +// AsMultiMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) { + return nil, false +} + +// AsBasicMultiMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsBasicMultiMetricCriteria() (BasicMultiMetricCriteria, bool) { + return &smc, true +} + +// UnmarshalJSON is the custom unmarshaler for StaticMetricCriteria struct. +func (smc *StaticMetricCriteria) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "operator": + if v != nil { + var operator interface{} + err = json.Unmarshal(*v, &operator) + if err != nil { + return err + } + smc.Operator = operator + } + case "threshold": + if v != nil { + var threshold float64 + err = json.Unmarshal(*v, &threshold) + if err != nil { + return err + } + smc.Threshold = &threshold + } + default: + if v != nil { + var additionalProperties interface{} + err = json.Unmarshal(*v, &additionalProperties) + if err != nil { + return err + } + if smc.AdditionalProperties == nil { + smc.AdditionalProperties = make(map[string]interface{}) + } + smc.AdditionalProperties[k] = additionalProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + smc.Name = &name + } + case "metricName": + if v != nil { + var metricName string + err = json.Unmarshal(*v, &metricName) + if err != nil { + return err + } + smc.MetricName = &metricName + } + case "metricNamespace": + if v != nil { + var metricNamespace string + err = json.Unmarshal(*v, &metricNamespace) + if err != nil { + return err + } + smc.MetricNamespace = &metricNamespace + } + case "timeAggregation": + if v != nil { + var timeAggregation interface{} + err = json.Unmarshal(*v, &timeAggregation) + if err != nil { + return err + } + smc.TimeAggregation = timeAggregation + } + case "dimensions": + if v != nil { + var dimensions []MetricDimension + err = json.Unmarshal(*v, &dimensions) + if err != nil { + return err + } + smc.Dimensions = &dimensions + } + case "criterionType": + if v != nil { + var criterionType CriterionType + err = json.Unmarshal(*v, &criterionType) + if err != nil { + return err + } + smc.CriterionType = criterionType + } + } + } + + return nil +} + // ThresholdRuleCondition a rule condition based on a metric crossing a threshold. type ThresholdRuleCondition struct { // Operator - the operator used to compare the data and the threshold. Possible values include: 'ConditionOperatorGreaterThan', 'ConditionOperatorGreaterThanOrEqual', 'ConditionOperatorLessThan', 'ConditionOperatorLessThanOrEqual' diff --git a/services/preview/monitor/mgmt/2018-09-01/insights/models.go b/services/preview/monitor/mgmt/2018-09-01/insights/models.go index 4105a49a8a46..81261427a377 100644 --- a/services/preview/monitor/mgmt/2018-09-01/insights/models.go +++ b/services/preview/monitor/mgmt/2018-09-01/insights/models.go @@ -152,6 +152,8 @@ func PossibleConditionOperatorValues() []ConditionOperator { type CriterionType string const ( + // CriterionTypeDynamicThresholdCriterion ... + CriterionTypeDynamicThresholdCriterion CriterionType = "DynamicThresholdCriterion" // CriterionTypeMultiMetricCriteria ... CriterionTypeMultiMetricCriteria CriterionType = "MultiMetricCriteria" // CriterionTypeStaticThresholdCriterion ... @@ -160,7 +162,7 @@ const ( // PossibleCriterionTypeValues returns an array of possible values for the CriterionType const type. func PossibleCriterionTypeValues() []CriterionType { - return []CriterionType{CriterionTypeMultiMetricCriteria, CriterionTypeStaticThresholdCriterion} + return []CriterionType{CriterionTypeDynamicThresholdCriterion, CriterionTypeMultiMetricCriteria, CriterionTypeStaticThresholdCriterion} } // Enabled enumerates the values for enabled. @@ -2119,6 +2121,218 @@ type Dimension struct { Values *[]string `json:"values,omitempty"` } +// DynamicMetricCriteria criterion for dynamic threshold. +type DynamicMetricCriteria struct { + // Operator - The operator used to compare the metric value against the threshold. + Operator interface{} `json:"operator,omitempty"` + // AlertSensitivity - The extent of deviation required to trigger an alert. This will affect how tight the threshold is to the metric series pattern. + AlertSensitivity interface{} `json:"alertSensitivity,omitempty"` + // FailingPeriods - The minimum number of violations required within the selected lookback time window required to raise an alert. + FailingPeriods *DynamicThresholdFailingPeriods `json:"failingPeriods,omitempty"` + // IgnoreDataBefore - Use this option to set the date from which to start learning the metric historical data and calculate the dynamic thresholds (in ISO8601 format) + IgnoreDataBefore *date.Time `json:"ignoreDataBefore,omitempty"` + // AdditionalProperties - Unmatched properties from the message are deserialized this collection + AdditionalProperties map[string]interface{} `json:""` + // Name - Name of the criteria. + Name *string `json:"name,omitempty"` + // MetricName - Name of the metric. + MetricName *string `json:"metricName,omitempty"` + // MetricNamespace - Namespace of the metric. + MetricNamespace *string `json:"metricNamespace,omitempty"` + // TimeAggregation - the criteria time aggregation types. + TimeAggregation interface{} `json:"timeAggregation,omitempty"` + // Dimensions - List of dimension conditions. + Dimensions *[]MetricDimension `json:"dimensions,omitempty"` + // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion', 'CriterionTypeDynamicThresholdCriterion' + CriterionType CriterionType `json:"criterionType,omitempty"` +} + +// MarshalJSON is the custom marshaler for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) MarshalJSON() ([]byte, error) { + dmc.CriterionType = CriterionTypeDynamicThresholdCriterion + objectMap := make(map[string]interface{}) + if dmc.Operator != nil { + objectMap["operator"] = dmc.Operator + } + if dmc.AlertSensitivity != nil { + objectMap["alertSensitivity"] = dmc.AlertSensitivity + } + if dmc.FailingPeriods != nil { + objectMap["failingPeriods"] = dmc.FailingPeriods + } + if dmc.IgnoreDataBefore != nil { + objectMap["ignoreDataBefore"] = dmc.IgnoreDataBefore + } + if dmc.Name != nil { + objectMap["name"] = dmc.Name + } + if dmc.MetricName != nil { + objectMap["metricName"] = dmc.MetricName + } + if dmc.MetricNamespace != nil { + objectMap["metricNamespace"] = dmc.MetricNamespace + } + if dmc.TimeAggregation != nil { + objectMap["timeAggregation"] = dmc.TimeAggregation + } + if dmc.Dimensions != nil { + objectMap["dimensions"] = dmc.Dimensions + } + if dmc.CriterionType != "" { + objectMap["criterionType"] = dmc.CriterionType + } + for k, v := range dmc.AdditionalProperties { + objectMap[k] = v + } + return json.Marshal(objectMap) +} + +// AsStaticMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsStaticMetricCriteria() (*StaticMetricCriteria, bool) { + return nil, false +} + +// AsDynamicMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) { + return &dmc, true +} + +// AsMultiMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) { + return nil, false +} + +// AsBasicMultiMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsBasicMultiMetricCriteria() (BasicMultiMetricCriteria, bool) { + return &dmc, true +} + +// UnmarshalJSON is the custom unmarshaler for DynamicMetricCriteria struct. +func (dmc *DynamicMetricCriteria) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "operator": + if v != nil { + var operator interface{} + err = json.Unmarshal(*v, &operator) + if err != nil { + return err + } + dmc.Operator = operator + } + case "alertSensitivity": + if v != nil { + var alertSensitivity interface{} + err = json.Unmarshal(*v, &alertSensitivity) + if err != nil { + return err + } + dmc.AlertSensitivity = alertSensitivity + } + case "failingPeriods": + if v != nil { + var failingPeriods DynamicThresholdFailingPeriods + err = json.Unmarshal(*v, &failingPeriods) + if err != nil { + return err + } + dmc.FailingPeriods = &failingPeriods + } + case "ignoreDataBefore": + if v != nil { + var ignoreDataBefore date.Time + err = json.Unmarshal(*v, &ignoreDataBefore) + if err != nil { + return err + } + dmc.IgnoreDataBefore = &ignoreDataBefore + } + default: + if v != nil { + var additionalProperties interface{} + err = json.Unmarshal(*v, &additionalProperties) + if err != nil { + return err + } + if dmc.AdditionalProperties == nil { + dmc.AdditionalProperties = make(map[string]interface{}) + } + dmc.AdditionalProperties[k] = additionalProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + dmc.Name = &name + } + case "metricName": + if v != nil { + var metricName string + err = json.Unmarshal(*v, &metricName) + if err != nil { + return err + } + dmc.MetricName = &metricName + } + case "metricNamespace": + if v != nil { + var metricNamespace string + err = json.Unmarshal(*v, &metricNamespace) + if err != nil { + return err + } + dmc.MetricNamespace = &metricNamespace + } + case "timeAggregation": + if v != nil { + var timeAggregation interface{} + err = json.Unmarshal(*v, &timeAggregation) + if err != nil { + return err + } + dmc.TimeAggregation = timeAggregation + } + case "dimensions": + if v != nil { + var dimensions []MetricDimension + err = json.Unmarshal(*v, &dimensions) + if err != nil { + return err + } + dmc.Dimensions = &dimensions + } + case "criterionType": + if v != nil { + var criterionType CriterionType + err = json.Unmarshal(*v, &criterionType) + if err != nil { + return err + } + dmc.CriterionType = criterionType + } + } + } + + return nil +} + +// DynamicThresholdFailingPeriods the minimum number of violations required within the selected lookback +// time window required to raise an alert. +type DynamicThresholdFailingPeriods struct { + // NumberOfEvaluationPeriods - The number of aggregated lookback points. The lookback time window is calculated based on the aggregation granularity (windowSize) and the selected number of aggregated points. + NumberOfEvaluationPeriods *float64 `json:"numberOfEvaluationPeriods,omitempty"` + // MinFailingPeriodsToAlert - The number of violations to trigger an alert. Should be smaller or equal to numberOfEvaluationPeriods. + MinFailingPeriodsToAlert *float64 `json:"minFailingPeriodsToAlert,omitempty"` +} + // EmailNotification email notification of an autoscale event. type EmailNotification struct { // SendToSubscriptionAdministrator - a value indicating whether to send email to subscription administrator. @@ -3807,7 +4021,7 @@ func (marp *MetricAlertResourcePatch) UnmarshalJSON(body []byte) error { // resource that has multiple metric criteria. type MetricAlertSingleResourceMultipleMetricCriteria struct { // AllOf - The list of metric criteria for this 'all of' operation. - AllOf *[]MetricCriteria `json:"allOf,omitempty"` + AllOf *[]StaticMetricCriteria `json:"allOf,omitempty"` // AdditionalProperties - Unmatched properties from the message are deserialized this collection AdditionalProperties map[string]interface{} `json:""` // OdataType - Possible values include: 'OdataTypeMetricAlertCriteria', 'OdataTypeMicrosoftAzureMonitorSingleResourceMultipleMetricCriteria', 'OdataTypeMicrosoftAzureMonitorMultipleResourceMultipleMetricCriteria' @@ -3861,7 +4075,7 @@ func (masrmmc *MetricAlertSingleResourceMultipleMetricCriteria) UnmarshalJSON(bo switch k { case "allOf": if v != nil { - var allOf []MetricCriteria + var allOf []StaticMetricCriteria err = json.Unmarshal(*v, &allOf) if err != nil { return err @@ -3948,176 +4162,6 @@ type MetricAvailability struct { Retention *string `json:"retention,omitempty"` } -// MetricCriteria criterion to filter metrics. -type MetricCriteria struct { - // Name - Name of the criteria. - Name *string `json:"name,omitempty"` - // MetricName - Name of the metric. - MetricName *string `json:"metricName,omitempty"` - // MetricNamespace - Namespace of the metric. - MetricNamespace *string `json:"metricNamespace,omitempty"` - // Operator - the criteria operator. - Operator interface{} `json:"operator,omitempty"` - // TimeAggregation - the criteria time aggregation types. - TimeAggregation interface{} `json:"timeAggregation,omitempty"` - // Threshold - the criteria threshold value that activates the alert. - Threshold *float64 `json:"threshold,omitempty"` - // Dimensions - List of dimension conditions. - Dimensions *[]MetricDimension `json:"dimensions,omitempty"` - // AdditionalProperties - Unmatched properties from the message are deserialized this collection - AdditionalProperties map[string]interface{} `json:""` - // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion' - CriterionType CriterionType `json:"criterionType,omitempty"` -} - -// MarshalJSON is the custom marshaler for MetricCriteria. -func (mc MetricCriteria) MarshalJSON() ([]byte, error) { - mc.CriterionType = CriterionTypeStaticThresholdCriterion - objectMap := make(map[string]interface{}) - if mc.Name != nil { - objectMap["name"] = mc.Name - } - if mc.MetricName != nil { - objectMap["metricName"] = mc.MetricName - } - if mc.MetricNamespace != nil { - objectMap["metricNamespace"] = mc.MetricNamespace - } - if mc.Operator != nil { - objectMap["operator"] = mc.Operator - } - if mc.TimeAggregation != nil { - objectMap["timeAggregation"] = mc.TimeAggregation - } - if mc.Threshold != nil { - objectMap["threshold"] = mc.Threshold - } - if mc.Dimensions != nil { - objectMap["dimensions"] = mc.Dimensions - } - if mc.CriterionType != "" { - objectMap["criterionType"] = mc.CriterionType - } - for k, v := range mc.AdditionalProperties { - objectMap[k] = v - } - return json.Marshal(objectMap) -} - -// AsMetricCriteria is the BasicMultiMetricCriteria implementation for MetricCriteria. -func (mc MetricCriteria) AsMetricCriteria() (*MetricCriteria, bool) { - return &mc, true -} - -// AsMultiMetricCriteria is the BasicMultiMetricCriteria implementation for MetricCriteria. -func (mc MetricCriteria) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) { - return nil, false -} - -// AsBasicMultiMetricCriteria is the BasicMultiMetricCriteria implementation for MetricCriteria. -func (mc MetricCriteria) AsBasicMultiMetricCriteria() (BasicMultiMetricCriteria, bool) { - return &mc, true -} - -// UnmarshalJSON is the custom unmarshaler for MetricCriteria struct. -func (mc *MetricCriteria) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - mc.Name = &name - } - case "metricName": - if v != nil { - var metricName string - err = json.Unmarshal(*v, &metricName) - if err != nil { - return err - } - mc.MetricName = &metricName - } - case "metricNamespace": - if v != nil { - var metricNamespace string - err = json.Unmarshal(*v, &metricNamespace) - if err != nil { - return err - } - mc.MetricNamespace = &metricNamespace - } - case "operator": - if v != nil { - var operator interface{} - err = json.Unmarshal(*v, &operator) - if err != nil { - return err - } - mc.Operator = operator - } - case "timeAggregation": - if v != nil { - var timeAggregation interface{} - err = json.Unmarshal(*v, &timeAggregation) - if err != nil { - return err - } - mc.TimeAggregation = timeAggregation - } - case "threshold": - if v != nil { - var threshold float64 - err = json.Unmarshal(*v, &threshold) - if err != nil { - return err - } - mc.Threshold = &threshold - } - case "dimensions": - if v != nil { - var dimensions []MetricDimension - err = json.Unmarshal(*v, &dimensions) - if err != nil { - return err - } - mc.Dimensions = &dimensions - } - default: - if v != nil { - var additionalProperties interface{} - err = json.Unmarshal(*v, &additionalProperties) - if err != nil { - return err - } - if mc.AdditionalProperties == nil { - mc.AdditionalProperties = make(map[string]interface{}) - } - mc.AdditionalProperties[k] = additionalProperties - } - case "criterionType": - if v != nil { - var criterionType CriterionType - err = json.Unmarshal(*v, &criterionType) - if err != nil { - return err - } - mc.CriterionType = criterionType - } - } - } - - return nil -} - // MetricDefinition metric definition class specifies the metadata for a metric. type MetricDefinition struct { // IsDimensionRequired - Flag to indicate whether the dimension is required. @@ -4232,17 +4276,28 @@ type MetricValue struct { Count *int64 `json:"count,omitempty"` } -// BasicMultiMetricCriteria the types of conditions for a multi resource alert +// BasicMultiMetricCriteria the types of conditions for a multi resource alert. type BasicMultiMetricCriteria interface { - AsMetricCriteria() (*MetricCriteria, bool) + AsStaticMetricCriteria() (*StaticMetricCriteria, bool) + AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) } -// MultiMetricCriteria the types of conditions for a multi resource alert +// MultiMetricCriteria the types of conditions for a multi resource alert. type MultiMetricCriteria struct { // AdditionalProperties - Unmatched properties from the message are deserialized this collection AdditionalProperties map[string]interface{} `json:""` - // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion' + // Name - Name of the criteria. + Name *string `json:"name,omitempty"` + // MetricName - Name of the metric. + MetricName *string `json:"metricName,omitempty"` + // MetricNamespace - Namespace of the metric. + MetricNamespace *string `json:"metricNamespace,omitempty"` + // TimeAggregation - the criteria time aggregation types. + TimeAggregation interface{} `json:"timeAggregation,omitempty"` + // Dimensions - List of dimension conditions. + Dimensions *[]MetricDimension `json:"dimensions,omitempty"` + // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion', 'CriterionTypeDynamicThresholdCriterion' CriterionType CriterionType `json:"criterionType,omitempty"` } @@ -4255,9 +4310,13 @@ func unmarshalBasicMultiMetricCriteria(body []byte) (BasicMultiMetricCriteria, e switch m["criterionType"] { case string(CriterionTypeStaticThresholdCriterion): - var mc MetricCriteria - err := json.Unmarshal(body, &mc) - return mc, err + var smc StaticMetricCriteria + err := json.Unmarshal(body, &smc) + return smc, err + case string(CriterionTypeDynamicThresholdCriterion): + var dmc DynamicMetricCriteria + err := json.Unmarshal(body, &dmc) + return dmc, err default: var mmc MultiMetricCriteria err := json.Unmarshal(body, &mmc) @@ -4287,6 +4346,21 @@ func unmarshalBasicMultiMetricCriteriaArray(body []byte) ([]BasicMultiMetricCrit func (mmc MultiMetricCriteria) MarshalJSON() ([]byte, error) { mmc.CriterionType = CriterionTypeMultiMetricCriteria objectMap := make(map[string]interface{}) + if mmc.Name != nil { + objectMap["name"] = mmc.Name + } + if mmc.MetricName != nil { + objectMap["metricName"] = mmc.MetricName + } + if mmc.MetricNamespace != nil { + objectMap["metricNamespace"] = mmc.MetricNamespace + } + if mmc.TimeAggregation != nil { + objectMap["timeAggregation"] = mmc.TimeAggregation + } + if mmc.Dimensions != nil { + objectMap["dimensions"] = mmc.Dimensions + } if mmc.CriterionType != "" { objectMap["criterionType"] = mmc.CriterionType } @@ -4296,8 +4370,13 @@ func (mmc MultiMetricCriteria) MarshalJSON() ([]byte, error) { return json.Marshal(objectMap) } -// AsMetricCriteria is the BasicMultiMetricCriteria implementation for MultiMetricCriteria. -func (mmc MultiMetricCriteria) AsMetricCriteria() (*MetricCriteria, bool) { +// AsStaticMetricCriteria is the BasicMultiMetricCriteria implementation for MultiMetricCriteria. +func (mmc MultiMetricCriteria) AsStaticMetricCriteria() (*StaticMetricCriteria, bool) { + return nil, false +} + +// AsDynamicMetricCriteria is the BasicMultiMetricCriteria implementation for MultiMetricCriteria. +func (mmc MultiMetricCriteria) AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) { return nil, false } @@ -4332,6 +4411,51 @@ func (mmc *MultiMetricCriteria) UnmarshalJSON(body []byte) error { } mmc.AdditionalProperties[k] = additionalProperties } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + mmc.Name = &name + } + case "metricName": + if v != nil { + var metricName string + err = json.Unmarshal(*v, &metricName) + if err != nil { + return err + } + mmc.MetricName = &metricName + } + case "metricNamespace": + if v != nil { + var metricNamespace string + err = json.Unmarshal(*v, &metricNamespace) + if err != nil { + return err + } + mmc.MetricNamespace = &metricNamespace + } + case "timeAggregation": + if v != nil { + var timeAggregation interface{} + err = json.Unmarshal(*v, &timeAggregation) + if err != nil { + return err + } + mmc.TimeAggregation = timeAggregation + } + case "dimensions": + if v != nil { + var dimensions []MetricDimension + err = json.Unmarshal(*v, &dimensions) + if err != nil { + return err + } + mmc.Dimensions = &dimensions + } case "criterionType": if v != nil { var criterionType CriterionType @@ -5078,6 +5202,181 @@ type Source struct { QueryType QueryType `json:"queryType,omitempty"` } +// StaticMetricCriteria criterion to filter metrics. +type StaticMetricCriteria struct { + // Operator - the criteria operator. + Operator interface{} `json:"operator,omitempty"` + // Threshold - the criteria threshold value that activates the alert. + Threshold *float64 `json:"threshold,omitempty"` + // AdditionalProperties - Unmatched properties from the message are deserialized this collection + AdditionalProperties map[string]interface{} `json:""` + // Name - Name of the criteria. + Name *string `json:"name,omitempty"` + // MetricName - Name of the metric. + MetricName *string `json:"metricName,omitempty"` + // MetricNamespace - Namespace of the metric. + MetricNamespace *string `json:"metricNamespace,omitempty"` + // TimeAggregation - the criteria time aggregation types. + TimeAggregation interface{} `json:"timeAggregation,omitempty"` + // Dimensions - List of dimension conditions. + Dimensions *[]MetricDimension `json:"dimensions,omitempty"` + // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion', 'CriterionTypeDynamicThresholdCriterion' + CriterionType CriterionType `json:"criterionType,omitempty"` +} + +// MarshalJSON is the custom marshaler for StaticMetricCriteria. +func (smc StaticMetricCriteria) MarshalJSON() ([]byte, error) { + smc.CriterionType = CriterionTypeStaticThresholdCriterion + objectMap := make(map[string]interface{}) + if smc.Operator != nil { + objectMap["operator"] = smc.Operator + } + if smc.Threshold != nil { + objectMap["threshold"] = smc.Threshold + } + if smc.Name != nil { + objectMap["name"] = smc.Name + } + if smc.MetricName != nil { + objectMap["metricName"] = smc.MetricName + } + if smc.MetricNamespace != nil { + objectMap["metricNamespace"] = smc.MetricNamespace + } + if smc.TimeAggregation != nil { + objectMap["timeAggregation"] = smc.TimeAggregation + } + if smc.Dimensions != nil { + objectMap["dimensions"] = smc.Dimensions + } + if smc.CriterionType != "" { + objectMap["criterionType"] = smc.CriterionType + } + for k, v := range smc.AdditionalProperties { + objectMap[k] = v + } + return json.Marshal(objectMap) +} + +// AsStaticMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsStaticMetricCriteria() (*StaticMetricCriteria, bool) { + return &smc, true +} + +// AsDynamicMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) { + return nil, false +} + +// AsMultiMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) { + return nil, false +} + +// AsBasicMultiMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsBasicMultiMetricCriteria() (BasicMultiMetricCriteria, bool) { + return &smc, true +} + +// UnmarshalJSON is the custom unmarshaler for StaticMetricCriteria struct. +func (smc *StaticMetricCriteria) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "operator": + if v != nil { + var operator interface{} + err = json.Unmarshal(*v, &operator) + if err != nil { + return err + } + smc.Operator = operator + } + case "threshold": + if v != nil { + var threshold float64 + err = json.Unmarshal(*v, &threshold) + if err != nil { + return err + } + smc.Threshold = &threshold + } + default: + if v != nil { + var additionalProperties interface{} + err = json.Unmarshal(*v, &additionalProperties) + if err != nil { + return err + } + if smc.AdditionalProperties == nil { + smc.AdditionalProperties = make(map[string]interface{}) + } + smc.AdditionalProperties[k] = additionalProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + smc.Name = &name + } + case "metricName": + if v != nil { + var metricName string + err = json.Unmarshal(*v, &metricName) + if err != nil { + return err + } + smc.MetricName = &metricName + } + case "metricNamespace": + if v != nil { + var metricNamespace string + err = json.Unmarshal(*v, &metricNamespace) + if err != nil { + return err + } + smc.MetricNamespace = &metricNamespace + } + case "timeAggregation": + if v != nil { + var timeAggregation interface{} + err = json.Unmarshal(*v, &timeAggregation) + if err != nil { + return err + } + smc.TimeAggregation = timeAggregation + } + case "dimensions": + if v != nil { + var dimensions []MetricDimension + err = json.Unmarshal(*v, &dimensions) + if err != nil { + return err + } + smc.Dimensions = &dimensions + } + case "criterionType": + if v != nil { + var criterionType CriterionType + err = json.Unmarshal(*v, &criterionType) + if err != nil { + return err + } + smc.CriterionType = criterionType + } + } + } + + return nil +} + // ThresholdRuleCondition a rule condition based on a metric crossing a threshold. type ThresholdRuleCondition struct { // Operator - the operator used to compare the data and the threshold. Possible values include: 'ConditionOperatorGreaterThan', 'ConditionOperatorGreaterThanOrEqual', 'ConditionOperatorLessThan', 'ConditionOperatorLessThanOrEqual' diff --git a/services/preview/monitor/mgmt/2018-11-01-preview/insights/models.go b/services/preview/monitor/mgmt/2018-11-01-preview/insights/models.go index 155637ea04f9..6be598eb1f05 100644 --- a/services/preview/monitor/mgmt/2018-11-01-preview/insights/models.go +++ b/services/preview/monitor/mgmt/2018-11-01-preview/insights/models.go @@ -152,6 +152,8 @@ func PossibleConditionOperatorValues() []ConditionOperator { type CriterionType string const ( + // CriterionTypeDynamicThresholdCriterion ... + CriterionTypeDynamicThresholdCriterion CriterionType = "DynamicThresholdCriterion" // CriterionTypeMultiMetricCriteria ... CriterionTypeMultiMetricCriteria CriterionType = "MultiMetricCriteria" // CriterionTypeStaticThresholdCriterion ... @@ -160,7 +162,7 @@ const ( // PossibleCriterionTypeValues returns an array of possible values for the CriterionType const type. func PossibleCriterionTypeValues() []CriterionType { - return []CriterionType{CriterionTypeMultiMetricCriteria, CriterionTypeStaticThresholdCriterion} + return []CriterionType{CriterionTypeDynamicThresholdCriterion, CriterionTypeMultiMetricCriteria, CriterionTypeStaticThresholdCriterion} } // DataStatus enumerates the values for data status. @@ -2157,6 +2159,218 @@ type Dimension struct { Values *[]string `json:"values,omitempty"` } +// DynamicMetricCriteria criterion for dynamic threshold. +type DynamicMetricCriteria struct { + // Operator - The operator used to compare the metric value against the threshold. + Operator interface{} `json:"operator,omitempty"` + // AlertSensitivity - The extent of deviation required to trigger an alert. This will affect how tight the threshold is to the metric series pattern. + AlertSensitivity interface{} `json:"alertSensitivity,omitempty"` + // FailingPeriods - The minimum number of violations required within the selected lookback time window required to raise an alert. + FailingPeriods *DynamicThresholdFailingPeriods `json:"failingPeriods,omitempty"` + // IgnoreDataBefore - Use this option to set the date from which to start learning the metric historical data and calculate the dynamic thresholds (in ISO8601 format) + IgnoreDataBefore *date.Time `json:"ignoreDataBefore,omitempty"` + // AdditionalProperties - Unmatched properties from the message are deserialized this collection + AdditionalProperties map[string]interface{} `json:""` + // Name - Name of the criteria. + Name *string `json:"name,omitempty"` + // MetricName - Name of the metric. + MetricName *string `json:"metricName,omitempty"` + // MetricNamespace - Namespace of the metric. + MetricNamespace *string `json:"metricNamespace,omitempty"` + // TimeAggregation - the criteria time aggregation types. + TimeAggregation interface{} `json:"timeAggregation,omitempty"` + // Dimensions - List of dimension conditions. + Dimensions *[]MetricDimension `json:"dimensions,omitempty"` + // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion', 'CriterionTypeDynamicThresholdCriterion' + CriterionType CriterionType `json:"criterionType,omitempty"` +} + +// MarshalJSON is the custom marshaler for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) MarshalJSON() ([]byte, error) { + dmc.CriterionType = CriterionTypeDynamicThresholdCriterion + objectMap := make(map[string]interface{}) + if dmc.Operator != nil { + objectMap["operator"] = dmc.Operator + } + if dmc.AlertSensitivity != nil { + objectMap["alertSensitivity"] = dmc.AlertSensitivity + } + if dmc.FailingPeriods != nil { + objectMap["failingPeriods"] = dmc.FailingPeriods + } + if dmc.IgnoreDataBefore != nil { + objectMap["ignoreDataBefore"] = dmc.IgnoreDataBefore + } + if dmc.Name != nil { + objectMap["name"] = dmc.Name + } + if dmc.MetricName != nil { + objectMap["metricName"] = dmc.MetricName + } + if dmc.MetricNamespace != nil { + objectMap["metricNamespace"] = dmc.MetricNamespace + } + if dmc.TimeAggregation != nil { + objectMap["timeAggregation"] = dmc.TimeAggregation + } + if dmc.Dimensions != nil { + objectMap["dimensions"] = dmc.Dimensions + } + if dmc.CriterionType != "" { + objectMap["criterionType"] = dmc.CriterionType + } + for k, v := range dmc.AdditionalProperties { + objectMap[k] = v + } + return json.Marshal(objectMap) +} + +// AsStaticMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsStaticMetricCriteria() (*StaticMetricCriteria, bool) { + return nil, false +} + +// AsDynamicMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) { + return &dmc, true +} + +// AsMultiMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) { + return nil, false +} + +// AsBasicMultiMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsBasicMultiMetricCriteria() (BasicMultiMetricCriteria, bool) { + return &dmc, true +} + +// UnmarshalJSON is the custom unmarshaler for DynamicMetricCriteria struct. +func (dmc *DynamicMetricCriteria) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "operator": + if v != nil { + var operator interface{} + err = json.Unmarshal(*v, &operator) + if err != nil { + return err + } + dmc.Operator = operator + } + case "alertSensitivity": + if v != nil { + var alertSensitivity interface{} + err = json.Unmarshal(*v, &alertSensitivity) + if err != nil { + return err + } + dmc.AlertSensitivity = alertSensitivity + } + case "failingPeriods": + if v != nil { + var failingPeriods DynamicThresholdFailingPeriods + err = json.Unmarshal(*v, &failingPeriods) + if err != nil { + return err + } + dmc.FailingPeriods = &failingPeriods + } + case "ignoreDataBefore": + if v != nil { + var ignoreDataBefore date.Time + err = json.Unmarshal(*v, &ignoreDataBefore) + if err != nil { + return err + } + dmc.IgnoreDataBefore = &ignoreDataBefore + } + default: + if v != nil { + var additionalProperties interface{} + err = json.Unmarshal(*v, &additionalProperties) + if err != nil { + return err + } + if dmc.AdditionalProperties == nil { + dmc.AdditionalProperties = make(map[string]interface{}) + } + dmc.AdditionalProperties[k] = additionalProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + dmc.Name = &name + } + case "metricName": + if v != nil { + var metricName string + err = json.Unmarshal(*v, &metricName) + if err != nil { + return err + } + dmc.MetricName = &metricName + } + case "metricNamespace": + if v != nil { + var metricNamespace string + err = json.Unmarshal(*v, &metricNamespace) + if err != nil { + return err + } + dmc.MetricNamespace = &metricNamespace + } + case "timeAggregation": + if v != nil { + var timeAggregation interface{} + err = json.Unmarshal(*v, &timeAggregation) + if err != nil { + return err + } + dmc.TimeAggregation = timeAggregation + } + case "dimensions": + if v != nil { + var dimensions []MetricDimension + err = json.Unmarshal(*v, &dimensions) + if err != nil { + return err + } + dmc.Dimensions = &dimensions + } + case "criterionType": + if v != nil { + var criterionType CriterionType + err = json.Unmarshal(*v, &criterionType) + if err != nil { + return err + } + dmc.CriterionType = criterionType + } + } + } + + return nil +} + +// DynamicThresholdFailingPeriods the minimum number of violations required within the selected lookback +// time window required to raise an alert. +type DynamicThresholdFailingPeriods struct { + // NumberOfEvaluationPeriods - The number of aggregated lookback points. The lookback time window is calculated based on the aggregation granularity (windowSize) and the selected number of aggregated points. + NumberOfEvaluationPeriods *float64 `json:"numberOfEvaluationPeriods,omitempty"` + // MinFailingPeriodsToAlert - The number of violations to trigger an alert. Should be smaller or equal to numberOfEvaluationPeriods. + MinFailingPeriodsToAlert *float64 `json:"minFailingPeriodsToAlert,omitempty"` +} + // EmailNotification email notification of an autoscale event. type EmailNotification struct { // SendToSubscriptionAdministrator - a value indicating whether to send email to subscription administrator. @@ -3853,7 +4067,7 @@ func (marp *MetricAlertResourcePatch) UnmarshalJSON(body []byte) error { // resource that has multiple metric criteria. type MetricAlertSingleResourceMultipleMetricCriteria struct { // AllOf - The list of metric criteria for this 'all of' operation. - AllOf *[]MetricCriteria `json:"allOf,omitempty"` + AllOf *[]StaticMetricCriteria `json:"allOf,omitempty"` // AdditionalProperties - Unmatched properties from the message are deserialized this collection AdditionalProperties map[string]interface{} `json:""` // OdataType - Possible values include: 'OdataTypeMetricAlertCriteria', 'OdataTypeMicrosoftAzureMonitorSingleResourceMultipleMetricCriteria', 'OdataTypeMicrosoftAzureMonitorMultipleResourceMultipleMetricCriteria' @@ -3907,7 +4121,7 @@ func (masrmmc *MetricAlertSingleResourceMultipleMetricCriteria) UnmarshalJSON(bo switch k { case "allOf": if v != nil { - var allOf []MetricCriteria + var allOf []StaticMetricCriteria err = json.Unmarshal(*v, &allOf) if err != nil { return err @@ -3994,176 +4208,6 @@ type MetricAvailability struct { Retention *string `json:"retention,omitempty"` } -// MetricCriteria criterion to filter metrics. -type MetricCriteria struct { - // Name - Name of the criteria. - Name *string `json:"name,omitempty"` - // MetricName - Name of the metric. - MetricName *string `json:"metricName,omitempty"` - // MetricNamespace - Namespace of the metric. - MetricNamespace *string `json:"metricNamespace,omitempty"` - // Operator - the criteria operator. - Operator interface{} `json:"operator,omitempty"` - // TimeAggregation - the criteria time aggregation types. - TimeAggregation interface{} `json:"timeAggregation,omitempty"` - // Threshold - the criteria threshold value that activates the alert. - Threshold *float64 `json:"threshold,omitempty"` - // Dimensions - List of dimension conditions. - Dimensions *[]MetricDimension `json:"dimensions,omitempty"` - // AdditionalProperties - Unmatched properties from the message are deserialized this collection - AdditionalProperties map[string]interface{} `json:""` - // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion' - CriterionType CriterionType `json:"criterionType,omitempty"` -} - -// MarshalJSON is the custom marshaler for MetricCriteria. -func (mc MetricCriteria) MarshalJSON() ([]byte, error) { - mc.CriterionType = CriterionTypeStaticThresholdCriterion - objectMap := make(map[string]interface{}) - if mc.Name != nil { - objectMap["name"] = mc.Name - } - if mc.MetricName != nil { - objectMap["metricName"] = mc.MetricName - } - if mc.MetricNamespace != nil { - objectMap["metricNamespace"] = mc.MetricNamespace - } - if mc.Operator != nil { - objectMap["operator"] = mc.Operator - } - if mc.TimeAggregation != nil { - objectMap["timeAggregation"] = mc.TimeAggregation - } - if mc.Threshold != nil { - objectMap["threshold"] = mc.Threshold - } - if mc.Dimensions != nil { - objectMap["dimensions"] = mc.Dimensions - } - if mc.CriterionType != "" { - objectMap["criterionType"] = mc.CriterionType - } - for k, v := range mc.AdditionalProperties { - objectMap[k] = v - } - return json.Marshal(objectMap) -} - -// AsMetricCriteria is the BasicMultiMetricCriteria implementation for MetricCriteria. -func (mc MetricCriteria) AsMetricCriteria() (*MetricCriteria, bool) { - return &mc, true -} - -// AsMultiMetricCriteria is the BasicMultiMetricCriteria implementation for MetricCriteria. -func (mc MetricCriteria) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) { - return nil, false -} - -// AsBasicMultiMetricCriteria is the BasicMultiMetricCriteria implementation for MetricCriteria. -func (mc MetricCriteria) AsBasicMultiMetricCriteria() (BasicMultiMetricCriteria, bool) { - return &mc, true -} - -// UnmarshalJSON is the custom unmarshaler for MetricCriteria struct. -func (mc *MetricCriteria) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - mc.Name = &name - } - case "metricName": - if v != nil { - var metricName string - err = json.Unmarshal(*v, &metricName) - if err != nil { - return err - } - mc.MetricName = &metricName - } - case "metricNamespace": - if v != nil { - var metricNamespace string - err = json.Unmarshal(*v, &metricNamespace) - if err != nil { - return err - } - mc.MetricNamespace = &metricNamespace - } - case "operator": - if v != nil { - var operator interface{} - err = json.Unmarshal(*v, &operator) - if err != nil { - return err - } - mc.Operator = operator - } - case "timeAggregation": - if v != nil { - var timeAggregation interface{} - err = json.Unmarshal(*v, &timeAggregation) - if err != nil { - return err - } - mc.TimeAggregation = timeAggregation - } - case "threshold": - if v != nil { - var threshold float64 - err = json.Unmarshal(*v, &threshold) - if err != nil { - return err - } - mc.Threshold = &threshold - } - case "dimensions": - if v != nil { - var dimensions []MetricDimension - err = json.Unmarshal(*v, &dimensions) - if err != nil { - return err - } - mc.Dimensions = &dimensions - } - default: - if v != nil { - var additionalProperties interface{} - err = json.Unmarshal(*v, &additionalProperties) - if err != nil { - return err - } - if mc.AdditionalProperties == nil { - mc.AdditionalProperties = make(map[string]interface{}) - } - mc.AdditionalProperties[k] = additionalProperties - } - case "criterionType": - if v != nil { - var criterionType CriterionType - err = json.Unmarshal(*v, &criterionType) - if err != nil { - return err - } - mc.CriterionType = criterionType - } - } - } - - return nil -} - // MetricDefinition metric definition class specifies the metadata for a metric. type MetricDefinition struct { // IsDimensionRequired - Flag to indicate whether the dimension is required. @@ -4278,17 +4322,28 @@ type MetricValue struct { Count *int64 `json:"count,omitempty"` } -// BasicMultiMetricCriteria the types of conditions for a multi resource alert +// BasicMultiMetricCriteria the types of conditions for a multi resource alert. type BasicMultiMetricCriteria interface { - AsMetricCriteria() (*MetricCriteria, bool) + AsStaticMetricCriteria() (*StaticMetricCriteria, bool) + AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) } -// MultiMetricCriteria the types of conditions for a multi resource alert +// MultiMetricCriteria the types of conditions for a multi resource alert. type MultiMetricCriteria struct { // AdditionalProperties - Unmatched properties from the message are deserialized this collection AdditionalProperties map[string]interface{} `json:""` - // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion' + // Name - Name of the criteria. + Name *string `json:"name,omitempty"` + // MetricName - Name of the metric. + MetricName *string `json:"metricName,omitempty"` + // MetricNamespace - Namespace of the metric. + MetricNamespace *string `json:"metricNamespace,omitempty"` + // TimeAggregation - the criteria time aggregation types. + TimeAggregation interface{} `json:"timeAggregation,omitempty"` + // Dimensions - List of dimension conditions. + Dimensions *[]MetricDimension `json:"dimensions,omitempty"` + // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion', 'CriterionTypeDynamicThresholdCriterion' CriterionType CriterionType `json:"criterionType,omitempty"` } @@ -4301,9 +4356,13 @@ func unmarshalBasicMultiMetricCriteria(body []byte) (BasicMultiMetricCriteria, e switch m["criterionType"] { case string(CriterionTypeStaticThresholdCriterion): - var mc MetricCriteria - err := json.Unmarshal(body, &mc) - return mc, err + var smc StaticMetricCriteria + err := json.Unmarshal(body, &smc) + return smc, err + case string(CriterionTypeDynamicThresholdCriterion): + var dmc DynamicMetricCriteria + err := json.Unmarshal(body, &dmc) + return dmc, err default: var mmc MultiMetricCriteria err := json.Unmarshal(body, &mmc) @@ -4333,6 +4392,21 @@ func unmarshalBasicMultiMetricCriteriaArray(body []byte) ([]BasicMultiMetricCrit func (mmc MultiMetricCriteria) MarshalJSON() ([]byte, error) { mmc.CriterionType = CriterionTypeMultiMetricCriteria objectMap := make(map[string]interface{}) + if mmc.Name != nil { + objectMap["name"] = mmc.Name + } + if mmc.MetricName != nil { + objectMap["metricName"] = mmc.MetricName + } + if mmc.MetricNamespace != nil { + objectMap["metricNamespace"] = mmc.MetricNamespace + } + if mmc.TimeAggregation != nil { + objectMap["timeAggregation"] = mmc.TimeAggregation + } + if mmc.Dimensions != nil { + objectMap["dimensions"] = mmc.Dimensions + } if mmc.CriterionType != "" { objectMap["criterionType"] = mmc.CriterionType } @@ -4342,8 +4416,13 @@ func (mmc MultiMetricCriteria) MarshalJSON() ([]byte, error) { return json.Marshal(objectMap) } -// AsMetricCriteria is the BasicMultiMetricCriteria implementation for MultiMetricCriteria. -func (mmc MultiMetricCriteria) AsMetricCriteria() (*MetricCriteria, bool) { +// AsStaticMetricCriteria is the BasicMultiMetricCriteria implementation for MultiMetricCriteria. +func (mmc MultiMetricCriteria) AsStaticMetricCriteria() (*StaticMetricCriteria, bool) { + return nil, false +} + +// AsDynamicMetricCriteria is the BasicMultiMetricCriteria implementation for MultiMetricCriteria. +func (mmc MultiMetricCriteria) AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) { return nil, false } @@ -4378,6 +4457,51 @@ func (mmc *MultiMetricCriteria) UnmarshalJSON(body []byte) error { } mmc.AdditionalProperties[k] = additionalProperties } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + mmc.Name = &name + } + case "metricName": + if v != nil { + var metricName string + err = json.Unmarshal(*v, &metricName) + if err != nil { + return err + } + mmc.MetricName = &metricName + } + case "metricNamespace": + if v != nil { + var metricNamespace string + err = json.Unmarshal(*v, &metricNamespace) + if err != nil { + return err + } + mmc.MetricNamespace = &metricNamespace + } + case "timeAggregation": + if v != nil { + var timeAggregation interface{} + err = json.Unmarshal(*v, &timeAggregation) + if err != nil { + return err + } + mmc.TimeAggregation = timeAggregation + } + case "dimensions": + if v != nil { + var dimensions []MetricDimension + err = json.Unmarshal(*v, &dimensions) + if err != nil { + return err + } + mmc.Dimensions = &dimensions + } case "criterionType": if v != nil { var criterionType CriterionType @@ -5140,6 +5264,181 @@ type Source struct { QueryType QueryType `json:"queryType,omitempty"` } +// StaticMetricCriteria criterion to filter metrics. +type StaticMetricCriteria struct { + // Operator - the criteria operator. + Operator interface{} `json:"operator,omitempty"` + // Threshold - the criteria threshold value that activates the alert. + Threshold *float64 `json:"threshold,omitempty"` + // AdditionalProperties - Unmatched properties from the message are deserialized this collection + AdditionalProperties map[string]interface{} `json:""` + // Name - Name of the criteria. + Name *string `json:"name,omitempty"` + // MetricName - Name of the metric. + MetricName *string `json:"metricName,omitempty"` + // MetricNamespace - Namespace of the metric. + MetricNamespace *string `json:"metricNamespace,omitempty"` + // TimeAggregation - the criteria time aggregation types. + TimeAggregation interface{} `json:"timeAggregation,omitempty"` + // Dimensions - List of dimension conditions. + Dimensions *[]MetricDimension `json:"dimensions,omitempty"` + // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion', 'CriterionTypeDynamicThresholdCriterion' + CriterionType CriterionType `json:"criterionType,omitempty"` +} + +// MarshalJSON is the custom marshaler for StaticMetricCriteria. +func (smc StaticMetricCriteria) MarshalJSON() ([]byte, error) { + smc.CriterionType = CriterionTypeStaticThresholdCriterion + objectMap := make(map[string]interface{}) + if smc.Operator != nil { + objectMap["operator"] = smc.Operator + } + if smc.Threshold != nil { + objectMap["threshold"] = smc.Threshold + } + if smc.Name != nil { + objectMap["name"] = smc.Name + } + if smc.MetricName != nil { + objectMap["metricName"] = smc.MetricName + } + if smc.MetricNamespace != nil { + objectMap["metricNamespace"] = smc.MetricNamespace + } + if smc.TimeAggregation != nil { + objectMap["timeAggregation"] = smc.TimeAggregation + } + if smc.Dimensions != nil { + objectMap["dimensions"] = smc.Dimensions + } + if smc.CriterionType != "" { + objectMap["criterionType"] = smc.CriterionType + } + for k, v := range smc.AdditionalProperties { + objectMap[k] = v + } + return json.Marshal(objectMap) +} + +// AsStaticMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsStaticMetricCriteria() (*StaticMetricCriteria, bool) { + return &smc, true +} + +// AsDynamicMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) { + return nil, false +} + +// AsMultiMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) { + return nil, false +} + +// AsBasicMultiMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsBasicMultiMetricCriteria() (BasicMultiMetricCriteria, bool) { + return &smc, true +} + +// UnmarshalJSON is the custom unmarshaler for StaticMetricCriteria struct. +func (smc *StaticMetricCriteria) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "operator": + if v != nil { + var operator interface{} + err = json.Unmarshal(*v, &operator) + if err != nil { + return err + } + smc.Operator = operator + } + case "threshold": + if v != nil { + var threshold float64 + err = json.Unmarshal(*v, &threshold) + if err != nil { + return err + } + smc.Threshold = &threshold + } + default: + if v != nil { + var additionalProperties interface{} + err = json.Unmarshal(*v, &additionalProperties) + if err != nil { + return err + } + if smc.AdditionalProperties == nil { + smc.AdditionalProperties = make(map[string]interface{}) + } + smc.AdditionalProperties[k] = additionalProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + smc.Name = &name + } + case "metricName": + if v != nil { + var metricName string + err = json.Unmarshal(*v, &metricName) + if err != nil { + return err + } + smc.MetricName = &metricName + } + case "metricNamespace": + if v != nil { + var metricNamespace string + err = json.Unmarshal(*v, &metricNamespace) + if err != nil { + return err + } + smc.MetricNamespace = &metricNamespace + } + case "timeAggregation": + if v != nil { + var timeAggregation interface{} + err = json.Unmarshal(*v, &timeAggregation) + if err != nil { + return err + } + smc.TimeAggregation = timeAggregation + } + case "dimensions": + if v != nil { + var dimensions []MetricDimension + err = json.Unmarshal(*v, &dimensions) + if err != nil { + return err + } + smc.Dimensions = &dimensions + } + case "criterionType": + if v != nil { + var criterionType CriterionType + err = json.Unmarshal(*v, &criterionType) + if err != nil { + return err + } + smc.CriterionType = criterionType + } + } + } + + return nil +} + // ThresholdRuleCondition a rule condition based on a metric crossing a threshold. type ThresholdRuleCondition struct { // Operator - the operator used to compare the data and the threshold. Possible values include: 'ConditionOperatorGreaterThan', 'ConditionOperatorGreaterThanOrEqual', 'ConditionOperatorLessThan', 'ConditionOperatorLessThanOrEqual' diff --git a/services/preview/monitor/mgmt/2019-03-01/insights/models.go b/services/preview/monitor/mgmt/2019-03-01/insights/models.go index f08489d972c9..2eeeebdd3e1e 100644 --- a/services/preview/monitor/mgmt/2019-03-01/insights/models.go +++ b/services/preview/monitor/mgmt/2019-03-01/insights/models.go @@ -169,6 +169,8 @@ func PossibleConditionOperatorValues() []ConditionOperator { type CriterionType string const ( + // CriterionTypeDynamicThresholdCriterion ... + CriterionTypeDynamicThresholdCriterion CriterionType = "DynamicThresholdCriterion" // CriterionTypeMultiMetricCriteria ... CriterionTypeMultiMetricCriteria CriterionType = "MultiMetricCriteria" // CriterionTypeStaticThresholdCriterion ... @@ -177,7 +179,7 @@ const ( // PossibleCriterionTypeValues returns an array of possible values for the CriterionType const type. func PossibleCriterionTypeValues() []CriterionType { - return []CriterionType{CriterionTypeMultiMetricCriteria, CriterionTypeStaticThresholdCriterion} + return []CriterionType{CriterionTypeDynamicThresholdCriterion, CriterionTypeMultiMetricCriteria, CriterionTypeStaticThresholdCriterion} } // DataStatus enumerates the values for data status. @@ -2188,6 +2190,218 @@ type Dimension struct { Values *[]string `json:"values,omitempty"` } +// DynamicMetricCriteria criterion for dynamic threshold. +type DynamicMetricCriteria struct { + // Operator - The operator used to compare the metric value against the threshold. + Operator interface{} `json:"operator,omitempty"` + // AlertSensitivity - The extent of deviation required to trigger an alert. This will affect how tight the threshold is to the metric series pattern. + AlertSensitivity interface{} `json:"alertSensitivity,omitempty"` + // FailingPeriods - The minimum number of violations required within the selected lookback time window required to raise an alert. + FailingPeriods *DynamicThresholdFailingPeriods `json:"failingPeriods,omitempty"` + // IgnoreDataBefore - Use this option to set the date from which to start learning the metric historical data and calculate the dynamic thresholds (in ISO8601 format) + IgnoreDataBefore *date.Time `json:"ignoreDataBefore,omitempty"` + // AdditionalProperties - Unmatched properties from the message are deserialized this collection + AdditionalProperties map[string]interface{} `json:""` + // Name - Name of the criteria. + Name *string `json:"name,omitempty"` + // MetricName - Name of the metric. + MetricName *string `json:"metricName,omitempty"` + // MetricNamespace - Namespace of the metric. + MetricNamespace *string `json:"metricNamespace,omitempty"` + // TimeAggregation - the criteria time aggregation types. + TimeAggregation interface{} `json:"timeAggregation,omitempty"` + // Dimensions - List of dimension conditions. + Dimensions *[]MetricDimension `json:"dimensions,omitempty"` + // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion', 'CriterionTypeDynamicThresholdCriterion' + CriterionType CriterionType `json:"criterionType,omitempty"` +} + +// MarshalJSON is the custom marshaler for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) MarshalJSON() ([]byte, error) { + dmc.CriterionType = CriterionTypeDynamicThresholdCriterion + objectMap := make(map[string]interface{}) + if dmc.Operator != nil { + objectMap["operator"] = dmc.Operator + } + if dmc.AlertSensitivity != nil { + objectMap["alertSensitivity"] = dmc.AlertSensitivity + } + if dmc.FailingPeriods != nil { + objectMap["failingPeriods"] = dmc.FailingPeriods + } + if dmc.IgnoreDataBefore != nil { + objectMap["ignoreDataBefore"] = dmc.IgnoreDataBefore + } + if dmc.Name != nil { + objectMap["name"] = dmc.Name + } + if dmc.MetricName != nil { + objectMap["metricName"] = dmc.MetricName + } + if dmc.MetricNamespace != nil { + objectMap["metricNamespace"] = dmc.MetricNamespace + } + if dmc.TimeAggregation != nil { + objectMap["timeAggregation"] = dmc.TimeAggregation + } + if dmc.Dimensions != nil { + objectMap["dimensions"] = dmc.Dimensions + } + if dmc.CriterionType != "" { + objectMap["criterionType"] = dmc.CriterionType + } + for k, v := range dmc.AdditionalProperties { + objectMap[k] = v + } + return json.Marshal(objectMap) +} + +// AsStaticMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsStaticMetricCriteria() (*StaticMetricCriteria, bool) { + return nil, false +} + +// AsDynamicMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) { + return &dmc, true +} + +// AsMultiMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) { + return nil, false +} + +// AsBasicMultiMetricCriteria is the BasicMultiMetricCriteria implementation for DynamicMetricCriteria. +func (dmc DynamicMetricCriteria) AsBasicMultiMetricCriteria() (BasicMultiMetricCriteria, bool) { + return &dmc, true +} + +// UnmarshalJSON is the custom unmarshaler for DynamicMetricCriteria struct. +func (dmc *DynamicMetricCriteria) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "operator": + if v != nil { + var operator interface{} + err = json.Unmarshal(*v, &operator) + if err != nil { + return err + } + dmc.Operator = operator + } + case "alertSensitivity": + if v != nil { + var alertSensitivity interface{} + err = json.Unmarshal(*v, &alertSensitivity) + if err != nil { + return err + } + dmc.AlertSensitivity = alertSensitivity + } + case "failingPeriods": + if v != nil { + var failingPeriods DynamicThresholdFailingPeriods + err = json.Unmarshal(*v, &failingPeriods) + if err != nil { + return err + } + dmc.FailingPeriods = &failingPeriods + } + case "ignoreDataBefore": + if v != nil { + var ignoreDataBefore date.Time + err = json.Unmarshal(*v, &ignoreDataBefore) + if err != nil { + return err + } + dmc.IgnoreDataBefore = &ignoreDataBefore + } + default: + if v != nil { + var additionalProperties interface{} + err = json.Unmarshal(*v, &additionalProperties) + if err != nil { + return err + } + if dmc.AdditionalProperties == nil { + dmc.AdditionalProperties = make(map[string]interface{}) + } + dmc.AdditionalProperties[k] = additionalProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + dmc.Name = &name + } + case "metricName": + if v != nil { + var metricName string + err = json.Unmarshal(*v, &metricName) + if err != nil { + return err + } + dmc.MetricName = &metricName + } + case "metricNamespace": + if v != nil { + var metricNamespace string + err = json.Unmarshal(*v, &metricNamespace) + if err != nil { + return err + } + dmc.MetricNamespace = &metricNamespace + } + case "timeAggregation": + if v != nil { + var timeAggregation interface{} + err = json.Unmarshal(*v, &timeAggregation) + if err != nil { + return err + } + dmc.TimeAggregation = timeAggregation + } + case "dimensions": + if v != nil { + var dimensions []MetricDimension + err = json.Unmarshal(*v, &dimensions) + if err != nil { + return err + } + dmc.Dimensions = &dimensions + } + case "criterionType": + if v != nil { + var criterionType CriterionType + err = json.Unmarshal(*v, &criterionType) + if err != nil { + return err + } + dmc.CriterionType = criterionType + } + } + } + + return nil +} + +// DynamicThresholdFailingPeriods the minimum number of violations required within the selected lookback +// time window required to raise an alert. +type DynamicThresholdFailingPeriods struct { + // NumberOfEvaluationPeriods - The number of aggregated lookback points. The lookback time window is calculated based on the aggregation granularity (windowSize) and the selected number of aggregated points. + NumberOfEvaluationPeriods *float64 `json:"numberOfEvaluationPeriods,omitempty"` + // MinFailingPeriodsToAlert - The number of violations to trigger an alert. Should be smaller or equal to numberOfEvaluationPeriods. + MinFailingPeriodsToAlert *float64 `json:"minFailingPeriodsToAlert,omitempty"` +} + // EmailNotification email notification of an autoscale event. type EmailNotification struct { // SendToSubscriptionAdministrator - a value indicating whether to send email to subscription administrator. @@ -3888,7 +4102,7 @@ func (marp *MetricAlertResourcePatch) UnmarshalJSON(body []byte) error { // resource that has multiple metric criteria. type MetricAlertSingleResourceMultipleMetricCriteria struct { // AllOf - The list of metric criteria for this 'all of' operation. - AllOf *[]MetricCriteria `json:"allOf,omitempty"` + AllOf *[]StaticMetricCriteria `json:"allOf,omitempty"` // AdditionalProperties - Unmatched properties from the message are deserialized this collection AdditionalProperties map[string]interface{} `json:""` // OdataType - Possible values include: 'OdataTypeMetricAlertCriteria', 'OdataTypeMicrosoftAzureMonitorSingleResourceMultipleMetricCriteria', 'OdataTypeMicrosoftAzureMonitorMultipleResourceMultipleMetricCriteria' @@ -3942,7 +4156,7 @@ func (masrmmc *MetricAlertSingleResourceMultipleMetricCriteria) UnmarshalJSON(bo switch k { case "allOf": if v != nil { - var allOf []MetricCriteria + var allOf []StaticMetricCriteria err = json.Unmarshal(*v, &allOf) if err != nil { return err @@ -4048,176 +4262,6 @@ type MetricBaselinesResponse struct { Value *[]SingleMetricBaseline `json:"value,omitempty"` } -// MetricCriteria criterion to filter metrics. -type MetricCriteria struct { - // Name - Name of the criteria. - Name *string `json:"name,omitempty"` - // MetricName - Name of the metric. - MetricName *string `json:"metricName,omitempty"` - // MetricNamespace - Namespace of the metric. - MetricNamespace *string `json:"metricNamespace,omitempty"` - // Operator - the criteria operator. - Operator interface{} `json:"operator,omitempty"` - // TimeAggregation - the criteria time aggregation types. - TimeAggregation interface{} `json:"timeAggregation,omitempty"` - // Threshold - the criteria threshold value that activates the alert. - Threshold *float64 `json:"threshold,omitempty"` - // Dimensions - List of dimension conditions. - Dimensions *[]MetricDimension `json:"dimensions,omitempty"` - // AdditionalProperties - Unmatched properties from the message are deserialized this collection - AdditionalProperties map[string]interface{} `json:""` - // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion' - CriterionType CriterionType `json:"criterionType,omitempty"` -} - -// MarshalJSON is the custom marshaler for MetricCriteria. -func (mc MetricCriteria) MarshalJSON() ([]byte, error) { - mc.CriterionType = CriterionTypeStaticThresholdCriterion - objectMap := make(map[string]interface{}) - if mc.Name != nil { - objectMap["name"] = mc.Name - } - if mc.MetricName != nil { - objectMap["metricName"] = mc.MetricName - } - if mc.MetricNamespace != nil { - objectMap["metricNamespace"] = mc.MetricNamespace - } - if mc.Operator != nil { - objectMap["operator"] = mc.Operator - } - if mc.TimeAggregation != nil { - objectMap["timeAggregation"] = mc.TimeAggregation - } - if mc.Threshold != nil { - objectMap["threshold"] = mc.Threshold - } - if mc.Dimensions != nil { - objectMap["dimensions"] = mc.Dimensions - } - if mc.CriterionType != "" { - objectMap["criterionType"] = mc.CriterionType - } - for k, v := range mc.AdditionalProperties { - objectMap[k] = v - } - return json.Marshal(objectMap) -} - -// AsMetricCriteria is the BasicMultiMetricCriteria implementation for MetricCriteria. -func (mc MetricCriteria) AsMetricCriteria() (*MetricCriteria, bool) { - return &mc, true -} - -// AsMultiMetricCriteria is the BasicMultiMetricCriteria implementation for MetricCriteria. -func (mc MetricCriteria) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) { - return nil, false -} - -// AsBasicMultiMetricCriteria is the BasicMultiMetricCriteria implementation for MetricCriteria. -func (mc MetricCriteria) AsBasicMultiMetricCriteria() (BasicMultiMetricCriteria, bool) { - return &mc, true -} - -// UnmarshalJSON is the custom unmarshaler for MetricCriteria struct. -func (mc *MetricCriteria) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - mc.Name = &name - } - case "metricName": - if v != nil { - var metricName string - err = json.Unmarshal(*v, &metricName) - if err != nil { - return err - } - mc.MetricName = &metricName - } - case "metricNamespace": - if v != nil { - var metricNamespace string - err = json.Unmarshal(*v, &metricNamespace) - if err != nil { - return err - } - mc.MetricNamespace = &metricNamespace - } - case "operator": - if v != nil { - var operator interface{} - err = json.Unmarshal(*v, &operator) - if err != nil { - return err - } - mc.Operator = operator - } - case "timeAggregation": - if v != nil { - var timeAggregation interface{} - err = json.Unmarshal(*v, &timeAggregation) - if err != nil { - return err - } - mc.TimeAggregation = timeAggregation - } - case "threshold": - if v != nil { - var threshold float64 - err = json.Unmarshal(*v, &threshold) - if err != nil { - return err - } - mc.Threshold = &threshold - } - case "dimensions": - if v != nil { - var dimensions []MetricDimension - err = json.Unmarshal(*v, &dimensions) - if err != nil { - return err - } - mc.Dimensions = &dimensions - } - default: - if v != nil { - var additionalProperties interface{} - err = json.Unmarshal(*v, &additionalProperties) - if err != nil { - return err - } - if mc.AdditionalProperties == nil { - mc.AdditionalProperties = make(map[string]interface{}) - } - mc.AdditionalProperties[k] = additionalProperties - } - case "criterionType": - if v != nil { - var criterionType CriterionType - err = json.Unmarshal(*v, &criterionType) - if err != nil { - return err - } - mc.CriterionType = criterionType - } - } - } - - return nil -} - // MetricDefinition metric definition class specifies the metadata for a metric. type MetricDefinition struct { // IsDimensionRequired - Flag to indicate whether the dimension is required. @@ -4340,17 +4384,28 @@ type MetricValue struct { Count *int64 `json:"count,omitempty"` } -// BasicMultiMetricCriteria the types of conditions for a multi resource alert +// BasicMultiMetricCriteria the types of conditions for a multi resource alert. type BasicMultiMetricCriteria interface { - AsMetricCriteria() (*MetricCriteria, bool) + AsStaticMetricCriteria() (*StaticMetricCriteria, bool) + AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) } -// MultiMetricCriteria the types of conditions for a multi resource alert +// MultiMetricCriteria the types of conditions for a multi resource alert. type MultiMetricCriteria struct { // AdditionalProperties - Unmatched properties from the message are deserialized this collection AdditionalProperties map[string]interface{} `json:""` - // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion' + // Name - Name of the criteria. + Name *string `json:"name,omitempty"` + // MetricName - Name of the metric. + MetricName *string `json:"metricName,omitempty"` + // MetricNamespace - Namespace of the metric. + MetricNamespace *string `json:"metricNamespace,omitempty"` + // TimeAggregation - the criteria time aggregation types. + TimeAggregation interface{} `json:"timeAggregation,omitempty"` + // Dimensions - List of dimension conditions. + Dimensions *[]MetricDimension `json:"dimensions,omitempty"` + // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion', 'CriterionTypeDynamicThresholdCriterion' CriterionType CriterionType `json:"criterionType,omitempty"` } @@ -4363,9 +4418,13 @@ func unmarshalBasicMultiMetricCriteria(body []byte) (BasicMultiMetricCriteria, e switch m["criterionType"] { case string(CriterionTypeStaticThresholdCriterion): - var mc MetricCriteria - err := json.Unmarshal(body, &mc) - return mc, err + var smc StaticMetricCriteria + err := json.Unmarshal(body, &smc) + return smc, err + case string(CriterionTypeDynamicThresholdCriterion): + var dmc DynamicMetricCriteria + err := json.Unmarshal(body, &dmc) + return dmc, err default: var mmc MultiMetricCriteria err := json.Unmarshal(body, &mmc) @@ -4395,6 +4454,21 @@ func unmarshalBasicMultiMetricCriteriaArray(body []byte) ([]BasicMultiMetricCrit func (mmc MultiMetricCriteria) MarshalJSON() ([]byte, error) { mmc.CriterionType = CriterionTypeMultiMetricCriteria objectMap := make(map[string]interface{}) + if mmc.Name != nil { + objectMap["name"] = mmc.Name + } + if mmc.MetricName != nil { + objectMap["metricName"] = mmc.MetricName + } + if mmc.MetricNamespace != nil { + objectMap["metricNamespace"] = mmc.MetricNamespace + } + if mmc.TimeAggregation != nil { + objectMap["timeAggregation"] = mmc.TimeAggregation + } + if mmc.Dimensions != nil { + objectMap["dimensions"] = mmc.Dimensions + } if mmc.CriterionType != "" { objectMap["criterionType"] = mmc.CriterionType } @@ -4404,8 +4478,13 @@ func (mmc MultiMetricCriteria) MarshalJSON() ([]byte, error) { return json.Marshal(objectMap) } -// AsMetricCriteria is the BasicMultiMetricCriteria implementation for MultiMetricCriteria. -func (mmc MultiMetricCriteria) AsMetricCriteria() (*MetricCriteria, bool) { +// AsStaticMetricCriteria is the BasicMultiMetricCriteria implementation for MultiMetricCriteria. +func (mmc MultiMetricCriteria) AsStaticMetricCriteria() (*StaticMetricCriteria, bool) { + return nil, false +} + +// AsDynamicMetricCriteria is the BasicMultiMetricCriteria implementation for MultiMetricCriteria. +func (mmc MultiMetricCriteria) AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) { return nil, false } @@ -4440,6 +4519,51 @@ func (mmc *MultiMetricCriteria) UnmarshalJSON(body []byte) error { } mmc.AdditionalProperties[k] = additionalProperties } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + mmc.Name = &name + } + case "metricName": + if v != nil { + var metricName string + err = json.Unmarshal(*v, &metricName) + if err != nil { + return err + } + mmc.MetricName = &metricName + } + case "metricNamespace": + if v != nil { + var metricNamespace string + err = json.Unmarshal(*v, &metricNamespace) + if err != nil { + return err + } + mmc.MetricNamespace = &metricNamespace + } + case "timeAggregation": + if v != nil { + var timeAggregation interface{} + err = json.Unmarshal(*v, &timeAggregation) + if err != nil { + return err + } + mmc.TimeAggregation = timeAggregation + } + case "dimensions": + if v != nil { + var dimensions []MetricDimension + err = json.Unmarshal(*v, &dimensions) + if err != nil { + return err + } + mmc.Dimensions = &dimensions + } case "criterionType": if v != nil { var criterionType CriterionType @@ -5293,6 +5417,181 @@ type Source struct { QueryType QueryType `json:"queryType,omitempty"` } +// StaticMetricCriteria criterion to filter metrics. +type StaticMetricCriteria struct { + // Operator - the criteria operator. + Operator interface{} `json:"operator,omitempty"` + // Threshold - the criteria threshold value that activates the alert. + Threshold *float64 `json:"threshold,omitempty"` + // AdditionalProperties - Unmatched properties from the message are deserialized this collection + AdditionalProperties map[string]interface{} `json:""` + // Name - Name of the criteria. + Name *string `json:"name,omitempty"` + // MetricName - Name of the metric. + MetricName *string `json:"metricName,omitempty"` + // MetricNamespace - Namespace of the metric. + MetricNamespace *string `json:"metricNamespace,omitempty"` + // TimeAggregation - the criteria time aggregation types. + TimeAggregation interface{} `json:"timeAggregation,omitempty"` + // Dimensions - List of dimension conditions. + Dimensions *[]MetricDimension `json:"dimensions,omitempty"` + // CriterionType - Possible values include: 'CriterionTypeMultiMetricCriteria', 'CriterionTypeStaticThresholdCriterion', 'CriterionTypeDynamicThresholdCriterion' + CriterionType CriterionType `json:"criterionType,omitempty"` +} + +// MarshalJSON is the custom marshaler for StaticMetricCriteria. +func (smc StaticMetricCriteria) MarshalJSON() ([]byte, error) { + smc.CriterionType = CriterionTypeStaticThresholdCriterion + objectMap := make(map[string]interface{}) + if smc.Operator != nil { + objectMap["operator"] = smc.Operator + } + if smc.Threshold != nil { + objectMap["threshold"] = smc.Threshold + } + if smc.Name != nil { + objectMap["name"] = smc.Name + } + if smc.MetricName != nil { + objectMap["metricName"] = smc.MetricName + } + if smc.MetricNamespace != nil { + objectMap["metricNamespace"] = smc.MetricNamespace + } + if smc.TimeAggregation != nil { + objectMap["timeAggregation"] = smc.TimeAggregation + } + if smc.Dimensions != nil { + objectMap["dimensions"] = smc.Dimensions + } + if smc.CriterionType != "" { + objectMap["criterionType"] = smc.CriterionType + } + for k, v := range smc.AdditionalProperties { + objectMap[k] = v + } + return json.Marshal(objectMap) +} + +// AsStaticMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsStaticMetricCriteria() (*StaticMetricCriteria, bool) { + return &smc, true +} + +// AsDynamicMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsDynamicMetricCriteria() (*DynamicMetricCriteria, bool) { + return nil, false +} + +// AsMultiMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsMultiMetricCriteria() (*MultiMetricCriteria, bool) { + return nil, false +} + +// AsBasicMultiMetricCriteria is the BasicMultiMetricCriteria implementation for StaticMetricCriteria. +func (smc StaticMetricCriteria) AsBasicMultiMetricCriteria() (BasicMultiMetricCriteria, bool) { + return &smc, true +} + +// UnmarshalJSON is the custom unmarshaler for StaticMetricCriteria struct. +func (smc *StaticMetricCriteria) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "operator": + if v != nil { + var operator interface{} + err = json.Unmarshal(*v, &operator) + if err != nil { + return err + } + smc.Operator = operator + } + case "threshold": + if v != nil { + var threshold float64 + err = json.Unmarshal(*v, &threshold) + if err != nil { + return err + } + smc.Threshold = &threshold + } + default: + if v != nil { + var additionalProperties interface{} + err = json.Unmarshal(*v, &additionalProperties) + if err != nil { + return err + } + if smc.AdditionalProperties == nil { + smc.AdditionalProperties = make(map[string]interface{}) + } + smc.AdditionalProperties[k] = additionalProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + smc.Name = &name + } + case "metricName": + if v != nil { + var metricName string + err = json.Unmarshal(*v, &metricName) + if err != nil { + return err + } + smc.MetricName = &metricName + } + case "metricNamespace": + if v != nil { + var metricNamespace string + err = json.Unmarshal(*v, &metricNamespace) + if err != nil { + return err + } + smc.MetricNamespace = &metricNamespace + } + case "timeAggregation": + if v != nil { + var timeAggregation interface{} + err = json.Unmarshal(*v, &timeAggregation) + if err != nil { + return err + } + smc.TimeAggregation = timeAggregation + } + case "dimensions": + if v != nil { + var dimensions []MetricDimension + err = json.Unmarshal(*v, &dimensions) + if err != nil { + return err + } + smc.Dimensions = &dimensions + } + case "criterionType": + if v != nil { + var criterionType CriterionType + err = json.Unmarshal(*v, &criterionType) + if err != nil { + return err + } + smc.CriterionType = criterionType + } + } + } + + return nil +} + // ThresholdRuleCondition a rule condition based on a metric crossing a threshold. type ThresholdRuleCondition struct { // Operator - the operator used to compare the data and the threshold. Possible values include: 'ConditionOperatorGreaterThan', 'ConditionOperatorGreaterThanOrEqual', 'ConditionOperatorLessThan', 'ConditionOperatorLessThanOrEqual'