{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# 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.DescribeInstanceStatus
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Describes the status of the specified instances or all of your
-- instances. By default, only running instances are described, unless you
-- specifically indicate to return the status of all instances.
--
-- Instance status includes the following components:
--
-- -   __Status checks__ - Amazon EC2 performs status checks on running EC2
--     instances to identify hardware and software issues. For more
--     information, see
--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html Status checks for your instances>
--     and
--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html Troubleshoot instances with failed status checks>
--     in the /Amazon EC2 User Guide/.
--
-- -   __Scheduled events__ - Amazon EC2 can schedule events (such as
--     reboot, stop, or terminate) for your instances related to hardware
--     issues, software updates, or system maintenance. For more
--     information, see
--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html Scheduled events for your instances>
--     in the /Amazon EC2 User Guide/.
--
-- -   __Instance state__ - You can manage your instances from the moment
--     you launch them through their termination. For more information, see
--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html Instance lifecycle>
--     in the /Amazon EC2 User Guide/.
--
-- This operation returns paginated results.
module Amazonka.EC2.DescribeInstanceStatus
  ( -- * Creating a Request
    DescribeInstanceStatus (..),
    newDescribeInstanceStatus,

    -- * Request Lenses
    describeInstanceStatus_dryRun,
    describeInstanceStatus_filters,
    describeInstanceStatus_includeAllInstances,
    describeInstanceStatus_instanceIds,
    describeInstanceStatus_maxResults,
    describeInstanceStatus_nextToken,

    -- * Destructuring the Response
    DescribeInstanceStatusResponse (..),
    newDescribeInstanceStatusResponse,

    -- * Response Lenses
    describeInstanceStatusResponse_instanceStatuses,
    describeInstanceStatusResponse_nextToken,
    describeInstanceStatusResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newDescribeInstanceStatus' smart constructor.
data DescribeInstanceStatus = DescribeInstanceStatus'
  { -- | Checks whether you have the required permissions for the action, without
    -- actually making the request, and provides an error response. If you have
    -- the required permissions, the error response is @DryRunOperation@.
    -- Otherwise, it is @UnauthorizedOperation@.
    DescribeInstanceStatus -> Maybe Bool
dryRun :: Prelude.Maybe Prelude.Bool,
    -- | The filters.
    --
    -- -   @availability-zone@ - The Availability Zone of the instance.
    --
    -- -   @event.code@ - The code for the scheduled event (@instance-reboot@ |
    --     @system-reboot@ | @system-maintenance@ | @instance-retirement@ |
    --     @instance-stop@).
    --
    -- -   @event.description@ - A description of the event.
    --
    -- -   @event.instance-event-id@ - The ID of the event whose date and time
    --     you are modifying.
    --
    -- -   @event.not-after@ - The latest end time for the scheduled event (for
    --     example, @2014-09-15T17:15:20.000Z@).
    --
    -- -   @event.not-before@ - The earliest start time for the scheduled event
    --     (for example, @2014-09-15T17:15:20.000Z@).
    --
    -- -   @event.not-before-deadline@ - The deadline for starting the event
    --     (for example, @2014-09-15T17:15:20.000Z@).
    --
    -- -   @instance-state-code@ - The code for the instance state, as a 16-bit
    --     unsigned integer. The high byte is used for internal purposes and
    --     should be ignored. The low byte is set based on the state
    --     represented. The valid values are 0 (pending), 16 (running), 32
    --     (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).
    --
    -- -   @instance-state-name@ - The state of the instance (@pending@ |
    --     @running@ | @shutting-down@ | @terminated@ | @stopping@ |
    --     @stopped@).
    --
    -- -   @instance-status.reachability@ - Filters on instance status where
    --     the name is @reachability@ (@passed@ | @failed@ | @initializing@ |
    --     @insufficient-data@).
    --
    -- -   @instance-status.status@ - The status of the instance (@ok@ |
    --     @impaired@ | @initializing@ | @insufficient-data@ |
    --     @not-applicable@).
    --
    -- -   @system-status.reachability@ - Filters on system status where the
    --     name is @reachability@ (@passed@ | @failed@ | @initializing@ |
    --     @insufficient-data@).
    --
    -- -   @system-status.status@ - The system status of the instance (@ok@ |
    --     @impaired@ | @initializing@ | @insufficient-data@ |
    --     @not-applicable@).
    DescribeInstanceStatus -> Maybe [Filter]
filters :: Prelude.Maybe [Filter],
    -- | When @true@, includes the health status for all instances. When @false@,
    -- includes the health status for running instances only.
    --
    -- Default: @false@
    DescribeInstanceStatus -> Maybe Bool
includeAllInstances :: Prelude.Maybe Prelude.Bool,
    -- | The instance IDs.
    --
    -- Default: Describes all your instances.
    --
    -- Constraints: Maximum 100 explicitly specified instance IDs.
    DescribeInstanceStatus -> Maybe [Text]
instanceIds :: Prelude.Maybe [Prelude.Text],
    -- | The maximum number of results to return in a single call. To retrieve
    -- the remaining results, make another call with the returned @NextToken@
    -- value. This value can be between 5 and 1000. You cannot specify this
    -- parameter and the instance IDs parameter in the same call.
    DescribeInstanceStatus -> Maybe Int
maxResults :: Prelude.Maybe Prelude.Int,
    -- | The token to retrieve the next page of results.
    DescribeInstanceStatus -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text
  }
  deriving (DescribeInstanceStatus -> DescribeInstanceStatus -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeInstanceStatus -> DescribeInstanceStatus -> Bool
$c/= :: DescribeInstanceStatus -> DescribeInstanceStatus -> Bool
== :: DescribeInstanceStatus -> DescribeInstanceStatus -> Bool
$c== :: DescribeInstanceStatus -> DescribeInstanceStatus -> Bool
Prelude.Eq, ReadPrec [DescribeInstanceStatus]
ReadPrec DescribeInstanceStatus
Int -> ReadS DescribeInstanceStatus
ReadS [DescribeInstanceStatus]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeInstanceStatus]
$creadListPrec :: ReadPrec [DescribeInstanceStatus]
readPrec :: ReadPrec DescribeInstanceStatus
$creadPrec :: ReadPrec DescribeInstanceStatus
readList :: ReadS [DescribeInstanceStatus]
$creadList :: ReadS [DescribeInstanceStatus]
readsPrec :: Int -> ReadS DescribeInstanceStatus
$creadsPrec :: Int -> ReadS DescribeInstanceStatus
Prelude.Read, Int -> DescribeInstanceStatus -> ShowS
[DescribeInstanceStatus] -> ShowS
DescribeInstanceStatus -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeInstanceStatus] -> ShowS
$cshowList :: [DescribeInstanceStatus] -> ShowS
show :: DescribeInstanceStatus -> String
$cshow :: DescribeInstanceStatus -> String
showsPrec :: Int -> DescribeInstanceStatus -> ShowS
$cshowsPrec :: Int -> DescribeInstanceStatus -> ShowS
Prelude.Show, forall x. Rep DescribeInstanceStatus x -> DescribeInstanceStatus
forall x. DescribeInstanceStatus -> Rep DescribeInstanceStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeInstanceStatus x -> DescribeInstanceStatus
$cfrom :: forall x. DescribeInstanceStatus -> Rep DescribeInstanceStatus x
Prelude.Generic)

-- |
-- Create a value of 'DescribeInstanceStatus' 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:
--
-- 'dryRun', 'describeInstanceStatus_dryRun' - Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
--
-- 'filters', 'describeInstanceStatus_filters' - The filters.
--
-- -   @availability-zone@ - The Availability Zone of the instance.
--
-- -   @event.code@ - The code for the scheduled event (@instance-reboot@ |
--     @system-reboot@ | @system-maintenance@ | @instance-retirement@ |
--     @instance-stop@).
--
-- -   @event.description@ - A description of the event.
--
-- -   @event.instance-event-id@ - The ID of the event whose date and time
--     you are modifying.
--
-- -   @event.not-after@ - The latest end time for the scheduled event (for
--     example, @2014-09-15T17:15:20.000Z@).
--
-- -   @event.not-before@ - The earliest start time for the scheduled event
--     (for example, @2014-09-15T17:15:20.000Z@).
--
-- -   @event.not-before-deadline@ - The deadline for starting the event
--     (for example, @2014-09-15T17:15:20.000Z@).
--
-- -   @instance-state-code@ - The code for the instance state, as a 16-bit
--     unsigned integer. The high byte is used for internal purposes and
--     should be ignored. The low byte is set based on the state
--     represented. The valid values are 0 (pending), 16 (running), 32
--     (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).
--
-- -   @instance-state-name@ - The state of the instance (@pending@ |
--     @running@ | @shutting-down@ | @terminated@ | @stopping@ |
--     @stopped@).
--
-- -   @instance-status.reachability@ - Filters on instance status where
--     the name is @reachability@ (@passed@ | @failed@ | @initializing@ |
--     @insufficient-data@).
--
-- -   @instance-status.status@ - The status of the instance (@ok@ |
--     @impaired@ | @initializing@ | @insufficient-data@ |
--     @not-applicable@).
--
-- -   @system-status.reachability@ - Filters on system status where the
--     name is @reachability@ (@passed@ | @failed@ | @initializing@ |
--     @insufficient-data@).
--
-- -   @system-status.status@ - The system status of the instance (@ok@ |
--     @impaired@ | @initializing@ | @insufficient-data@ |
--     @not-applicable@).
--
-- 'includeAllInstances', 'describeInstanceStatus_includeAllInstances' - When @true@, includes the health status for all instances. When @false@,
-- includes the health status for running instances only.
--
-- Default: @false@
--
-- 'instanceIds', 'describeInstanceStatus_instanceIds' - The instance IDs.
--
-- Default: Describes all your instances.
--
-- Constraints: Maximum 100 explicitly specified instance IDs.
--
-- 'maxResults', 'describeInstanceStatus_maxResults' - The maximum number of results to return in a single call. To retrieve
-- the remaining results, make another call with the returned @NextToken@
-- value. This value can be between 5 and 1000. You cannot specify this
-- parameter and the instance IDs parameter in the same call.
--
-- 'nextToken', 'describeInstanceStatus_nextToken' - The token to retrieve the next page of results.
newDescribeInstanceStatus ::
  DescribeInstanceStatus
newDescribeInstanceStatus :: DescribeInstanceStatus
newDescribeInstanceStatus =
  DescribeInstanceStatus'
    { $sel:dryRun:DescribeInstanceStatus' :: Maybe Bool
dryRun = forall a. Maybe a
Prelude.Nothing,
      $sel:filters:DescribeInstanceStatus' :: Maybe [Filter]
filters = forall a. Maybe a
Prelude.Nothing,
      $sel:includeAllInstances:DescribeInstanceStatus' :: Maybe Bool
includeAllInstances = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceIds:DescribeInstanceStatus' :: Maybe [Text]
instanceIds = forall a. Maybe a
Prelude.Nothing,
      $sel:maxResults:DescribeInstanceStatus' :: Maybe Int
maxResults = forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:DescribeInstanceStatus' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing
    }

-- | Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
describeInstanceStatus_dryRun :: Lens.Lens' DescribeInstanceStatus (Prelude.Maybe Prelude.Bool)
describeInstanceStatus_dryRun :: Lens' DescribeInstanceStatus (Maybe Bool)
describeInstanceStatus_dryRun = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeInstanceStatus' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Bool
dryRun} -> Maybe Bool
dryRun) (\s :: DescribeInstanceStatus
s@DescribeInstanceStatus' {} Maybe Bool
a -> DescribeInstanceStatus
s {$sel:dryRun:DescribeInstanceStatus' :: Maybe Bool
dryRun = Maybe Bool
a} :: DescribeInstanceStatus)

-- | The filters.
--
-- -   @availability-zone@ - The Availability Zone of the instance.
--
-- -   @event.code@ - The code for the scheduled event (@instance-reboot@ |
--     @system-reboot@ | @system-maintenance@ | @instance-retirement@ |
--     @instance-stop@).
--
-- -   @event.description@ - A description of the event.
--
-- -   @event.instance-event-id@ - The ID of the event whose date and time
--     you are modifying.
--
-- -   @event.not-after@ - The latest end time for the scheduled event (for
--     example, @2014-09-15T17:15:20.000Z@).
--
-- -   @event.not-before@ - The earliest start time for the scheduled event
--     (for example, @2014-09-15T17:15:20.000Z@).
--
-- -   @event.not-before-deadline@ - The deadline for starting the event
--     (for example, @2014-09-15T17:15:20.000Z@).
--
-- -   @instance-state-code@ - The code for the instance state, as a 16-bit
--     unsigned integer. The high byte is used for internal purposes and
--     should be ignored. The low byte is set based on the state
--     represented. The valid values are 0 (pending), 16 (running), 32
--     (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).
--
-- -   @instance-state-name@ - The state of the instance (@pending@ |
--     @running@ | @shutting-down@ | @terminated@ | @stopping@ |
--     @stopped@).
--
-- -   @instance-status.reachability@ - Filters on instance status where
--     the name is @reachability@ (@passed@ | @failed@ | @initializing@ |
--     @insufficient-data@).
--
-- -   @instance-status.status@ - The status of the instance (@ok@ |
--     @impaired@ | @initializing@ | @insufficient-data@ |
--     @not-applicable@).
--
-- -   @system-status.reachability@ - Filters on system status where the
--     name is @reachability@ (@passed@ | @failed@ | @initializing@ |
--     @insufficient-data@).
--
-- -   @system-status.status@ - The system status of the instance (@ok@ |
--     @impaired@ | @initializing@ | @insufficient-data@ |
--     @not-applicable@).
describeInstanceStatus_filters :: Lens.Lens' DescribeInstanceStatus (Prelude.Maybe [Filter])
describeInstanceStatus_filters :: Lens' DescribeInstanceStatus (Maybe [Filter])
describeInstanceStatus_filters = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeInstanceStatus' {Maybe [Filter]
filters :: Maybe [Filter]
$sel:filters:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe [Filter]
filters} -> Maybe [Filter]
filters) (\s :: DescribeInstanceStatus
s@DescribeInstanceStatus' {} Maybe [Filter]
a -> DescribeInstanceStatus
s {$sel:filters:DescribeInstanceStatus' :: Maybe [Filter]
filters = Maybe [Filter]
a} :: DescribeInstanceStatus) 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

-- | When @true@, includes the health status for all instances. When @false@,
-- includes the health status for running instances only.
--
-- Default: @false@
describeInstanceStatus_includeAllInstances :: Lens.Lens' DescribeInstanceStatus (Prelude.Maybe Prelude.Bool)
describeInstanceStatus_includeAllInstances :: Lens' DescribeInstanceStatus (Maybe Bool)
describeInstanceStatus_includeAllInstances = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeInstanceStatus' {Maybe Bool
includeAllInstances :: Maybe Bool
$sel:includeAllInstances:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Bool
includeAllInstances} -> Maybe Bool
includeAllInstances) (\s :: DescribeInstanceStatus
s@DescribeInstanceStatus' {} Maybe Bool
a -> DescribeInstanceStatus
s {$sel:includeAllInstances:DescribeInstanceStatus' :: Maybe Bool
includeAllInstances = Maybe Bool
a} :: DescribeInstanceStatus)

-- | The instance IDs.
--
-- Default: Describes all your instances.
--
-- Constraints: Maximum 100 explicitly specified instance IDs.
describeInstanceStatus_instanceIds :: Lens.Lens' DescribeInstanceStatus (Prelude.Maybe [Prelude.Text])
describeInstanceStatus_instanceIds :: Lens' DescribeInstanceStatus (Maybe [Text])
describeInstanceStatus_instanceIds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeInstanceStatus' {Maybe [Text]
instanceIds :: Maybe [Text]
$sel:instanceIds:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe [Text]
instanceIds} -> Maybe [Text]
instanceIds) (\s :: DescribeInstanceStatus
s@DescribeInstanceStatus' {} Maybe [Text]
a -> DescribeInstanceStatus
s {$sel:instanceIds:DescribeInstanceStatus' :: Maybe [Text]
instanceIds = Maybe [Text]
a} :: DescribeInstanceStatus) 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 maximum number of results to return in a single call. To retrieve
-- the remaining results, make another call with the returned @NextToken@
-- value. This value can be between 5 and 1000. You cannot specify this
-- parameter and the instance IDs parameter in the same call.
describeInstanceStatus_maxResults :: Lens.Lens' DescribeInstanceStatus (Prelude.Maybe Prelude.Int)
describeInstanceStatus_maxResults :: Lens' DescribeInstanceStatus (Maybe Int)
describeInstanceStatus_maxResults = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeInstanceStatus' {Maybe Int
maxResults :: Maybe Int
$sel:maxResults:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Int
maxResults} -> Maybe Int
maxResults) (\s :: DescribeInstanceStatus
s@DescribeInstanceStatus' {} Maybe Int
a -> DescribeInstanceStatus
s {$sel:maxResults:DescribeInstanceStatus' :: Maybe Int
maxResults = Maybe Int
a} :: DescribeInstanceStatus)

-- | The token to retrieve the next page of results.
describeInstanceStatus_nextToken :: Lens.Lens' DescribeInstanceStatus (Prelude.Maybe Prelude.Text)
describeInstanceStatus_nextToken :: Lens' DescribeInstanceStatus (Maybe Text)
describeInstanceStatus_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeInstanceStatus' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: DescribeInstanceStatus
s@DescribeInstanceStatus' {} Maybe Text
a -> DescribeInstanceStatus
s {$sel:nextToken:DescribeInstanceStatus' :: Maybe Text
nextToken = Maybe Text
a} :: DescribeInstanceStatus)

instance Core.AWSPager DescribeInstanceStatus where
  page :: DescribeInstanceStatus
-> AWSResponse DescribeInstanceStatus
-> Maybe DescribeInstanceStatus
page DescribeInstanceStatus
rq AWSResponse DescribeInstanceStatus
rs
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribeInstanceStatus
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeInstanceStatusResponse (Maybe Text)
describeInstanceStatusResponse_nextToken
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribeInstanceStatus
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeInstanceStatusResponse (Maybe [InstanceStatus])
describeInstanceStatusResponse_instanceStatuses
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | Bool
Prelude.otherwise =
        forall a. a -> Maybe a
Prelude.Just
          forall a b. (a -> b) -> a -> b
Prelude.$ DescribeInstanceStatus
rq
          forall a b. a -> (a -> b) -> b
Prelude.& Lens' DescribeInstanceStatus (Maybe Text)
describeInstanceStatus_nextToken
          forall s t a b. ASetter s t a b -> b -> s -> t
Lens..~ AWSResponse DescribeInstanceStatus
rs
          forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeInstanceStatusResponse (Maybe Text)
describeInstanceStatusResponse_nextToken
          forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just

instance Core.AWSRequest DescribeInstanceStatus where
  type
    AWSResponse DescribeInstanceStatus =
      DescribeInstanceStatusResponse
  request :: (Service -> Service)
-> DescribeInstanceStatus -> Request DescribeInstanceStatus
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeInstanceStatus
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeInstanceStatus)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXML
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe [InstanceStatus]
-> Maybe Text -> Int -> DescribeInstanceStatusResponse
DescribeInstanceStatusResponse'
            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
"instanceStatusSet"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                            forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"item")
                        )
            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
"nextToken")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable DescribeInstanceStatus where
  hashWithSalt :: Int -> DescribeInstanceStatus -> Int
hashWithSalt Int
_salt DescribeInstanceStatus' {Maybe Bool
Maybe Int
Maybe [Text]
Maybe [Filter]
Maybe Text
nextToken :: Maybe Text
maxResults :: Maybe Int
instanceIds :: Maybe [Text]
includeAllInstances :: Maybe Bool
filters :: Maybe [Filter]
dryRun :: Maybe Bool
$sel:nextToken:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Text
$sel:maxResults:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Int
$sel:instanceIds:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe [Text]
$sel:includeAllInstances:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Bool
$sel:filters:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe [Filter]
$sel:dryRun:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
dryRun
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Filter]
filters
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
includeAllInstances
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
instanceIds
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
maxResults
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextToken

instance Prelude.NFData DescribeInstanceStatus where
  rnf :: DescribeInstanceStatus -> ()
rnf DescribeInstanceStatus' {Maybe Bool
Maybe Int
Maybe [Text]
Maybe [Filter]
Maybe Text
nextToken :: Maybe Text
maxResults :: Maybe Int
instanceIds :: Maybe [Text]
includeAllInstances :: Maybe Bool
filters :: Maybe [Filter]
dryRun :: Maybe Bool
$sel:nextToken:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Text
$sel:maxResults:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Int
$sel:instanceIds:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe [Text]
$sel:includeAllInstances:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Bool
$sel:filters:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe [Filter]
$sel:dryRun:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
dryRun
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Filter]
filters
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
includeAllInstances
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
instanceIds
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
maxResults
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken

instance Data.ToHeaders DescribeInstanceStatus where
  toHeaders :: DescribeInstanceStatus -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToPath DescribeInstanceStatus where
  toPath :: DescribeInstanceStatus -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery DescribeInstanceStatus where
  toQuery :: DescribeInstanceStatus -> QueryString
toQuery DescribeInstanceStatus' {Maybe Bool
Maybe Int
Maybe [Text]
Maybe [Filter]
Maybe Text
nextToken :: Maybe Text
maxResults :: Maybe Int
instanceIds :: Maybe [Text]
includeAllInstances :: Maybe Bool
filters :: Maybe [Filter]
dryRun :: Maybe Bool
$sel:nextToken:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Text
$sel:maxResults:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Int
$sel:instanceIds:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe [Text]
$sel:includeAllInstances:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Bool
$sel:filters:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe [Filter]
$sel:dryRun:DescribeInstanceStatus' :: DescribeInstanceStatus -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"DescribeInstanceStatus" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2016-11-15" :: Prelude.ByteString),
        ByteString
"DryRun" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
dryRun,
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          (forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"Filter" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Filter]
filters),
        ByteString
"IncludeAllInstances" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
includeAllInstances,
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"InstanceId"
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Text]
instanceIds
          ),
        ByteString
"MaxResults" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Int
maxResults,
        ByteString
"NextToken" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
nextToken
      ]

-- | /See:/ 'newDescribeInstanceStatusResponse' smart constructor.
data DescribeInstanceStatusResponse = DescribeInstanceStatusResponse'
  { -- | Information about the status of the instances.
    DescribeInstanceStatusResponse -> Maybe [InstanceStatus]
instanceStatuses :: Prelude.Maybe [InstanceStatus],
    -- | The token to use to retrieve the next page of results. This value is
    -- @null@ when there are no more results to return.
    DescribeInstanceStatusResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    DescribeInstanceStatusResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeInstanceStatusResponse
-> DescribeInstanceStatusResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeInstanceStatusResponse
-> DescribeInstanceStatusResponse -> Bool
$c/= :: DescribeInstanceStatusResponse
-> DescribeInstanceStatusResponse -> Bool
== :: DescribeInstanceStatusResponse
-> DescribeInstanceStatusResponse -> Bool
$c== :: DescribeInstanceStatusResponse
-> DescribeInstanceStatusResponse -> Bool
Prelude.Eq, ReadPrec [DescribeInstanceStatusResponse]
ReadPrec DescribeInstanceStatusResponse
Int -> ReadS DescribeInstanceStatusResponse
ReadS [DescribeInstanceStatusResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeInstanceStatusResponse]
$creadListPrec :: ReadPrec [DescribeInstanceStatusResponse]
readPrec :: ReadPrec DescribeInstanceStatusResponse
$creadPrec :: ReadPrec DescribeInstanceStatusResponse
readList :: ReadS [DescribeInstanceStatusResponse]
$creadList :: ReadS [DescribeInstanceStatusResponse]
readsPrec :: Int -> ReadS DescribeInstanceStatusResponse
$creadsPrec :: Int -> ReadS DescribeInstanceStatusResponse
Prelude.Read, Int -> DescribeInstanceStatusResponse -> ShowS
[DescribeInstanceStatusResponse] -> ShowS
DescribeInstanceStatusResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeInstanceStatusResponse] -> ShowS
$cshowList :: [DescribeInstanceStatusResponse] -> ShowS
show :: DescribeInstanceStatusResponse -> String
$cshow :: DescribeInstanceStatusResponse -> String
showsPrec :: Int -> DescribeInstanceStatusResponse -> ShowS
$cshowsPrec :: Int -> DescribeInstanceStatusResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeInstanceStatusResponse x
-> DescribeInstanceStatusResponse
forall x.
DescribeInstanceStatusResponse
-> Rep DescribeInstanceStatusResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeInstanceStatusResponse x
-> DescribeInstanceStatusResponse
$cfrom :: forall x.
DescribeInstanceStatusResponse
-> Rep DescribeInstanceStatusResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeInstanceStatusResponse' 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:
--
-- 'instanceStatuses', 'describeInstanceStatusResponse_instanceStatuses' - Information about the status of the instances.
--
-- 'nextToken', 'describeInstanceStatusResponse_nextToken' - The token to use to retrieve the next page of results. This value is
-- @null@ when there are no more results to return.
--
-- 'httpStatus', 'describeInstanceStatusResponse_httpStatus' - The response's http status code.
newDescribeInstanceStatusResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeInstanceStatusResponse
newDescribeInstanceStatusResponse :: Int -> DescribeInstanceStatusResponse
newDescribeInstanceStatusResponse Int
pHttpStatus_ =
  DescribeInstanceStatusResponse'
    { $sel:instanceStatuses:DescribeInstanceStatusResponse' :: Maybe [InstanceStatus]
instanceStatuses =
        forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:DescribeInstanceStatusResponse' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeInstanceStatusResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Information about the status of the instances.
describeInstanceStatusResponse_instanceStatuses :: Lens.Lens' DescribeInstanceStatusResponse (Prelude.Maybe [InstanceStatus])
describeInstanceStatusResponse_instanceStatuses :: Lens' DescribeInstanceStatusResponse (Maybe [InstanceStatus])
describeInstanceStatusResponse_instanceStatuses = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeInstanceStatusResponse' {Maybe [InstanceStatus]
instanceStatuses :: Maybe [InstanceStatus]
$sel:instanceStatuses:DescribeInstanceStatusResponse' :: DescribeInstanceStatusResponse -> Maybe [InstanceStatus]
instanceStatuses} -> Maybe [InstanceStatus]
instanceStatuses) (\s :: DescribeInstanceStatusResponse
s@DescribeInstanceStatusResponse' {} Maybe [InstanceStatus]
a -> DescribeInstanceStatusResponse
s {$sel:instanceStatuses:DescribeInstanceStatusResponse' :: Maybe [InstanceStatus]
instanceStatuses = Maybe [InstanceStatus]
a} :: DescribeInstanceStatusResponse) 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 token to use to retrieve the next page of results. This value is
-- @null@ when there are no more results to return.
describeInstanceStatusResponse_nextToken :: Lens.Lens' DescribeInstanceStatusResponse (Prelude.Maybe Prelude.Text)
describeInstanceStatusResponse_nextToken :: Lens' DescribeInstanceStatusResponse (Maybe Text)
describeInstanceStatusResponse_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeInstanceStatusResponse' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:DescribeInstanceStatusResponse' :: DescribeInstanceStatusResponse -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: DescribeInstanceStatusResponse
s@DescribeInstanceStatusResponse' {} Maybe Text
a -> DescribeInstanceStatusResponse
s {$sel:nextToken:DescribeInstanceStatusResponse' :: Maybe Text
nextToken = Maybe Text
a} :: DescribeInstanceStatusResponse)

-- | The response's http status code.
describeInstanceStatusResponse_httpStatus :: Lens.Lens' DescribeInstanceStatusResponse Prelude.Int
describeInstanceStatusResponse_httpStatus :: Lens' DescribeInstanceStatusResponse Int
describeInstanceStatusResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeInstanceStatusResponse' {Int
httpStatus :: Int
$sel:httpStatus:DescribeInstanceStatusResponse' :: DescribeInstanceStatusResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DescribeInstanceStatusResponse
s@DescribeInstanceStatusResponse' {} Int
a -> DescribeInstanceStatusResponse
s {$sel:httpStatus:DescribeInstanceStatusResponse' :: Int
httpStatus = Int
a} :: DescribeInstanceStatusResponse)

instance
  Prelude.NFData
    DescribeInstanceStatusResponse
  where
  rnf :: DescribeInstanceStatusResponse -> ()
rnf DescribeInstanceStatusResponse' {Int
Maybe [InstanceStatus]
Maybe Text
httpStatus :: Int
nextToken :: Maybe Text
instanceStatuses :: Maybe [InstanceStatus]
$sel:httpStatus:DescribeInstanceStatusResponse' :: DescribeInstanceStatusResponse -> Int
$sel:nextToken:DescribeInstanceStatusResponse' :: DescribeInstanceStatusResponse -> Maybe Text
$sel:instanceStatuses:DescribeInstanceStatusResponse' :: DescribeInstanceStatusResponse -> Maybe [InstanceStatus]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [InstanceStatus]
instanceStatuses
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus