{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.EMR.Types.CloudWatchAlarmDefinition
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.EMR.Types.CloudWatchAlarmDefinition where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EMR.Types.ComparisonOperator
import Amazonka.EMR.Types.MetricDimension
import Amazonka.EMR.Types.Statistic
import Amazonka.EMR.Types.Unit
import qualified Amazonka.Prelude as Prelude

-- | The definition of a CloudWatch metric alarm, which determines when an
-- automatic scaling activity is triggered. When the defined alarm
-- conditions are satisfied, scaling activity begins.
--
-- /See:/ 'newCloudWatchAlarmDefinition' smart constructor.
data CloudWatchAlarmDefinition = CloudWatchAlarmDefinition'
  { -- | A CloudWatch metric dimension.
    CloudWatchAlarmDefinition -> Maybe [MetricDimension]
dimensions :: Prelude.Maybe [MetricDimension],
    -- | The number of periods, in five-minute increments, during which the alarm
    -- condition must exist before the alarm triggers automatic scaling
    -- activity. The default value is @1@.
    CloudWatchAlarmDefinition -> Maybe Int
evaluationPeriods :: Prelude.Maybe Prelude.Int,
    -- | The namespace for the CloudWatch metric. The default is
    -- @AWS\/ElasticMapReduce@.
    CloudWatchAlarmDefinition -> Maybe Text
namespace :: Prelude.Maybe Prelude.Text,
    -- | The statistic to apply to the metric associated with the alarm. The
    -- default is @AVERAGE@.
    CloudWatchAlarmDefinition -> Maybe Statistic
statistic :: Prelude.Maybe Statistic,
    -- | The unit of measure associated with the CloudWatch metric being watched.
    -- The value specified for @Unit@ must correspond to the units specified in
    -- the CloudWatch metric.
    CloudWatchAlarmDefinition -> Maybe Unit
unit :: Prelude.Maybe Unit,
    -- | Determines how the metric specified by @MetricName@ is compared to the
    -- value specified by @Threshold@.
    CloudWatchAlarmDefinition -> ComparisonOperator
comparisonOperator :: ComparisonOperator,
    -- | The name of the CloudWatch metric that is watched to determine an alarm
    -- condition.
    CloudWatchAlarmDefinition -> Text
metricName :: Prelude.Text,
    -- | The period, in seconds, over which the statistic is applied. EMR
    -- CloudWatch metrics are emitted every five minutes (300 seconds), so if
    -- an EMR CloudWatch metric is specified, specify @300@.
    CloudWatchAlarmDefinition -> Int
period :: Prelude.Int,
    -- | The value against which the specified statistic is compared.
    CloudWatchAlarmDefinition -> Double
threshold :: Prelude.Double
  }
  deriving (CloudWatchAlarmDefinition -> CloudWatchAlarmDefinition -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CloudWatchAlarmDefinition -> CloudWatchAlarmDefinition -> Bool
$c/= :: CloudWatchAlarmDefinition -> CloudWatchAlarmDefinition -> Bool
== :: CloudWatchAlarmDefinition -> CloudWatchAlarmDefinition -> Bool
$c== :: CloudWatchAlarmDefinition -> CloudWatchAlarmDefinition -> Bool
Prelude.Eq, ReadPrec [CloudWatchAlarmDefinition]
ReadPrec CloudWatchAlarmDefinition
Int -> ReadS CloudWatchAlarmDefinition
ReadS [CloudWatchAlarmDefinition]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CloudWatchAlarmDefinition]
$creadListPrec :: ReadPrec [CloudWatchAlarmDefinition]
readPrec :: ReadPrec CloudWatchAlarmDefinition
$creadPrec :: ReadPrec CloudWatchAlarmDefinition
readList :: ReadS [CloudWatchAlarmDefinition]
$creadList :: ReadS [CloudWatchAlarmDefinition]
readsPrec :: Int -> ReadS CloudWatchAlarmDefinition
$creadsPrec :: Int -> ReadS CloudWatchAlarmDefinition
Prelude.Read, Int -> CloudWatchAlarmDefinition -> ShowS
[CloudWatchAlarmDefinition] -> ShowS
CloudWatchAlarmDefinition -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CloudWatchAlarmDefinition] -> ShowS
$cshowList :: [CloudWatchAlarmDefinition] -> ShowS
show :: CloudWatchAlarmDefinition -> String
$cshow :: CloudWatchAlarmDefinition -> String
showsPrec :: Int -> CloudWatchAlarmDefinition -> ShowS
$cshowsPrec :: Int -> CloudWatchAlarmDefinition -> ShowS
Prelude.Show, forall x.
Rep CloudWatchAlarmDefinition x -> CloudWatchAlarmDefinition
forall x.
CloudWatchAlarmDefinition -> Rep CloudWatchAlarmDefinition x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CloudWatchAlarmDefinition x -> CloudWatchAlarmDefinition
$cfrom :: forall x.
CloudWatchAlarmDefinition -> Rep CloudWatchAlarmDefinition x
Prelude.Generic)

-- |
-- Create a value of 'CloudWatchAlarmDefinition' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'dimensions', 'cloudWatchAlarmDefinition_dimensions' - A CloudWatch metric dimension.
--
-- 'evaluationPeriods', 'cloudWatchAlarmDefinition_evaluationPeriods' - The number of periods, in five-minute increments, during which the alarm
-- condition must exist before the alarm triggers automatic scaling
-- activity. The default value is @1@.
--
-- 'namespace', 'cloudWatchAlarmDefinition_namespace' - The namespace for the CloudWatch metric. The default is
-- @AWS\/ElasticMapReduce@.
--
-- 'statistic', 'cloudWatchAlarmDefinition_statistic' - The statistic to apply to the metric associated with the alarm. The
-- default is @AVERAGE@.
--
-- 'unit', 'cloudWatchAlarmDefinition_unit' - The unit of measure associated with the CloudWatch metric being watched.
-- The value specified for @Unit@ must correspond to the units specified in
-- the CloudWatch metric.
--
-- 'comparisonOperator', 'cloudWatchAlarmDefinition_comparisonOperator' - Determines how the metric specified by @MetricName@ is compared to the
-- value specified by @Threshold@.
--
-- 'metricName', 'cloudWatchAlarmDefinition_metricName' - The name of the CloudWatch metric that is watched to determine an alarm
-- condition.
--
-- 'period', 'cloudWatchAlarmDefinition_period' - The period, in seconds, over which the statistic is applied. EMR
-- CloudWatch metrics are emitted every five minutes (300 seconds), so if
-- an EMR CloudWatch metric is specified, specify @300@.
--
-- 'threshold', 'cloudWatchAlarmDefinition_threshold' - The value against which the specified statistic is compared.
newCloudWatchAlarmDefinition ::
  -- | 'comparisonOperator'
  ComparisonOperator ->
  -- | 'metricName'
  Prelude.Text ->
  -- | 'period'
  Prelude.Int ->
  -- | 'threshold'
  Prelude.Double ->
  CloudWatchAlarmDefinition
newCloudWatchAlarmDefinition :: ComparisonOperator
-> Text -> Int -> Double -> CloudWatchAlarmDefinition
newCloudWatchAlarmDefinition
  ComparisonOperator
pComparisonOperator_
  Text
pMetricName_
  Int
pPeriod_
  Double
pThreshold_ =
    CloudWatchAlarmDefinition'
      { $sel:dimensions:CloudWatchAlarmDefinition' :: Maybe [MetricDimension]
dimensions =
          forall a. Maybe a
Prelude.Nothing,
        $sel:evaluationPeriods:CloudWatchAlarmDefinition' :: Maybe Int
evaluationPeriods = forall a. Maybe a
Prelude.Nothing,
        $sel:namespace:CloudWatchAlarmDefinition' :: Maybe Text
namespace = forall a. Maybe a
Prelude.Nothing,
        $sel:statistic:CloudWatchAlarmDefinition' :: Maybe Statistic
statistic = forall a. Maybe a
Prelude.Nothing,
        $sel:unit:CloudWatchAlarmDefinition' :: Maybe Unit
unit = forall a. Maybe a
Prelude.Nothing,
        $sel:comparisonOperator:CloudWatchAlarmDefinition' :: ComparisonOperator
comparisonOperator = ComparisonOperator
pComparisonOperator_,
        $sel:metricName:CloudWatchAlarmDefinition' :: Text
metricName = Text
pMetricName_,
        $sel:period:CloudWatchAlarmDefinition' :: Int
period = Int
pPeriod_,
        $sel:threshold:CloudWatchAlarmDefinition' :: Double
threshold = Double
pThreshold_
      }

-- | A CloudWatch metric dimension.
cloudWatchAlarmDefinition_dimensions :: Lens.Lens' CloudWatchAlarmDefinition (Prelude.Maybe [MetricDimension])
cloudWatchAlarmDefinition_dimensions :: Lens' CloudWatchAlarmDefinition (Maybe [MetricDimension])
cloudWatchAlarmDefinition_dimensions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CloudWatchAlarmDefinition' {Maybe [MetricDimension]
dimensions :: Maybe [MetricDimension]
$sel:dimensions:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe [MetricDimension]
dimensions} -> Maybe [MetricDimension]
dimensions) (\s :: CloudWatchAlarmDefinition
s@CloudWatchAlarmDefinition' {} Maybe [MetricDimension]
a -> CloudWatchAlarmDefinition
s {$sel:dimensions:CloudWatchAlarmDefinition' :: Maybe [MetricDimension]
dimensions = Maybe [MetricDimension]
a} :: CloudWatchAlarmDefinition) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The number of periods, in five-minute increments, during which the alarm
-- condition must exist before the alarm triggers automatic scaling
-- activity. The default value is @1@.
cloudWatchAlarmDefinition_evaluationPeriods :: Lens.Lens' CloudWatchAlarmDefinition (Prelude.Maybe Prelude.Int)
cloudWatchAlarmDefinition_evaluationPeriods :: Lens' CloudWatchAlarmDefinition (Maybe Int)
cloudWatchAlarmDefinition_evaluationPeriods = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CloudWatchAlarmDefinition' {Maybe Int
evaluationPeriods :: Maybe Int
$sel:evaluationPeriods:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Int
evaluationPeriods} -> Maybe Int
evaluationPeriods) (\s :: CloudWatchAlarmDefinition
s@CloudWatchAlarmDefinition' {} Maybe Int
a -> CloudWatchAlarmDefinition
s {$sel:evaluationPeriods:CloudWatchAlarmDefinition' :: Maybe Int
evaluationPeriods = Maybe Int
a} :: CloudWatchAlarmDefinition)

-- | The namespace for the CloudWatch metric. The default is
-- @AWS\/ElasticMapReduce@.
cloudWatchAlarmDefinition_namespace :: Lens.Lens' CloudWatchAlarmDefinition (Prelude.Maybe Prelude.Text)
cloudWatchAlarmDefinition_namespace :: Lens' CloudWatchAlarmDefinition (Maybe Text)
cloudWatchAlarmDefinition_namespace = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CloudWatchAlarmDefinition' {Maybe Text
namespace :: Maybe Text
$sel:namespace:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Text
namespace} -> Maybe Text
namespace) (\s :: CloudWatchAlarmDefinition
s@CloudWatchAlarmDefinition' {} Maybe Text
a -> CloudWatchAlarmDefinition
s {$sel:namespace:CloudWatchAlarmDefinition' :: Maybe Text
namespace = Maybe Text
a} :: CloudWatchAlarmDefinition)

-- | The statistic to apply to the metric associated with the alarm. The
-- default is @AVERAGE@.
cloudWatchAlarmDefinition_statistic :: Lens.Lens' CloudWatchAlarmDefinition (Prelude.Maybe Statistic)
cloudWatchAlarmDefinition_statistic :: Lens' CloudWatchAlarmDefinition (Maybe Statistic)
cloudWatchAlarmDefinition_statistic = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CloudWatchAlarmDefinition' {Maybe Statistic
statistic :: Maybe Statistic
$sel:statistic:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Statistic
statistic} -> Maybe Statistic
statistic) (\s :: CloudWatchAlarmDefinition
s@CloudWatchAlarmDefinition' {} Maybe Statistic
a -> CloudWatchAlarmDefinition
s {$sel:statistic:CloudWatchAlarmDefinition' :: Maybe Statistic
statistic = Maybe Statistic
a} :: CloudWatchAlarmDefinition)

-- | The unit of measure associated with the CloudWatch metric being watched.
-- The value specified for @Unit@ must correspond to the units specified in
-- the CloudWatch metric.
cloudWatchAlarmDefinition_unit :: Lens.Lens' CloudWatchAlarmDefinition (Prelude.Maybe Unit)
cloudWatchAlarmDefinition_unit :: Lens' CloudWatchAlarmDefinition (Maybe Unit)
cloudWatchAlarmDefinition_unit = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CloudWatchAlarmDefinition' {Maybe Unit
unit :: Maybe Unit
$sel:unit:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Unit
unit} -> Maybe Unit
unit) (\s :: CloudWatchAlarmDefinition
s@CloudWatchAlarmDefinition' {} Maybe Unit
a -> CloudWatchAlarmDefinition
s {$sel:unit:CloudWatchAlarmDefinition' :: Maybe Unit
unit = Maybe Unit
a} :: CloudWatchAlarmDefinition)

-- | Determines how the metric specified by @MetricName@ is compared to the
-- value specified by @Threshold@.
cloudWatchAlarmDefinition_comparisonOperator :: Lens.Lens' CloudWatchAlarmDefinition ComparisonOperator
cloudWatchAlarmDefinition_comparisonOperator :: Lens' CloudWatchAlarmDefinition ComparisonOperator
cloudWatchAlarmDefinition_comparisonOperator = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CloudWatchAlarmDefinition' {ComparisonOperator
comparisonOperator :: ComparisonOperator
$sel:comparisonOperator:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> ComparisonOperator
comparisonOperator} -> ComparisonOperator
comparisonOperator) (\s :: CloudWatchAlarmDefinition
s@CloudWatchAlarmDefinition' {} ComparisonOperator
a -> CloudWatchAlarmDefinition
s {$sel:comparisonOperator:CloudWatchAlarmDefinition' :: ComparisonOperator
comparisonOperator = ComparisonOperator
a} :: CloudWatchAlarmDefinition)

-- | The name of the CloudWatch metric that is watched to determine an alarm
-- condition.
cloudWatchAlarmDefinition_metricName :: Lens.Lens' CloudWatchAlarmDefinition Prelude.Text
cloudWatchAlarmDefinition_metricName :: Lens' CloudWatchAlarmDefinition Text
cloudWatchAlarmDefinition_metricName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CloudWatchAlarmDefinition' {Text
metricName :: Text
$sel:metricName:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Text
metricName} -> Text
metricName) (\s :: CloudWatchAlarmDefinition
s@CloudWatchAlarmDefinition' {} Text
a -> CloudWatchAlarmDefinition
s {$sel:metricName:CloudWatchAlarmDefinition' :: Text
metricName = Text
a} :: CloudWatchAlarmDefinition)

-- | The period, in seconds, over which the statistic is applied. EMR
-- CloudWatch metrics are emitted every five minutes (300 seconds), so if
-- an EMR CloudWatch metric is specified, specify @300@.
cloudWatchAlarmDefinition_period :: Lens.Lens' CloudWatchAlarmDefinition Prelude.Int
cloudWatchAlarmDefinition_period :: Lens' CloudWatchAlarmDefinition Int
cloudWatchAlarmDefinition_period = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CloudWatchAlarmDefinition' {Int
period :: Int
$sel:period:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Int
period} -> Int
period) (\s :: CloudWatchAlarmDefinition
s@CloudWatchAlarmDefinition' {} Int
a -> CloudWatchAlarmDefinition
s {$sel:period:CloudWatchAlarmDefinition' :: Int
period = Int
a} :: CloudWatchAlarmDefinition)

-- | The value against which the specified statistic is compared.
cloudWatchAlarmDefinition_threshold :: Lens.Lens' CloudWatchAlarmDefinition Prelude.Double
cloudWatchAlarmDefinition_threshold :: Lens' CloudWatchAlarmDefinition Double
cloudWatchAlarmDefinition_threshold = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CloudWatchAlarmDefinition' {Double
threshold :: Double
$sel:threshold:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Double
threshold} -> Double
threshold) (\s :: CloudWatchAlarmDefinition
s@CloudWatchAlarmDefinition' {} Double
a -> CloudWatchAlarmDefinition
s {$sel:threshold:CloudWatchAlarmDefinition' :: Double
threshold = Double
a} :: CloudWatchAlarmDefinition)

instance Data.FromJSON CloudWatchAlarmDefinition where
  parseJSON :: Value -> Parser CloudWatchAlarmDefinition
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"CloudWatchAlarmDefinition"
      ( \Object
x ->
          Maybe [MetricDimension]
-> Maybe Int
-> Maybe Text
-> Maybe Statistic
-> Maybe Unit
-> ComparisonOperator
-> Text
-> Int
-> Double
-> CloudWatchAlarmDefinition
CloudWatchAlarmDefinition'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Dimensions" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"EvaluationPeriods")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Namespace")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Statistic")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Unit")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"ComparisonOperator")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"MetricName")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"Period")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"Threshold")
      )

instance Prelude.Hashable CloudWatchAlarmDefinition where
  hashWithSalt :: Int -> CloudWatchAlarmDefinition -> Int
hashWithSalt Int
_salt CloudWatchAlarmDefinition' {Double
Int
Maybe Int
Maybe [MetricDimension]
Maybe Text
Maybe Statistic
Maybe Unit
Text
ComparisonOperator
threshold :: Double
period :: Int
metricName :: Text
comparisonOperator :: ComparisonOperator
unit :: Maybe Unit
statistic :: Maybe Statistic
namespace :: Maybe Text
evaluationPeriods :: Maybe Int
dimensions :: Maybe [MetricDimension]
$sel:threshold:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Double
$sel:period:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Int
$sel:metricName:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Text
$sel:comparisonOperator:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> ComparisonOperator
$sel:unit:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Unit
$sel:statistic:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Statistic
$sel:namespace:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Text
$sel:evaluationPeriods:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Int
$sel:dimensions:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe [MetricDimension]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [MetricDimension]
dimensions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
evaluationPeriods
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
namespace
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Statistic
statistic
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Unit
unit
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ComparisonOperator
comparisonOperator
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
metricName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Int
period
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Double
threshold

instance Prelude.NFData CloudWatchAlarmDefinition where
  rnf :: CloudWatchAlarmDefinition -> ()
rnf CloudWatchAlarmDefinition' {Double
Int
Maybe Int
Maybe [MetricDimension]
Maybe Text
Maybe Statistic
Maybe Unit
Text
ComparisonOperator
threshold :: Double
period :: Int
metricName :: Text
comparisonOperator :: ComparisonOperator
unit :: Maybe Unit
statistic :: Maybe Statistic
namespace :: Maybe Text
evaluationPeriods :: Maybe Int
dimensions :: Maybe [MetricDimension]
$sel:threshold:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Double
$sel:period:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Int
$sel:metricName:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Text
$sel:comparisonOperator:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> ComparisonOperator
$sel:unit:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Unit
$sel:statistic:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Statistic
$sel:namespace:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Text
$sel:evaluationPeriods:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Int
$sel:dimensions:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe [MetricDimension]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [MetricDimension]
dimensions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
evaluationPeriods
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
namespace
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Statistic
statistic
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Unit
unit
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ComparisonOperator
comparisonOperator
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
metricName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
period
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Double
threshold

instance Data.ToJSON CloudWatchAlarmDefinition where
  toJSON :: CloudWatchAlarmDefinition -> Value
toJSON CloudWatchAlarmDefinition' {Double
Int
Maybe Int
Maybe [MetricDimension]
Maybe Text
Maybe Statistic
Maybe Unit
Text
ComparisonOperator
threshold :: Double
period :: Int
metricName :: Text
comparisonOperator :: ComparisonOperator
unit :: Maybe Unit
statistic :: Maybe Statistic
namespace :: Maybe Text
evaluationPeriods :: Maybe Int
dimensions :: Maybe [MetricDimension]
$sel:threshold:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Double
$sel:period:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Int
$sel:metricName:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Text
$sel:comparisonOperator:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> ComparisonOperator
$sel:unit:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Unit
$sel:statistic:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Statistic
$sel:namespace:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Text
$sel:evaluationPeriods:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe Int
$sel:dimensions:CloudWatchAlarmDefinition' :: CloudWatchAlarmDefinition -> Maybe [MetricDimension]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Dimensions" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [MetricDimension]
dimensions,
            (Key
"EvaluationPeriods" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Int
evaluationPeriods,
            (Key
"Namespace" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
namespace,
            (Key
"Statistic" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Statistic
statistic,
            (Key
"Unit" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Unit
unit,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"ComparisonOperator" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ComparisonOperator
comparisonOperator),
            forall a. a -> Maybe a
Prelude.Just (Key
"MetricName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
metricName),
            forall a. a -> Maybe a
Prelude.Just (Key
"Period" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Int
period),
            forall a. a -> Maybe a
Prelude.Just (Key
"Threshold" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Double
threshold)
          ]
      )