/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the compute-optimizer-2019-11-01.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.ComputeOptimizer.Model
{
    /// 
    /// Describes a recommendation option for an Auto Scaling group.
    /// 
    public partial class AutoScalingGroupRecommendationOption
    {
        private AutoScalingGroupConfiguration _configuration;
        private MigrationEffort _migrationEffort;
        private double? _performanceRisk;
        private List _projectedUtilizationMetrics = new List();
        private int? _rank;
        private SavingsOpportunity _savingsOpportunity;
        /// 
        /// Gets and sets the property Configuration. 
        /// 
        /// An array of objects that describe an Auto Scaling group configuration.
        /// 
        /// 
        public AutoScalingGroupConfiguration Configuration
        {
            get { return this._configuration; }
            set { this._configuration = value; }
        }
        // Check to see if Configuration property is set
        internal bool IsSetConfiguration()
        {
            return this._configuration != null;
        }
        /// 
        /// Gets and sets the property MigrationEffort. 
        /// 
        /// The level of effort required to migrate from the current instance type to the recommended
        /// instance type.
        /// 
        ///  
        /// 
        /// For example, the migration effort is Low if Amazon EMR is the inferred
        /// workload type and an Amazon Web Services Graviton instance type is recommended. The
        /// migration effort is Medium if a workload type couldn't be inferred but
        /// an Amazon Web Services Graviton instance type is recommended. The migration effort
        /// is VeryLow if both the current and recommended instance types are of
        /// the same CPU architecture.
        /// 
        /// 
        public MigrationEffort MigrationEffort
        {
            get { return this._migrationEffort; }
            set { this._migrationEffort = value; }
        }
        // Check to see if MigrationEffort property is set
        internal bool IsSetMigrationEffort()
        {
            return this._migrationEffort != null;
        }
        /// 
        /// Gets and sets the property PerformanceRisk. 
        /// 
        /// The performance risk of the Auto Scaling group configuration recommendation.
        /// 
        ///  
        /// 
        /// Performance risk indicates the likelihood of the recommended instance type not meeting
        /// the resource needs of your workload. Compute Optimizer calculates an individual performance
        /// risk score for each specification of the recommended instance, including CPU, memory,
        /// EBS throughput, EBS IOPS, disk throughput, disk IOPS, network throughput, and network
        /// PPS. The performance risk of the recommended instance is calculated as the maximum
        /// performance risk score across the analyzed resource specifications.
        /// 
        ///  
        /// 
        /// The value ranges from 0 - 4, with 0 meaning
        /// that the recommended resource is predicted to always provide enough hardware capability.
        /// The higher the performance risk is, the more likely you should validate whether the
        /// recommendation will meet the performance requirements of your workload before migrating
        /// your resource.
        /// 
        /// 
        [AWSProperty(Min=0, Max=4)]
        public double PerformanceRisk
        {
            get { return this._performanceRisk.GetValueOrDefault(); }
            set { this._performanceRisk = value; }
        }
        // Check to see if PerformanceRisk property is set
        internal bool IsSetPerformanceRisk()
        {
            return this._performanceRisk.HasValue; 
        }
        /// 
        /// Gets and sets the property ProjectedUtilizationMetrics. 
        /// 
        /// An array of objects that describe the projected utilization metrics of the Auto Scaling
        /// group recommendation option.
        /// 
        ///   
        /// 
        /// The Cpu and Memory metrics are the only projected utilization
        /// metrics returned. Additionally, the Memory metric is returned only for
        /// resources that have the unified CloudWatch agent installed on them. For more information,
        /// see Enabling
        /// Memory Utilization with the CloudWatch Agent.
        /// 
        ///  
        /// 
        public List ProjectedUtilizationMetrics
        {
            get { return this._projectedUtilizationMetrics; }
            set { this._projectedUtilizationMetrics = value; }
        }
        // Check to see if ProjectedUtilizationMetrics property is set
        internal bool IsSetProjectedUtilizationMetrics()
        {
            return this._projectedUtilizationMetrics != null && this._projectedUtilizationMetrics.Count > 0; 
        }
        /// 
        /// Gets and sets the property Rank. 
        /// 
        /// The rank of the Auto Scaling group recommendation option.
        /// 
        ///  
        /// 
        /// The top recommendation option is ranked as 1.
        /// 
        /// 
        public int Rank
        {
            get { return this._rank.GetValueOrDefault(); }
            set { this._rank = value; }
        }
        // Check to see if Rank property is set
        internal bool IsSetRank()
        {
            return this._rank.HasValue; 
        }
        /// 
        /// Gets and sets the property SavingsOpportunity. 
        /// 
        /// An object that describes the savings opportunity for the Auto Scaling group recommendation
        /// option. Savings opportunity includes the estimated monthly savings amount and percentage.
        /// 
        /// 
        public SavingsOpportunity SavingsOpportunity
        {
            get { return this._savingsOpportunity; }
            set { this._savingsOpportunity = value; }
        }
        // Check to see if SavingsOpportunity property is set
        internal bool IsSetSavingsOpportunity()
        {
            return this._savingsOpportunity != null;
        }
    }
}