/*
 * 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 monitoring-2010-08-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.CloudWatch.Model
{
    /// 
    /// Container for the parameters to the PutMetricAlarm operation.
    /// Creates or updates an alarm and associates it with the specified metric, metric math
    /// expression, anomaly detection model, or Metrics Insights query. For more information
    /// about using a Metrics Insights query for an alarm, see Create
    /// alarms on Metrics Insights queries.
    /// 
    ///  
    /// 
    /// Alarms based on anomaly detection models cannot have Auto Scaling actions.
    /// 
    ///  
    /// 
    /// When this operation creates an alarm, the alarm state is immediately set to INSUFFICIENT_DATA.
    /// The alarm is then evaluated and its state is set appropriately. Any actions associated
    /// with the new state are then executed.
    /// 
    ///  
    /// 
    /// When you update an existing alarm, its state is left unchanged, but the update completely
    /// overwrites the previous configuration of the alarm.
    /// 
    ///  
    /// 
    /// If you are an IAM user, you must have Amazon EC2 permissions for some alarm operations:
    /// 
    ///   -  
    /// 
    /// The iam:CreateServiceLinkedRolepermission for all alarms with EC2 actions
    /// 
    ///
-  
    /// 
    /// The iam:CreateServiceLinkedRolepermissions to create an alarm with Systems
    /// Manager OpsItem or response plan actions.
    /// 
    ///
/// 
    /// The first time you create an alarm in the Amazon Web Services Management Console,
    /// the CLI, or by using the PutMetricAlarm API, CloudWatch creates the necessary service-linked
    /// role for you. The service-linked roles are calledAWSServiceRoleForCloudWatchEvents
    /// and AWSServiceRoleForCloudWatchAlarms_ActionSSM. For more information,
    /// see Amazon
    /// Web Services service-linked role.
    /// 
    ///  
    /// 
    /// Each PutMetricAlarm action has a maximum uncompressed payload of 120
    /// KB.
    /// 
    ///  
    /// 
    ///  Cross-account alarms 
    /// 
    ///  
    /// 
    /// You can set an alarm on metrics in the current account, or in another account. To
    /// create a cross-account alarm that watches a metric in a different account, you must
    /// have completed the following pre-requisites:
    /// 
    ///   -  
    /// 
    /// The account where the metrics are located (the sharing account) must already
    /// have a sharing role named CloudWatch-CrossAccountSharingRole. If it does not
    /// already have this role, you must create it using the instructions in Set up a sharing
    /// account in 
    /// Cross-account cross-Region CloudWatch console. The policy for that role must grant
    /// access to the ID of the account where you are creating the alarm. 
    /// 
    ///  
-  
    /// 
    /// The account where you are creating the alarm (the monitoring account) must
    /// already have a service-linked role named AWSServiceRoleForCloudWatchCrossAccount
    /// to allow CloudWatch to assume the sharing role in the sharing account. If it does
    /// not, you must create it following the directions in Set up a monitoring account
    /// in 
    /// Cross-account cross-Region CloudWatch console.
    /// 
    ///  
/// 
    public partial class PutMetricAlarmRequest : AmazonCloudWatchRequest
    {
        private bool? _actionsEnabled;
        private List _alarmActions = new List();
        private string _alarmDescription;
        private string _alarmName;
        private ComparisonOperator _comparisonOperator;
        private int? _datapointsToAlarm;
        private List _dimensions = new List();
        private string _evaluateLowSampleCountPercentile;
        private int? _evaluationPeriods;
        private string _extendedStatistic;
        private List _insufficientDataActions = new List();
        private string _metricName;
        private List _metrics = new List();
        private string _awsNamespace;
        private List _okActions = new List();
        private int? _period;
        private Statistic _statistic;
        private List _tags = new List();
        private double? _threshold;
        private string _thresholdMetricId;
        private string _treatMissingData;
        private StandardUnit _unit;
        /// 
        /// Gets and sets the property ActionsEnabled. 
        /// 
        /// Indicates whether actions should be executed during any changes to the alarm state.
        /// The default isTRUE.
        /// 
        /// 
        public bool ActionsEnabled
        {
            get { return this._actionsEnabled.GetValueOrDefault(); }
            set { this._actionsEnabled = value; }
        }
        // Check to see if ActionsEnabled property is set
        internal bool IsSetActionsEnabled()
        {
            return this._actionsEnabled.HasValue; 
        }
        /// 
        /// Gets and sets the property AlarmActions. 
        /// 
        /// The actions to execute when this alarm transitions to the ALARM state
        /// from any other state. Each action is specified as an Amazon Resource Name (ARN). Valid
        /// values:
        /// 
        ///  
        /// 
        ///  EC2 actions: 
        /// 
        ///   -  
        /// 
        ///  arn:aws:automate:region:ec2:stop/// 
        ///
-  
        /// 
        ///  arn:aws:automate:region:ec2:terminate/// 
        ///
-  
        /// 
        ///  arn:aws:automate:region:ec2:reboot/// 
        ///
-  
        /// 
        ///  arn:aws:automate:region:ec2:recover/// 
        ///
-  
        /// 
        ///  arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Stop/1.0/// 
        /// 
        ///
-  
        /// 
        ///  arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Terminate/1.0/// 
        /// 
        ///
-  
        /// 
        ///  arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Reboot/1.0/// 
        /// 
        ///
-  
        /// 
        ///  arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Recover/1.0/// 
        /// 
        ///
/// 
        ///  Autoscaling action: 
        /// 
        /// -  
        /// 
        ///  arn:aws:autoscaling:region:account-id:scalingPolicy:policy-id:autoScalingGroupName/group-friendly-name:policyName/policy-friendly-name
        /// /// 
        ///
/// 
        ///  SNS notification action: 
        /// 
        /// -  
        /// 
        ///  arn:aws:sns:region:account-id:sns-topic-name:autoScalingGroupName/group-friendly-name:policyName/policy-friendly-name
        /// /// 
        ///
/// 
        ///  SSM integration actions: 
        /// 
        /// -  
        /// 
        ///  arn:aws:ssm:region:account-id:opsitem:severity#CATEGORY=category-name
        /// /// 
        ///
-  
        /// 
        ///  arn:aws:ssm-incidents::account-id:responseplan/response-plan-name
        /// /// 
        ///
/// 
        [AWSProperty(Max=5)]
        public List AlarmActions
        {
            get { return this._alarmActions; }
            set { this._alarmActions = value; }
        }
        // Check to see if AlarmActions property is set
        internal bool IsSetAlarmActions()
        {
            return this._alarmActions != null && this._alarmActions.Count > 0; 
        }
        /// 
        /// Gets and sets the property AlarmDescription. 
        /// 
        /// The description for the alarm.
        /// 
        /// 
        [AWSProperty(Min=0, Max=1024)]
        public string AlarmDescription
        {
            get { return this._alarmDescription; }
            set { this._alarmDescription = value; }
        }
        // Check to see if AlarmDescription property is set
        internal bool IsSetAlarmDescription()
        {
            return this._alarmDescription != null;
        }
        /// 
        /// Gets and sets the property AlarmName. 
        /// 
        /// The name for the alarm. This name must be unique within the Region.
        /// 
        ///  
        /// 
        /// The name must contain only UTF-8 characters, and can't contain ASCII control characters
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=255)]
        public string AlarmName
        {
            get { return this._alarmName; }
            set { this._alarmName = value; }
        }
        // Check to see if AlarmName property is set
        internal bool IsSetAlarmName()
        {
            return this._alarmName != null;
        }
        /// 
        /// Gets and sets the property ComparisonOperator. 
        /// 
        ///  The arithmetic operation to use when comparing the specified statistic and threshold.
        /// The specified statistic value is used as the first operand.
        /// 
        ///  
        /// 
        /// The valuesLessThanLowerOrGreaterThanUpperThreshold, LessThanLowerThreshold,
        /// and GreaterThanUpperThreshold are used only for alarms based on anomaly
        /// detection models.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public ComparisonOperator ComparisonOperator
        {
            get { return this._comparisonOperator; }
            set { this._comparisonOperator = value; }
        }
        // Check to see if ComparisonOperator property is set
        internal bool IsSetComparisonOperator()
        {
            return this._comparisonOperator != null;
        }
        /// 
        /// Gets and sets the property DatapointsToAlarm. 
        /// 
        /// The number of data points that must be breaching to trigger the alarm. This is used
        /// only if you are setting an "M out of N" alarm. In that case, this value is the M.
        /// For more information, see Evaluating
        /// an Alarm in the Amazon CloudWatch User Guide.
        /// 
        /// 
        [AWSProperty(Min=1)]
        public int DatapointsToAlarm
        {
            get { return this._datapointsToAlarm.GetValueOrDefault(); }
            set { this._datapointsToAlarm = value; }
        }
        // Check to see if DatapointsToAlarm property is set
        internal bool IsSetDatapointsToAlarm()
        {
            return this._datapointsToAlarm.HasValue; 
        }
        /// 
        /// Gets and sets the property Dimensions. 
        /// 
        /// The dimensions for the metric specified in MetricName.
        /// 
        /// 
        [AWSProperty(Max=30)]
        public List Dimensions
        {
            get { return this._dimensions; }
            set { this._dimensions = value; }
        }
        // Check to see if Dimensions property is set
        internal bool IsSetDimensions()
        {
            return this._dimensions != null && this._dimensions.Count > 0; 
        }
        /// 
        /// Gets and sets the property EvaluateLowSampleCountPercentile. 
        /// 
        ///  Used only for alarms based on percentiles. If you specify ignore, the
        /// alarm state does not change during periods with too few data points to be statistically
        /// significant. If you specify evaluate or omit this parameter, the alarm
        /// is always evaluated and possibly changes state no matter how many data points are
        /// available. For more information, see Percentile-Based
        /// CloudWatch Alarms and Low Data Samples.
        /// 
        ///  
        /// 
        /// Valid Values: evaluate | ignore 
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string EvaluateLowSampleCountPercentile
        {
            get { return this._evaluateLowSampleCountPercentile; }
            set { this._evaluateLowSampleCountPercentile = value; }
        }
        // Check to see if EvaluateLowSampleCountPercentile property is set
        internal bool IsSetEvaluateLowSampleCountPercentile()
        {
            return this._evaluateLowSampleCountPercentile != null;
        }
        /// 
        /// Gets and sets the property EvaluationPeriods. 
        /// 
        /// The number of periods over which data is compared to the specified threshold. If you
        /// are setting an alarm that requires that a number of consecutive data points be breaching
        /// to trigger the alarm, this value specifies that number. If you are setting an "M out
        /// of N" alarm, this value is the N.
        /// 
        ///  
        /// 
        /// An alarm's total current evaluation period can be no longer than one day, so this
        /// number multiplied by Period cannot be more than 86,400 seconds.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1)]
        public int EvaluationPeriods
        {
            get { return this._evaluationPeriods.GetValueOrDefault(); }
            set { this._evaluationPeriods = value; }
        }
        // Check to see if EvaluationPeriods property is set
        internal bool IsSetEvaluationPeriods()
        {
            return this._evaluationPeriods.HasValue; 
        }
        /// 
        /// Gets and sets the property ExtendedStatistic. 
        /// 
        /// The percentile statistic for the metric specified in MetricName. Specify
        /// a value between p0.0 and p100. When you call PutMetricAlarm and specify
        /// a MetricName, you must specify either Statistic or ExtendedStatistic,
        /// but not both.
        /// 
        /// 
        public string ExtendedStatistic
        {
            get { return this._extendedStatistic; }
            set { this._extendedStatistic = value; }
        }
        // Check to see if ExtendedStatistic property is set
        internal bool IsSetExtendedStatistic()
        {
            return this._extendedStatistic != null;
        }
        /// 
        /// Gets and sets the property InsufficientDataActions. 
        /// 
        /// The actions to execute when this alarm transitions to the INSUFFICIENT_DATA
        /// state from any other state. Each action is specified as an Amazon Resource Name (ARN).
        /// Valid values:
        /// 
        ///  
        /// 
        ///  EC2 actions: 
        /// 
        ///   -  
        /// 
        ///  arn:aws:automate:region:ec2:stop/// 
        ///
-  
        /// 
        ///  arn:aws:automate:region:ec2:terminate/// 
        ///
-  
        /// 
        ///  arn:aws:automate:region:ec2:reboot/// 
        ///
-  
        /// 
        ///  arn:aws:automate:region:ec2:recover/// 
        ///
-  
        /// 
        ///  arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Stop/1.0/// 
        /// 
        ///
-  
        /// 
        ///  arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Terminate/1.0/// 
        /// 
        ///
-  
        /// 
        ///  arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Reboot/1.0/// 
        /// 
        ///
-  
        /// 
        ///  arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Recover/1.0/// 
        /// 
        ///
/// 
        ///  Autoscaling action: 
        /// 
        /// -  
        /// 
        ///  arn:aws:autoscaling:region:account-id:scalingPolicy:policy-id:autoScalingGroupName/group-friendly-name:policyName/policy-friendly-name
        /// /// 
        ///
/// 
        ///  SNS notification action: 
        /// 
        /// -  
        /// 
        ///  arn:aws:sns:region:account-id:sns-topic-name:autoScalingGroupName/group-friendly-name:policyName/policy-friendly-name
        /// /// 
        ///
/// 
        ///  SSM integration actions: 
        /// 
        /// -  
        /// 
        ///  arn:aws:ssm:region:account-id:opsitem:severity#CATEGORY=category-name
        /// /// 
        ///
-  
        /// 
        ///  arn:aws:ssm-incidents::account-id:responseplan/response-plan-name
        /// /// 
        ///
/// 
        [AWSProperty(Max=5)]
        public List InsufficientDataActions
        {
            get { return this._insufficientDataActions; }
            set { this._insufficientDataActions = value; }
        }
        // Check to see if InsufficientDataActions property is set
        internal bool IsSetInsufficientDataActions()
        {
            return this._insufficientDataActions != null && this._insufficientDataActions.Count > 0; 
        }
        /// 
        /// Gets and sets the property MetricName. 
        /// 
        /// The name for the metric associated with the alarm. For eachPutMetricAlarm
        /// operation, you must specify either MetricName or a Metrics
        /// array.
        /// 
        ///  
        /// 
        /// If you are creating an alarm based on a math expression, you cannot specify this parameter,
        /// or any of the Dimensions, Period, Namespace,
        /// Statistic, or ExtendedStatistic parameters. Instead, you
        /// specify all this information in the Metrics array.
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string MetricName
        {
            get { return this._metricName; }
            set { this._metricName = value; }
        }
        // Check to see if MetricName property is set
        internal bool IsSetMetricName()
        {
            return this._metricName != null;
        }
        /// 
        /// Gets and sets the property Metrics. 
        /// 
        /// An array of MetricDataQuery structures that enable you to create an alarm
        /// based on the result of a metric math expression. For each PutMetricAlarm
        /// operation, you must specify either MetricName or a Metrics
        /// array.
        /// 
        ///  
        /// 
        /// Each item in the Metrics array either retrieves a metric or performs
        /// a math expression.
        /// 
        ///  
        /// 
        /// One item in the Metrics array is the expression that the alarm watches.
        /// You designate this expression by setting ReturnData to true for this
        /// object in the array. For more information, see MetricDataQuery.
        /// 
        ///  
        /// 
        /// If you use the Metrics parameter, you cannot include the MetricName,
        /// Dimensions, Period, Namespace, Statistic,
        /// or ExtendedStatistic parameters of PutMetricAlarm in the
        /// same operation. Instead, you retrieve the metrics you are using in your math expression
        /// as part of the Metrics array.
        /// 
        /// 
        public List Metrics
        {
            get { return this._metrics; }
            set { this._metrics = value; }
        }
        // Check to see if Metrics property is set
        internal bool IsSetMetrics()
        {
            return this._metrics != null && this._metrics.Count > 0; 
        }
        /// 
        /// Gets and sets the property Namespace. 
        /// 
        /// The namespace for the metric associated specified in MetricName.
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string Namespace
        {
            get { return this._awsNamespace; }
            set { this._awsNamespace = value; }
        }
        // Check to see if Namespace property is set
        internal bool IsSetNamespace()
        {
            return this._awsNamespace != null;
        }
        /// 
        /// Gets and sets the property OKActions. 
        /// 
        /// The actions to execute when this alarm transitions to an OK state from
        /// any other state. Each action is specified as an Amazon Resource Name (ARN). Valid
        /// values:
        /// 
        ///  
        /// 
        ///  EC2 actions: 
        /// 
        ///   -  
        /// 
        ///  arn:aws:automate:region:ec2:stop/// 
        ///
-  
        /// 
        ///  arn:aws:automate:region:ec2:terminate/// 
        ///
-  
        /// 
        ///  arn:aws:automate:region:ec2:reboot/// 
        ///
-  
        /// 
        ///  arn:aws:automate:region:ec2:recover/// 
        ///
-  
        /// 
        ///  arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Stop/1.0/// 
        /// 
        ///
-  
        /// 
        ///  arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Terminate/1.0/// 
        /// 
        ///
-  
        /// 
        ///  arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Reboot/1.0/// 
        /// 
        ///
-  
        /// 
        ///  arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Recover/1.0/// 
        /// 
        ///
/// 
        ///  Autoscaling action: 
        /// 
        /// -  
        /// 
        ///  arn:aws:autoscaling:region:account-id:scalingPolicy:policy-id:autoScalingGroupName/group-friendly-name:policyName/policy-friendly-name
        /// /// 
        ///
/// 
        ///  SNS notification action: 
        /// 
        /// -  
        /// 
        ///  arn:aws:sns:region:account-id:sns-topic-name:autoScalingGroupName/group-friendly-name:policyName/policy-friendly-name
        /// /// 
        ///
/// 
        ///  SSM integration actions: 
        /// 
        /// -  
        /// 
        ///  arn:aws:ssm:region:account-id:opsitem:severity#CATEGORY=category-name
        /// /// 
        ///
-  
        /// 
        ///  arn:aws:ssm-incidents::account-id:responseplan/response-plan-name
        /// /// 
        ///
/// 
        [AWSProperty(Max=5)]
        public List OKActions
        {
            get { return this._okActions; }
            set { this._okActions = value; }
        }
        // Check to see if OKActions property is set
        internal bool IsSetOKActions()
        {
            return this._okActions != null && this._okActions.Count > 0; 
        }
        /// 
        /// Gets and sets the property Period. 
        /// 
        /// The length, in seconds, used each time the metric specified inMetricName
        /// is evaluated. Valid values are 10, 30, and any multiple of 60.
        /// 
        ///  
        /// 
        ///  Period is required for alarms based on static thresholds. If you are
        /// creating an alarm based on a metric math expression, you specify the period for each
        /// metric within the objects in the Metrics array.
        /// 
        ///  
        /// 
        /// Be sure to specify 10 or 30 only for metrics that are stored by a PutMetricData
        /// call with a StorageResolution of 1. If you specify a period of 10 or
        /// 30 for a metric that does not have sub-minute resolution, the alarm still attempts
        /// to gather data at the period rate that you specify. In this case, it does not receive
        /// data for the attempts that do not correspond to a one-minute data resolution, and
        /// the alarm might often lapse into INSUFFICENT_DATA status. Specifying 10 or 30 also
        /// sets this alarm as a high-resolution alarm, which has a higher charge than other alarms.
        /// For more information about pricing, see Amazon
        /// CloudWatch Pricing.
        /// 
        ///  
        /// 
        /// An alarm's total current evaluation period can be no longer than one day, so Period
        /// multiplied by EvaluationPeriods cannot be more than 86,400 seconds.
        /// 
        /// 
        [AWSProperty(Min=1)]
        public int Period
        {
            get { return this._period.GetValueOrDefault(); }
            set { this._period = value; }
        }
        // Check to see if Period property is set
        internal bool IsSetPeriod()
        {
            return this._period.HasValue; 
        }
        /// 
        /// Gets and sets the property Statistic. 
        /// 
        /// The statistic for the metric specified in MetricName, other than percentile.
        /// For percentile statistics, use ExtendedStatistic. When you call PutMetricAlarm
        /// and specify a MetricName, you must specify either Statistic
        /// or ExtendedStatistic, but not both.
        /// 
        /// 
        public Statistic Statistic
        {
            get { return this._statistic; }
            set { this._statistic = value; }
        }
        // Check to see if Statistic property is set
        internal bool IsSetStatistic()
        {
            return this._statistic != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// A list of key-value pairs to associate with the alarm. You can associate as many as
        /// 50 tags with an alarm.
        /// 
        ///  
        /// 
        /// Tags can help you organize and categorize your resources. You can also use them to
        /// scope user permissions by granting a user permission to access or change only resources
        /// with certain tag values.
        /// 
        ///  
        /// 
        /// If you are using this operation to update an existing alarm, any tags you specify
        /// in this parameter are ignored. To change the tags of an existing alarm, use TagResource
        /// or UntagResource.
        /// 
        /// 
        public List Tags
        {
            get { return this._tags; }
            set { this._tags = value; }
        }
        // Check to see if Tags property is set
        internal bool IsSetTags()
        {
            return this._tags != null && this._tags.Count > 0; 
        }
        /// 
        /// Gets and sets the property Threshold. 
        /// 
        /// The value against which the specified statistic is compared.
        /// 
        ///  
        /// 
        /// This parameter is required for alarms based on static thresholds, but should not be
        /// used for alarms based on anomaly detection models.
        /// 
        /// 
        public double Threshold
        {
            get { return this._threshold.GetValueOrDefault(); }
            set { this._threshold = value; }
        }
        // Check to see if Threshold property is set
        internal bool IsSetThreshold()
        {
            return this._threshold.HasValue; 
        }
        /// 
        /// Gets and sets the property ThresholdMetricId. 
        /// 
        /// If this is an alarm based on an anomaly detection model, make this value match the
        /// ID of the ANOMALY_DETECTION_BAND function.
        /// 
        ///  
        /// 
        /// For an example of how to use this parameter, see the Anomaly Detection Model Alarm
        /// example on this page.
        /// 
        ///  
        /// 
        /// If your alarm uses this parameter, it cannot have Auto Scaling actions.
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string ThresholdMetricId
        {
            get { return this._thresholdMetricId; }
            set { this._thresholdMetricId = value; }
        }
        // Check to see if ThresholdMetricId property is set
        internal bool IsSetThresholdMetricId()
        {
            return this._thresholdMetricId != null;
        }
        /// 
        /// Gets and sets the property TreatMissingData. 
        /// 
        ///  Sets how this alarm is to handle missing data points. If TreatMissingData
        /// is omitted, the default behavior of missing is used. For more information,
        /// see Configuring
        /// How CloudWatch Alarms Treats Missing Data.
        /// 
        ///  
        /// 
        /// Valid Values: breaching | notBreaching | ignore | missing 
        /// 
        ///   
        /// 
        /// Alarms that evaluate metrics in the AWS/DynamoDB namespace always ignore
        /// missing data even if you choose a different option for TreatMissingData.
        /// When an AWS/DynamoDB metric has missing data, alarms that evaluate that
        /// metric remain in their current state.
        /// 
        ///  
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string TreatMissingData
        {
            get { return this._treatMissingData; }
            set { this._treatMissingData = value; }
        }
        // Check to see if TreatMissingData property is set
        internal bool IsSetTreatMissingData()
        {
            return this._treatMissingData != null;
        }
        /// 
        /// Gets and sets the property Unit. 
        /// 
        /// The unit of measure for the statistic. For example, the units for the Amazon EC2 NetworkIn
        /// metric are Bytes because NetworkIn tracks the number of bytes that an instance receives
        /// on all network interfaces. You can also specify a unit when you create a custom metric.
        /// Units help provide conceptual meaning to your data. Metric data points that specify
        /// a unit of measure, such as Percent, are aggregated separately.
        /// 
        ///  
        /// 
        /// If you don't specify Unit, CloudWatch retrieves all unit types that have
        /// been published for the metric and attempts to evaluate the alarm. Usually, metrics
        /// are published with only one unit, so the alarm works as intended.
        /// 
        ///  
        /// 
        /// However, if the metric is published with multiple types of units and you don't specify
        /// a unit, the alarm's behavior is not defined and it behaves unpredictably.
        /// 
        ///  
        /// 
        /// We recommend omitting Unit so that you don't inadvertently specify an
        /// incorrect unit that is not published for this metric. Doing so causes the alarm to
        /// be stuck in the INSUFFICIENT DATA state.
        /// 
        /// 
        public StandardUnit Unit
        {
            get { return this._unit; }
            set { this._unit = value; }
        }
        // Check to see if Unit property is set
        internal bool IsSetUnit()
        {
            return this._unit != null;
        }
    }
}