{-# 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.EC2.Types.EventInformation
-- 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.EC2.Types.EventInformation where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Internal
import qualified Amazonka.Prelude as Prelude

-- | Describes an EC2 Fleet or Spot Fleet event.
--
-- /See:/ 'newEventInformation' smart constructor.
data EventInformation = EventInformation'
  { -- | The description of the event.
    EventInformation -> Maybe Text
eventDescription :: Prelude.Maybe Prelude.Text,
    -- | The event.
    --
    -- @error@ events:
    --
    -- -   @iamFleetRoleInvalid@ - The EC2 Fleet or Spot Fleet does not have
    --     the required permissions either to launch or terminate an instance.
    --
    -- -   @allLaunchSpecsTemporarilyBlacklisted@ - None of the configurations
    --     are valid, and several attempts to launch instances have failed. For
    --     more information, see the description of the event.
    --
    -- -   @spotInstanceCountLimitExceeded@ - You\'ve reached the limit on the
    --     number of Spot Instances that you can launch.
    --
    -- -   @spotFleetRequestConfigurationInvalid@ - The configuration is not
    --     valid. For more information, see the description of the event.
    --
    -- @fleetRequestChange@ events:
    --
    -- -   @active@ - The EC2 Fleet or Spot Fleet request has been validated
    --     and Amazon EC2 is attempting to maintain the target number of
    --     running instances.
    --
    -- -   @deleted@ (EC2 Fleet) \/ @cancelled@ (Spot Fleet) - The EC2 Fleet is
    --     deleted or the Spot Fleet request is canceled and has no running
    --     instances. The EC2 Fleet or Spot Fleet will be deleted two days
    --     after its instances are terminated.
    --
    -- -   @deleted_running@ (EC2 Fleet) \/ @cancelled_running@ (Spot Fleet) -
    --     The EC2 Fleet is deleted or the Spot Fleet request is canceled and
    --     does not launch additional instances. Its existing instances
    --     continue to run until they are interrupted or terminated. The
    --     request remains in this state until all instances are interrupted or
    --     terminated.
    --
    -- -   @deleted_terminating@ (EC2 Fleet) \/ @cancelled_terminating@ (Spot
    --     Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is
    --     canceled and its instances are terminating. The request remains in
    --     this state until all instances are terminated.
    --
    -- -   @expired@ - The EC2 Fleet or Spot Fleet request has expired. If the
    --     request was created with @TerminateInstancesWithExpiration@ set, a
    --     subsequent @terminated@ event indicates that the instances are
    --     terminated.
    --
    -- -   @modify_in_progress@ - The EC2 Fleet or Spot Fleet request is being
    --     modified. The request remains in this state until the modification
    --     is fully processed.
    --
    -- -   @modify_succeeded@ - The EC2 Fleet or Spot Fleet request was
    --     modified.
    --
    -- -   @submitted@ - The EC2 Fleet or Spot Fleet request is being evaluated
    --     and Amazon EC2 is preparing to launch the target number of
    --     instances.
    --
    -- -   @progress@ - The EC2 Fleet or Spot Fleet request is in the process
    --     of being fulfilled.
    --
    -- @instanceChange@ events:
    --
    -- -   @launched@ - A new instance was launched.
    --
    -- -   @terminated@ - An instance was terminated by the user.
    --
    -- -   @termination_notified@ - An instance termination notification was
    --     sent when a Spot Instance was terminated by Amazon EC2 during
    --     scale-down, when the target capacity of the fleet was modified down,
    --     for example, from a target capacity of 4 to a target capacity of 3.
    --
    -- @Information@ events:
    --
    -- -   @fleetProgressHalted@ - The price in every launch specification is
    --     not valid because it is below the Spot price (all the launch
    --     specifications have produced @launchSpecUnusable@ events). A launch
    --     specification might become valid if the Spot price changes.
    --
    -- -   @launchSpecTemporarilyBlacklisted@ - The configuration is not valid
    --     and several attempts to launch instances have failed. For more
    --     information, see the description of the event.
    --
    -- -   @launchSpecUnusable@ - The price in a launch specification is not
    --     valid because it is below the Spot price.
    --
    -- -   @registerWithLoadBalancersFailed@ - An attempt to register instances
    --     with load balancers failed. For more information, see the
    --     description of the event.
    EventInformation -> Maybe Text
eventSubType :: Prelude.Maybe Prelude.Text,
    -- | The ID of the instance. This information is available only for
    -- @instanceChange@ events.
    EventInformation -> Maybe Text
instanceId :: Prelude.Maybe Prelude.Text
  }
  deriving (EventInformation -> EventInformation -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EventInformation -> EventInformation -> Bool
$c/= :: EventInformation -> EventInformation -> Bool
== :: EventInformation -> EventInformation -> Bool
$c== :: EventInformation -> EventInformation -> Bool
Prelude.Eq, ReadPrec [EventInformation]
ReadPrec EventInformation
Int -> ReadS EventInformation
ReadS [EventInformation]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EventInformation]
$creadListPrec :: ReadPrec [EventInformation]
readPrec :: ReadPrec EventInformation
$creadPrec :: ReadPrec EventInformation
readList :: ReadS [EventInformation]
$creadList :: ReadS [EventInformation]
readsPrec :: Int -> ReadS EventInformation
$creadsPrec :: Int -> ReadS EventInformation
Prelude.Read, Int -> EventInformation -> ShowS
[EventInformation] -> ShowS
EventInformation -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EventInformation] -> ShowS
$cshowList :: [EventInformation] -> ShowS
show :: EventInformation -> String
$cshow :: EventInformation -> String
showsPrec :: Int -> EventInformation -> ShowS
$cshowsPrec :: Int -> EventInformation -> ShowS
Prelude.Show, forall x. Rep EventInformation x -> EventInformation
forall x. EventInformation -> Rep EventInformation x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep EventInformation x -> EventInformation
$cfrom :: forall x. EventInformation -> Rep EventInformation x
Prelude.Generic)

-- |
-- Create a value of 'EventInformation' 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:
--
-- 'eventDescription', 'eventInformation_eventDescription' - The description of the event.
--
-- 'eventSubType', 'eventInformation_eventSubType' - The event.
--
-- @error@ events:
--
-- -   @iamFleetRoleInvalid@ - The EC2 Fleet or Spot Fleet does not have
--     the required permissions either to launch or terminate an instance.
--
-- -   @allLaunchSpecsTemporarilyBlacklisted@ - None of the configurations
--     are valid, and several attempts to launch instances have failed. For
--     more information, see the description of the event.
--
-- -   @spotInstanceCountLimitExceeded@ - You\'ve reached the limit on the
--     number of Spot Instances that you can launch.
--
-- -   @spotFleetRequestConfigurationInvalid@ - The configuration is not
--     valid. For more information, see the description of the event.
--
-- @fleetRequestChange@ events:
--
-- -   @active@ - The EC2 Fleet or Spot Fleet request has been validated
--     and Amazon EC2 is attempting to maintain the target number of
--     running instances.
--
-- -   @deleted@ (EC2 Fleet) \/ @cancelled@ (Spot Fleet) - The EC2 Fleet is
--     deleted or the Spot Fleet request is canceled and has no running
--     instances. The EC2 Fleet or Spot Fleet will be deleted two days
--     after its instances are terminated.
--
-- -   @deleted_running@ (EC2 Fleet) \/ @cancelled_running@ (Spot Fleet) -
--     The EC2 Fleet is deleted or the Spot Fleet request is canceled and
--     does not launch additional instances. Its existing instances
--     continue to run until they are interrupted or terminated. The
--     request remains in this state until all instances are interrupted or
--     terminated.
--
-- -   @deleted_terminating@ (EC2 Fleet) \/ @cancelled_terminating@ (Spot
--     Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is
--     canceled and its instances are terminating. The request remains in
--     this state until all instances are terminated.
--
-- -   @expired@ - The EC2 Fleet or Spot Fleet request has expired. If the
--     request was created with @TerminateInstancesWithExpiration@ set, a
--     subsequent @terminated@ event indicates that the instances are
--     terminated.
--
-- -   @modify_in_progress@ - The EC2 Fleet or Spot Fleet request is being
--     modified. The request remains in this state until the modification
--     is fully processed.
--
-- -   @modify_succeeded@ - The EC2 Fleet or Spot Fleet request was
--     modified.
--
-- -   @submitted@ - The EC2 Fleet or Spot Fleet request is being evaluated
--     and Amazon EC2 is preparing to launch the target number of
--     instances.
--
-- -   @progress@ - The EC2 Fleet or Spot Fleet request is in the process
--     of being fulfilled.
--
-- @instanceChange@ events:
--
-- -   @launched@ - A new instance was launched.
--
-- -   @terminated@ - An instance was terminated by the user.
--
-- -   @termination_notified@ - An instance termination notification was
--     sent when a Spot Instance was terminated by Amazon EC2 during
--     scale-down, when the target capacity of the fleet was modified down,
--     for example, from a target capacity of 4 to a target capacity of 3.
--
-- @Information@ events:
--
-- -   @fleetProgressHalted@ - The price in every launch specification is
--     not valid because it is below the Spot price (all the launch
--     specifications have produced @launchSpecUnusable@ events). A launch
--     specification might become valid if the Spot price changes.
--
-- -   @launchSpecTemporarilyBlacklisted@ - The configuration is not valid
--     and several attempts to launch instances have failed. For more
--     information, see the description of the event.
--
-- -   @launchSpecUnusable@ - The price in a launch specification is not
--     valid because it is below the Spot price.
--
-- -   @registerWithLoadBalancersFailed@ - An attempt to register instances
--     with load balancers failed. For more information, see the
--     description of the event.
--
-- 'instanceId', 'eventInformation_instanceId' - The ID of the instance. This information is available only for
-- @instanceChange@ events.
newEventInformation ::
  EventInformation
newEventInformation :: EventInformation
newEventInformation =
  EventInformation'
    { $sel:eventDescription:EventInformation' :: Maybe Text
eventDescription =
        forall a. Maybe a
Prelude.Nothing,
      $sel:eventSubType:EventInformation' :: Maybe Text
eventSubType = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceId:EventInformation' :: Maybe Text
instanceId = forall a. Maybe a
Prelude.Nothing
    }

-- | The description of the event.
eventInformation_eventDescription :: Lens.Lens' EventInformation (Prelude.Maybe Prelude.Text)
eventInformation_eventDescription :: Lens' EventInformation (Maybe Text)
eventInformation_eventDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EventInformation' {Maybe Text
eventDescription :: Maybe Text
$sel:eventDescription:EventInformation' :: EventInformation -> Maybe Text
eventDescription} -> Maybe Text
eventDescription) (\s :: EventInformation
s@EventInformation' {} Maybe Text
a -> EventInformation
s {$sel:eventDescription:EventInformation' :: Maybe Text
eventDescription = Maybe Text
a} :: EventInformation)

-- | The event.
--
-- @error@ events:
--
-- -   @iamFleetRoleInvalid@ - The EC2 Fleet or Spot Fleet does not have
--     the required permissions either to launch or terminate an instance.
--
-- -   @allLaunchSpecsTemporarilyBlacklisted@ - None of the configurations
--     are valid, and several attempts to launch instances have failed. For
--     more information, see the description of the event.
--
-- -   @spotInstanceCountLimitExceeded@ - You\'ve reached the limit on the
--     number of Spot Instances that you can launch.
--
-- -   @spotFleetRequestConfigurationInvalid@ - The configuration is not
--     valid. For more information, see the description of the event.
--
-- @fleetRequestChange@ events:
--
-- -   @active@ - The EC2 Fleet or Spot Fleet request has been validated
--     and Amazon EC2 is attempting to maintain the target number of
--     running instances.
--
-- -   @deleted@ (EC2 Fleet) \/ @cancelled@ (Spot Fleet) - The EC2 Fleet is
--     deleted or the Spot Fleet request is canceled and has no running
--     instances. The EC2 Fleet or Spot Fleet will be deleted two days
--     after its instances are terminated.
--
-- -   @deleted_running@ (EC2 Fleet) \/ @cancelled_running@ (Spot Fleet) -
--     The EC2 Fleet is deleted or the Spot Fleet request is canceled and
--     does not launch additional instances. Its existing instances
--     continue to run until they are interrupted or terminated. The
--     request remains in this state until all instances are interrupted or
--     terminated.
--
-- -   @deleted_terminating@ (EC2 Fleet) \/ @cancelled_terminating@ (Spot
--     Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is
--     canceled and its instances are terminating. The request remains in
--     this state until all instances are terminated.
--
-- -   @expired@ - The EC2 Fleet or Spot Fleet request has expired. If the
--     request was created with @TerminateInstancesWithExpiration@ set, a
--     subsequent @terminated@ event indicates that the instances are
--     terminated.
--
-- -   @modify_in_progress@ - The EC2 Fleet or Spot Fleet request is being
--     modified. The request remains in this state until the modification
--     is fully processed.
--
-- -   @modify_succeeded@ - The EC2 Fleet or Spot Fleet request was
--     modified.
--
-- -   @submitted@ - The EC2 Fleet or Spot Fleet request is being evaluated
--     and Amazon EC2 is preparing to launch the target number of
--     instances.
--
-- -   @progress@ - The EC2 Fleet or Spot Fleet request is in the process
--     of being fulfilled.
--
-- @instanceChange@ events:
--
-- -   @launched@ - A new instance was launched.
--
-- -   @terminated@ - An instance was terminated by the user.
--
-- -   @termination_notified@ - An instance termination notification was
--     sent when a Spot Instance was terminated by Amazon EC2 during
--     scale-down, when the target capacity of the fleet was modified down,
--     for example, from a target capacity of 4 to a target capacity of 3.
--
-- @Information@ events:
--
-- -   @fleetProgressHalted@ - The price in every launch specification is
--     not valid because it is below the Spot price (all the launch
--     specifications have produced @launchSpecUnusable@ events). A launch
--     specification might become valid if the Spot price changes.
--
-- -   @launchSpecTemporarilyBlacklisted@ - The configuration is not valid
--     and several attempts to launch instances have failed. For more
--     information, see the description of the event.
--
-- -   @launchSpecUnusable@ - The price in a launch specification is not
--     valid because it is below the Spot price.
--
-- -   @registerWithLoadBalancersFailed@ - An attempt to register instances
--     with load balancers failed. For more information, see the
--     description of the event.
eventInformation_eventSubType :: Lens.Lens' EventInformation (Prelude.Maybe Prelude.Text)
eventInformation_eventSubType :: Lens' EventInformation (Maybe Text)
eventInformation_eventSubType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EventInformation' {Maybe Text
eventSubType :: Maybe Text
$sel:eventSubType:EventInformation' :: EventInformation -> Maybe Text
eventSubType} -> Maybe Text
eventSubType) (\s :: EventInformation
s@EventInformation' {} Maybe Text
a -> EventInformation
s {$sel:eventSubType:EventInformation' :: Maybe Text
eventSubType = Maybe Text
a} :: EventInformation)

-- | The ID of the instance. This information is available only for
-- @instanceChange@ events.
eventInformation_instanceId :: Lens.Lens' EventInformation (Prelude.Maybe Prelude.Text)
eventInformation_instanceId :: Lens' EventInformation (Maybe Text)
eventInformation_instanceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EventInformation' {Maybe Text
instanceId :: Maybe Text
$sel:instanceId:EventInformation' :: EventInformation -> Maybe Text
instanceId} -> Maybe Text
instanceId) (\s :: EventInformation
s@EventInformation' {} Maybe Text
a -> EventInformation
s {$sel:instanceId:EventInformation' :: Maybe Text
instanceId = Maybe Text
a} :: EventInformation)

instance Data.FromXML EventInformation where
  parseXML :: [Node] -> Either String EventInformation
parseXML [Node]
x =
    Maybe Text -> Maybe Text -> Maybe Text -> EventInformation
EventInformation'
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"eventDescription")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"eventSubType")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"instanceId")

instance Prelude.Hashable EventInformation where
  hashWithSalt :: Int -> EventInformation -> Int
hashWithSalt Int
_salt EventInformation' {Maybe Text
instanceId :: Maybe Text
eventSubType :: Maybe Text
eventDescription :: Maybe Text
$sel:instanceId:EventInformation' :: EventInformation -> Maybe Text
$sel:eventSubType:EventInformation' :: EventInformation -> Maybe Text
$sel:eventDescription:EventInformation' :: EventInformation -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
eventDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
eventSubType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
instanceId

instance Prelude.NFData EventInformation where
  rnf :: EventInformation -> ()
rnf EventInformation' {Maybe Text
instanceId :: Maybe Text
eventSubType :: Maybe Text
eventDescription :: Maybe Text
$sel:instanceId:EventInformation' :: EventInformation -> Maybe Text
$sel:eventSubType:EventInformation' :: EventInformation -> Maybe Text
$sel:eventDescription:EventInformation' :: EventInformation -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
eventDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
eventSubType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
instanceId