{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.ApplicationAutoScaling.Types.Product -- Copyright : (c) 2013-2016 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- module Network.AWS.ApplicationAutoScaling.Types.Product where import Network.AWS.ApplicationAutoScaling.Types.Sum import Network.AWS.Lens import Network.AWS.Prelude -- | An object representing a CloudWatch alarm associated with a scaling policy. -- -- /See:/ 'alarm' smart constructor. data Alarm = Alarm' { _aAlarmName :: !Text , _aAlarmARN :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'Alarm' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'aAlarmName' -- -- * 'aAlarmARN' alarm :: Text -- ^ 'aAlarmName' -> Text -- ^ 'aAlarmARN' -> Alarm alarm pAlarmName_ pAlarmARN_ = Alarm' { _aAlarmName = pAlarmName_ , _aAlarmARN = pAlarmARN_ } -- | The name of the alarm. aAlarmName :: Lens' Alarm Text aAlarmName = lens _aAlarmName (\ s a -> s{_aAlarmName = a}); -- | The Amazon Resource Name (ARN) of the alarm. aAlarmARN :: Lens' Alarm Text aAlarmARN = lens _aAlarmARN (\ s a -> s{_aAlarmARN = a}); instance FromJSON Alarm where parseJSON = withObject "Alarm" (\ x -> Alarm' <$> (x .: "AlarmName") <*> (x .: "AlarmARN")) instance Hashable Alarm instance NFData Alarm -- | An object representing a scalable target. -- -- /See:/ 'scalableTarget' smart constructor. data ScalableTarget = ScalableTarget' { _stServiceNamespace :: !ServiceNamespace , _stResourceId :: !Text , _stScalableDimension :: !ScalableDimension , _stMinCapacity :: !Int , _stMaxCapacity :: !Int , _stRoleARN :: !Text , _stCreationTime :: !POSIX } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'ScalableTarget' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'stServiceNamespace' -- -- * 'stResourceId' -- -- * 'stScalableDimension' -- -- * 'stMinCapacity' -- -- * 'stMaxCapacity' -- -- * 'stRoleARN' -- -- * 'stCreationTime' scalableTarget :: ServiceNamespace -- ^ 'stServiceNamespace' -> Text -- ^ 'stResourceId' -> ScalableDimension -- ^ 'stScalableDimension' -> Int -- ^ 'stMinCapacity' -> Int -- ^ 'stMaxCapacity' -> Text -- ^ 'stRoleARN' -> UTCTime -- ^ 'stCreationTime' -> ScalableTarget scalableTarget pServiceNamespace_ pResourceId_ pScalableDimension_ pMinCapacity_ pMaxCapacity_ pRoleARN_ pCreationTime_ = ScalableTarget' { _stServiceNamespace = pServiceNamespace_ , _stResourceId = pResourceId_ , _stScalableDimension = pScalableDimension_ , _stMinCapacity = pMinCapacity_ , _stMaxCapacity = pMaxCapacity_ , _stRoleARN = pRoleARN_ , _stCreationTime = _Time # pCreationTime_ } -- | The namespace for the AWS service that the scalable target is associated with. For more information, see in the Amazon Web Services General Reference. stServiceNamespace :: Lens' ScalableTarget ServiceNamespace stServiceNamespace = lens _stServiceNamespace (\ s a -> s{_stServiceNamespace = a}); -- | The unique identifier string for the resource associated with the scalable target. For Amazon ECS services, this value is the resource type, followed by the cluster name and service name, such as 'service\/default\/sample-webapp'. stResourceId :: Lens' ScalableTarget Text stResourceId = lens _stResourceId (\ s a -> s{_stResourceId = a}); -- | The scalable dimension associated with the scalable target. The scalable dimension contains the service namespace, resource type, and scaling property, such as 'ecs:service:DesiredCount' for the desired task count of an Amazon ECS service. stScalableDimension :: Lens' ScalableTarget ScalableDimension stScalableDimension = lens _stScalableDimension (\ s a -> s{_stScalableDimension = a}); -- | The minimum value for this scalable target to scale in to in response to scaling activities. stMinCapacity :: Lens' ScalableTarget Int stMinCapacity = lens _stMinCapacity (\ s a -> s{_stMinCapacity = a}); -- | The maximum value for this scalable target to scale out to in response to scaling activities. stMaxCapacity :: Lens' ScalableTarget Int stMaxCapacity = lens _stMaxCapacity (\ s a -> s{_stMaxCapacity = a}); -- | The ARN of the IAM role that allows Application Auto Scaling to modify your scalable target on your behalf. stRoleARN :: Lens' ScalableTarget Text stRoleARN = lens _stRoleARN (\ s a -> s{_stRoleARN = a}); -- | The Unix timestamp for when the scalable target was created. stCreationTime :: Lens' ScalableTarget UTCTime stCreationTime = lens _stCreationTime (\ s a -> s{_stCreationTime = a}) . _Time; instance FromJSON ScalableTarget where parseJSON = withObject "ScalableTarget" (\ x -> ScalableTarget' <$> (x .: "ServiceNamespace") <*> (x .: "ResourceId") <*> (x .: "ScalableDimension") <*> (x .: "MinCapacity") <*> (x .: "MaxCapacity") <*> (x .: "RoleARN") <*> (x .: "CreationTime")) instance Hashable ScalableTarget instance NFData ScalableTarget -- | An object representing a scaling activity. -- -- /See:/ 'scalingActivity' smart constructor. data ScalingActivity = ScalingActivity' { _saStatusMessage :: !(Maybe Text) , _saEndTime :: !(Maybe POSIX) , _saDetails :: !(Maybe Text) , _saActivityId :: !Text , _saServiceNamespace :: !ServiceNamespace , _saResourceId :: !Text , _saScalableDimension :: !ScalableDimension , _saDescription :: !Text , _saCause :: !Text , _saStartTime :: !POSIX , _saStatusCode :: !ScalingActivityStatusCode } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'ScalingActivity' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'saStatusMessage' -- -- * 'saEndTime' -- -- * 'saDetails' -- -- * 'saActivityId' -- -- * 'saServiceNamespace' -- -- * 'saResourceId' -- -- * 'saScalableDimension' -- -- * 'saDescription' -- -- * 'saCause' -- -- * 'saStartTime' -- -- * 'saStatusCode' scalingActivity :: Text -- ^ 'saActivityId' -> ServiceNamespace -- ^ 'saServiceNamespace' -> Text -- ^ 'saResourceId' -> ScalableDimension -- ^ 'saScalableDimension' -> Text -- ^ 'saDescription' -> Text -- ^ 'saCause' -> UTCTime -- ^ 'saStartTime' -> ScalingActivityStatusCode -- ^ 'saStatusCode' -> ScalingActivity scalingActivity pActivityId_ pServiceNamespace_ pResourceId_ pScalableDimension_ pDescription_ pCause_ pStartTime_ pStatusCode_ = ScalingActivity' { _saStatusMessage = Nothing , _saEndTime = Nothing , _saDetails = Nothing , _saActivityId = pActivityId_ , _saServiceNamespace = pServiceNamespace_ , _saResourceId = pResourceId_ , _saScalableDimension = pScalableDimension_ , _saDescription = pDescription_ , _saCause = pCause_ , _saStartTime = _Time # pStartTime_ , _saStatusCode = pStatusCode_ } -- | A simple message about the current status of the scaling activity. saStatusMessage :: Lens' ScalingActivity (Maybe Text) saStatusMessage = lens _saStatusMessage (\ s a -> s{_saStatusMessage = a}); -- | The Unix timestamp for when the scaling activity ended. saEndTime :: Lens' ScalingActivity (Maybe UTCTime) saEndTime = lens _saEndTime (\ s a -> s{_saEndTime = a}) . mapping _Time; -- | The details about the scaling activity. saDetails :: Lens' ScalingActivity (Maybe Text) saDetails = lens _saDetails (\ s a -> s{_saDetails = a}); -- | The unique identifier string for the scaling activity. saActivityId :: Lens' ScalingActivity Text saActivityId = lens _saActivityId (\ s a -> s{_saActivityId = a}); -- | The namespace for the AWS service that the scaling activity is associated with. For more information, see in the Amazon Web Services General Reference. saServiceNamespace :: Lens' ScalingActivity ServiceNamespace saServiceNamespace = lens _saServiceNamespace (\ s a -> s{_saServiceNamespace = a}); -- | The unique identifier string for the resource associated with the scaling activity. For Amazon ECS services, this value is the resource type, followed by the cluster name and service name, such as 'service\/default\/sample-webapp'. saResourceId :: Lens' ScalingActivity Text saResourceId = lens _saResourceId (\ s a -> s{_saResourceId = a}); -- | The scalable dimension associated with the scaling activity. The scalable dimension contains the service namespace, resource type, and scaling property, such as 'ecs:service:DesiredCount' for the desired task count of an Amazon ECS service. saScalableDimension :: Lens' ScalingActivity ScalableDimension saScalableDimension = lens _saScalableDimension (\ s a -> s{_saScalableDimension = a}); -- | A simple description of what action the scaling activity intends to accomplish. saDescription :: Lens' ScalingActivity Text saDescription = lens _saDescription (\ s a -> s{_saDescription = a}); -- | A simple description of what caused the scaling activity to happen. saCause :: Lens' ScalingActivity Text saCause = lens _saCause (\ s a -> s{_saCause = a}); -- | The Unix timestamp for when the scaling activity began. saStartTime :: Lens' ScalingActivity UTCTime saStartTime = lens _saStartTime (\ s a -> s{_saStartTime = a}) . _Time; -- | Indicates the status of the scaling activity. saStatusCode :: Lens' ScalingActivity ScalingActivityStatusCode saStatusCode = lens _saStatusCode (\ s a -> s{_saStatusCode = a}); instance FromJSON ScalingActivity where parseJSON = withObject "ScalingActivity" (\ x -> ScalingActivity' <$> (x .:? "StatusMessage") <*> (x .:? "EndTime") <*> (x .:? "Details") <*> (x .: "ActivityId") <*> (x .: "ServiceNamespace") <*> (x .: "ResourceId") <*> (x .: "ScalableDimension") <*> (x .: "Description") <*> (x .: "Cause") <*> (x .: "StartTime") <*> (x .: "StatusCode")) instance Hashable ScalingActivity instance NFData ScalingActivity -- | An object representing a scaling policy. -- -- /See:/ 'scalingPolicy' smart constructor. data ScalingPolicy = ScalingPolicy' { _spStepScalingPolicyConfiguration :: !(Maybe StepScalingPolicyConfiguration) , _spAlarms :: !(Maybe [Alarm]) , _spPolicyARN :: !Text , _spPolicyName :: !Text , _spServiceNamespace :: !ServiceNamespace , _spResourceId :: !Text , _spScalableDimension :: !ScalableDimension , _spPolicyType :: !PolicyType , _spCreationTime :: !POSIX } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'ScalingPolicy' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'spStepScalingPolicyConfiguration' -- -- * 'spAlarms' -- -- * 'spPolicyARN' -- -- * 'spPolicyName' -- -- * 'spServiceNamespace' -- -- * 'spResourceId' -- -- * 'spScalableDimension' -- -- * 'spPolicyType' -- -- * 'spCreationTime' scalingPolicy :: Text -- ^ 'spPolicyARN' -> Text -- ^ 'spPolicyName' -> ServiceNamespace -- ^ 'spServiceNamespace' -> Text -- ^ 'spResourceId' -> ScalableDimension -- ^ 'spScalableDimension' -> PolicyType -- ^ 'spPolicyType' -> UTCTime -- ^ 'spCreationTime' -> ScalingPolicy scalingPolicy pPolicyARN_ pPolicyName_ pServiceNamespace_ pResourceId_ pScalableDimension_ pPolicyType_ pCreationTime_ = ScalingPolicy' { _spStepScalingPolicyConfiguration = Nothing , _spAlarms = Nothing , _spPolicyARN = pPolicyARN_ , _spPolicyName = pPolicyName_ , _spServiceNamespace = pServiceNamespace_ , _spResourceId = pResourceId_ , _spScalableDimension = pScalableDimension_ , _spPolicyType = pPolicyType_ , _spCreationTime = _Time # pCreationTime_ } -- | The configuration for the step scaling policy. spStepScalingPolicyConfiguration :: Lens' ScalingPolicy (Maybe StepScalingPolicyConfiguration) spStepScalingPolicyConfiguration = lens _spStepScalingPolicyConfiguration (\ s a -> s{_spStepScalingPolicyConfiguration = a}); -- | The CloudWatch alarms that are associated with the scaling policy. spAlarms :: Lens' ScalingPolicy [Alarm] spAlarms = lens _spAlarms (\ s a -> s{_spAlarms = a}) . _Default . _Coerce; -- | The Amazon Resource Name (ARN) of the scaling policy. spPolicyARN :: Lens' ScalingPolicy Text spPolicyARN = lens _spPolicyARN (\ s a -> s{_spPolicyARN = a}); -- | The name of the scaling policy. spPolicyName :: Lens' ScalingPolicy Text spPolicyName = lens _spPolicyName (\ s a -> s{_spPolicyName = a}); -- | The namespace for the AWS service that the scaling policy is associated with. For more information, see in the Amazon Web Services General Reference. spServiceNamespace :: Lens' ScalingPolicy ServiceNamespace spServiceNamespace = lens _spServiceNamespace (\ s a -> s{_spServiceNamespace = a}); -- | The unique identifier string for the resource associated with the scaling policy. For Amazon ECS services, this value is the resource type, followed by the cluster name and service name, such as 'service\/default\/sample-webapp'. spResourceId :: Lens' ScalingPolicy Text spResourceId = lens _spResourceId (\ s a -> s{_spResourceId = a}); -- | The scalable dimension associated with the scaling policy. The scalable dimension contains the service namespace, resource type, and scaling property, such as 'ecs:service:DesiredCount' for the desired task count of an Amazon ECS service. spScalableDimension :: Lens' ScalingPolicy ScalableDimension spScalableDimension = lens _spScalableDimension (\ s a -> s{_spScalableDimension = a}); -- | The scaling policy type. spPolicyType :: Lens' ScalingPolicy PolicyType spPolicyType = lens _spPolicyType (\ s a -> s{_spPolicyType = a}); -- | The Unix timestamp for when the scaling policy was created. spCreationTime :: Lens' ScalingPolicy UTCTime spCreationTime = lens _spCreationTime (\ s a -> s{_spCreationTime = a}) . _Time; instance FromJSON ScalingPolicy where parseJSON = withObject "ScalingPolicy" (\ x -> ScalingPolicy' <$> (x .:? "StepScalingPolicyConfiguration") <*> (x .:? "Alarms" .!= mempty) <*> (x .: "PolicyARN") <*> (x .: "PolicyName") <*> (x .: "ServiceNamespace") <*> (x .: "ResourceId") <*> (x .: "ScalableDimension") <*> (x .: "PolicyType") <*> (x .: "CreationTime")) instance Hashable ScalingPolicy instance NFData ScalingPolicy -- | An object representing a step adjustment for a < StepScalingPolicyConfiguration>. Describes an adjustment based on the difference between the value of the aggregated CloudWatch metric and the breach threshold that you\'ve defined for the alarm. -- -- For the following examples, suppose that you have an alarm with a breach threshold of 50: -- -- - If you want the adjustment to be triggered when the metric is greater than or equal to 50 and less than 60, specify a lower bound of 0 and an upper bound of 10. -- -- - If you want the adjustment to be triggered when the metric is greater than 40 and less than or equal to 50, specify a lower bound of -10 and an upper bound of 0. -- -- There are a few rules for the step adjustments for your step policy: -- -- - The ranges of your step adjustments can\'t overlap or have a gap. -- -- - At most one step adjustment can have a null lower bound. If one step adjustment has a negative lower bound, then there must be a step adjustment with a null lower bound. -- -- - At most one step adjustment can have a null upper bound. If one step adjustment has a positive upper bound, then there must be a step adjustment with a null upper bound. -- -- - The upper and lower bound can\'t be null in the same step adjustment. -- -- -- /See:/ 'stepAdjustment' smart constructor. data StepAdjustment = StepAdjustment' { _saMetricIntervalLowerBound :: !(Maybe Double) , _saMetricIntervalUpperBound :: !(Maybe Double) , _saScalingAdjustment :: !Int } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'StepAdjustment' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'saMetricIntervalLowerBound' -- -- * 'saMetricIntervalUpperBound' -- -- * 'saScalingAdjustment' stepAdjustment :: Int -- ^ 'saScalingAdjustment' -> StepAdjustment stepAdjustment pScalingAdjustment_ = StepAdjustment' { _saMetricIntervalLowerBound = Nothing , _saMetricIntervalUpperBound = Nothing , _saScalingAdjustment = pScalingAdjustment_ } -- | The lower bound for the difference between the alarm threshold and the CloudWatch metric. If the metric value is above the breach threshold, the lower bound is inclusive (the metric must be greater than or equal to the threshold plus the lower bound). Otherwise, it is exclusive (the metric must be greater than the threshold plus the lower bound). A null value indicates negative infinity. saMetricIntervalLowerBound :: Lens' StepAdjustment (Maybe Double) saMetricIntervalLowerBound = lens _saMetricIntervalLowerBound (\ s a -> s{_saMetricIntervalLowerBound = a}); -- | The upper bound for the difference between the alarm threshold and the CloudWatch metric. If the metric value is above the breach threshold, the upper bound is exclusive (the metric must be less than the threshold plus the upper bound). Otherwise, it is inclusive (the metric must be less than or equal to the threshold plus the upper bound). A null value indicates positive infinity. -- -- The upper bound must be greater than the lower bound. saMetricIntervalUpperBound :: Lens' StepAdjustment (Maybe Double) saMetricIntervalUpperBound = lens _saMetricIntervalUpperBound (\ s a -> s{_saMetricIntervalUpperBound = a}); -- | The amount by which to scale, based on the specified adjustment type. A positive value adds to the current scalable dimension while a negative number removes from the current scalable dimension. saScalingAdjustment :: Lens' StepAdjustment Int saScalingAdjustment = lens _saScalingAdjustment (\ s a -> s{_saScalingAdjustment = a}); instance FromJSON StepAdjustment where parseJSON = withObject "StepAdjustment" (\ x -> StepAdjustment' <$> (x .:? "MetricIntervalLowerBound") <*> (x .:? "MetricIntervalUpperBound") <*> (x .: "ScalingAdjustment")) instance Hashable StepAdjustment instance NFData StepAdjustment instance ToJSON StepAdjustment where toJSON StepAdjustment'{..} = object (catMaybes [("MetricIntervalLowerBound" .=) <$> _saMetricIntervalLowerBound, ("MetricIntervalUpperBound" .=) <$> _saMetricIntervalUpperBound, Just ("ScalingAdjustment" .= _saScalingAdjustment)]) -- | An object representing a step scaling policy configuration. -- -- /See:/ 'stepScalingPolicyConfiguration' smart constructor. data StepScalingPolicyConfiguration = StepScalingPolicyConfiguration' { _sspcStepAdjustments :: !(Maybe [StepAdjustment]) , _sspcAdjustmentType :: !(Maybe AdjustmentType) , _sspcCooldown :: !(Maybe Int) , _sspcMetricAggregationType :: !(Maybe MetricAggregationType) , _sspcMinAdjustmentMagnitude :: !(Maybe Int) } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'StepScalingPolicyConfiguration' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'sspcStepAdjustments' -- -- * 'sspcAdjustmentType' -- -- * 'sspcCooldown' -- -- * 'sspcMetricAggregationType' -- -- * 'sspcMinAdjustmentMagnitude' stepScalingPolicyConfiguration :: StepScalingPolicyConfiguration stepScalingPolicyConfiguration = StepScalingPolicyConfiguration' { _sspcStepAdjustments = Nothing , _sspcAdjustmentType = Nothing , _sspcCooldown = Nothing , _sspcMetricAggregationType = Nothing , _sspcMinAdjustmentMagnitude = Nothing } -- | A set of adjustments that enable you to scale based on the size of the alarm breach. sspcStepAdjustments :: Lens' StepScalingPolicyConfiguration [StepAdjustment] sspcStepAdjustments = lens _sspcStepAdjustments (\ s a -> s{_sspcStepAdjustments = a}) . _Default . _Coerce; -- | The adjustment type, which specifies how the 'ScalingAdjustment' parameter in a < StepAdjustment> is interpreted. sspcAdjustmentType :: Lens' StepScalingPolicyConfiguration (Maybe AdjustmentType) sspcAdjustmentType = lens _sspcAdjustmentType (\ s a -> s{_sspcAdjustmentType = a}); -- | The amount of time, in seconds, after a scaling activity completes where previous trigger-related scaling activities can influence future scaling events. -- -- For scale out policies, while 'Cooldown' is in effect, the capacity that has been added by the previous scale out event that initiated the 'Cooldown' is calculated as part of the desired capacity for the next scale out. The intention is to continuously (but not excessively) scale out. For example, an alarm triggers a step scaling policy to scale out an Amazon ECS service by 2 tasks, the scaling activity completes successfully, and a 'Cooldown' period of 5 minutes starts. During the 'Cooldown' period, if the alarm triggers the same policy again but at a more aggressive step adjustment to scale out the service by 3 tasks, the 2 tasks that were added in the previous scale out event are considered part of that capacity and only 1 additional task is added to the desired count. -- -- For scale in policies, the 'Cooldown' period is used to block subsequent scale in requests until it has expired. The intention is to scale in conservatively to protect your application\'s availability. However, if another alarm triggers a scale out policy during the 'Cooldown' period after a scale-in, Application Auto Scaling scales out your scalable target immediately. sspcCooldown :: Lens' StepScalingPolicyConfiguration (Maybe Int) sspcCooldown = lens _sspcCooldown (\ s a -> s{_sspcCooldown = a}); -- | The aggregation type for the CloudWatch metrics. Valid values are 'Minimum', 'Maximum', and 'Average'. sspcMetricAggregationType :: Lens' StepScalingPolicyConfiguration (Maybe MetricAggregationType) sspcMetricAggregationType = lens _sspcMetricAggregationType (\ s a -> s{_sspcMetricAggregationType = a}); -- | The minimum number to adjust your scalable dimension as a result of a scaling activity. If the adjustment type is 'PercentChangeInCapacity', the scaling policy changes the scalable dimension of the scalable target by this amount. sspcMinAdjustmentMagnitude :: Lens' StepScalingPolicyConfiguration (Maybe Int) sspcMinAdjustmentMagnitude = lens _sspcMinAdjustmentMagnitude (\ s a -> s{_sspcMinAdjustmentMagnitude = a}); instance FromJSON StepScalingPolicyConfiguration where parseJSON = withObject "StepScalingPolicyConfiguration" (\ x -> StepScalingPolicyConfiguration' <$> (x .:? "StepAdjustments" .!= mempty) <*> (x .:? "AdjustmentType") <*> (x .:? "Cooldown") <*> (x .:? "MetricAggregationType") <*> (x .:? "MinAdjustmentMagnitude")) instance Hashable StepScalingPolicyConfiguration instance NFData StepScalingPolicyConfiguration instance ToJSON StepScalingPolicyConfiguration where toJSON StepScalingPolicyConfiguration'{..} = object (catMaybes [("StepAdjustments" .=) <$> _sspcStepAdjustments, ("AdjustmentType" .=) <$> _sspcAdjustmentType, ("Cooldown" .=) <$> _sspcCooldown, ("MetricAggregationType" .=) <$> _sspcMetricAggregationType, ("MinAdjustmentMagnitude" .=) <$> _sspcMinAdjustmentMagnitude])