{-# 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.Route53.GetHealthCheckLastFailureReason
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets the reason that a specified health check failed most recently.
module Amazonka.Route53.GetHealthCheckLastFailureReason
  ( -- * Creating a Request
    GetHealthCheckLastFailureReason (..),
    newGetHealthCheckLastFailureReason,

    -- * Request Lenses
    getHealthCheckLastFailureReason_healthCheckId,

    -- * Destructuring the Response
    GetHealthCheckLastFailureReasonResponse (..),
    newGetHealthCheckLastFailureReasonResponse,

    -- * Response Lenses
    getHealthCheckLastFailureReasonResponse_httpStatus,
    getHealthCheckLastFailureReasonResponse_healthCheckObservations,
  )
where

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

-- | A request for the reason that a health check failed most recently.
--
-- /See:/ 'newGetHealthCheckLastFailureReason' smart constructor.
data GetHealthCheckLastFailureReason = GetHealthCheckLastFailureReason'
  { -- | The ID for the health check for which you want the last failure reason.
    -- When you created the health check, @CreateHealthCheck@ returned the ID
    -- in the response, in the @HealthCheckId@ element.
    --
    -- If you want to get the last failure reason for a calculated health
    -- check, you must use the Amazon Route 53 console or the CloudWatch
    -- console. You can\'t use @GetHealthCheckLastFailureReason@ for a
    -- calculated health check.
    GetHealthCheckLastFailureReason -> Text
healthCheckId :: Prelude.Text
  }
  deriving (GetHealthCheckLastFailureReason
-> GetHealthCheckLastFailureReason -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetHealthCheckLastFailureReason
-> GetHealthCheckLastFailureReason -> Bool
$c/= :: GetHealthCheckLastFailureReason
-> GetHealthCheckLastFailureReason -> Bool
== :: GetHealthCheckLastFailureReason
-> GetHealthCheckLastFailureReason -> Bool
$c== :: GetHealthCheckLastFailureReason
-> GetHealthCheckLastFailureReason -> Bool
Prelude.Eq, ReadPrec [GetHealthCheckLastFailureReason]
ReadPrec GetHealthCheckLastFailureReason
Int -> ReadS GetHealthCheckLastFailureReason
ReadS [GetHealthCheckLastFailureReason]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetHealthCheckLastFailureReason]
$creadListPrec :: ReadPrec [GetHealthCheckLastFailureReason]
readPrec :: ReadPrec GetHealthCheckLastFailureReason
$creadPrec :: ReadPrec GetHealthCheckLastFailureReason
readList :: ReadS [GetHealthCheckLastFailureReason]
$creadList :: ReadS [GetHealthCheckLastFailureReason]
readsPrec :: Int -> ReadS GetHealthCheckLastFailureReason
$creadsPrec :: Int -> ReadS GetHealthCheckLastFailureReason
Prelude.Read, Int -> GetHealthCheckLastFailureReason -> ShowS
[GetHealthCheckLastFailureReason] -> ShowS
GetHealthCheckLastFailureReason -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetHealthCheckLastFailureReason] -> ShowS
$cshowList :: [GetHealthCheckLastFailureReason] -> ShowS
show :: GetHealthCheckLastFailureReason -> String
$cshow :: GetHealthCheckLastFailureReason -> String
showsPrec :: Int -> GetHealthCheckLastFailureReason -> ShowS
$cshowsPrec :: Int -> GetHealthCheckLastFailureReason -> ShowS
Prelude.Show, forall x.
Rep GetHealthCheckLastFailureReason x
-> GetHealthCheckLastFailureReason
forall x.
GetHealthCheckLastFailureReason
-> Rep GetHealthCheckLastFailureReason x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetHealthCheckLastFailureReason x
-> GetHealthCheckLastFailureReason
$cfrom :: forall x.
GetHealthCheckLastFailureReason
-> Rep GetHealthCheckLastFailureReason x
Prelude.Generic)

-- |
-- Create a value of 'GetHealthCheckLastFailureReason' 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:
--
-- 'healthCheckId', 'getHealthCheckLastFailureReason_healthCheckId' - The ID for the health check for which you want the last failure reason.
-- When you created the health check, @CreateHealthCheck@ returned the ID
-- in the response, in the @HealthCheckId@ element.
--
-- If you want to get the last failure reason for a calculated health
-- check, you must use the Amazon Route 53 console or the CloudWatch
-- console. You can\'t use @GetHealthCheckLastFailureReason@ for a
-- calculated health check.
newGetHealthCheckLastFailureReason ::
  -- | 'healthCheckId'
  Prelude.Text ->
  GetHealthCheckLastFailureReason
newGetHealthCheckLastFailureReason :: Text -> GetHealthCheckLastFailureReason
newGetHealthCheckLastFailureReason Text
pHealthCheckId_ =
  GetHealthCheckLastFailureReason'
    { $sel:healthCheckId:GetHealthCheckLastFailureReason' :: Text
healthCheckId =
        Text
pHealthCheckId_
    }

-- | The ID for the health check for which you want the last failure reason.
-- When you created the health check, @CreateHealthCheck@ returned the ID
-- in the response, in the @HealthCheckId@ element.
--
-- If you want to get the last failure reason for a calculated health
-- check, you must use the Amazon Route 53 console or the CloudWatch
-- console. You can\'t use @GetHealthCheckLastFailureReason@ for a
-- calculated health check.
getHealthCheckLastFailureReason_healthCheckId :: Lens.Lens' GetHealthCheckLastFailureReason Prelude.Text
getHealthCheckLastFailureReason_healthCheckId :: Lens' GetHealthCheckLastFailureReason Text
getHealthCheckLastFailureReason_healthCheckId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetHealthCheckLastFailureReason' {Text
healthCheckId :: Text
$sel:healthCheckId:GetHealthCheckLastFailureReason' :: GetHealthCheckLastFailureReason -> Text
healthCheckId} -> Text
healthCheckId) (\s :: GetHealthCheckLastFailureReason
s@GetHealthCheckLastFailureReason' {} Text
a -> GetHealthCheckLastFailureReason
s {$sel:healthCheckId:GetHealthCheckLastFailureReason' :: Text
healthCheckId = Text
a} :: GetHealthCheckLastFailureReason)

instance
  Core.AWSRequest
    GetHealthCheckLastFailureReason
  where
  type
    AWSResponse GetHealthCheckLastFailureReason =
      GetHealthCheckLastFailureReasonResponse
  request :: (Service -> Service)
-> GetHealthCheckLastFailureReason
-> Request GetHealthCheckLastFailureReason
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetHealthCheckLastFailureReason
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse GetHealthCheckLastFailureReason)))
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 ->
          Int
-> [HealthCheckObservation]
-> GetHealthCheckLastFailureReasonResponse
GetHealthCheckLastFailureReasonResponse'
            forall (f :: * -> *) a b. Functor 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))
            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
"HealthCheckObservations"
                            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 a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"HealthCheckObservation"
                        )
      )

instance
  Prelude.Hashable
    GetHealthCheckLastFailureReason
  where
  hashWithSalt :: Int -> GetHealthCheckLastFailureReason -> Int
hashWithSalt
    Int
_salt
    GetHealthCheckLastFailureReason' {Text
healthCheckId :: Text
$sel:healthCheckId:GetHealthCheckLastFailureReason' :: GetHealthCheckLastFailureReason -> Text
..} =
      Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
healthCheckId

instance
  Prelude.NFData
    GetHealthCheckLastFailureReason
  where
  rnf :: GetHealthCheckLastFailureReason -> ()
rnf GetHealthCheckLastFailureReason' {Text
healthCheckId :: Text
$sel:healthCheckId:GetHealthCheckLastFailureReason' :: GetHealthCheckLastFailureReason -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
healthCheckId

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

instance Data.ToPath GetHealthCheckLastFailureReason where
  toPath :: GetHealthCheckLastFailureReason -> ByteString
toPath GetHealthCheckLastFailureReason' {Text
healthCheckId :: Text
$sel:healthCheckId:GetHealthCheckLastFailureReason' :: GetHealthCheckLastFailureReason -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/2013-04-01/healthcheck/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
healthCheckId,
        ByteString
"/lastfailurereason"
      ]

instance Data.ToQuery GetHealthCheckLastFailureReason where
  toQuery :: GetHealthCheckLastFailureReason -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | A complex type that contains the response to a
-- @GetHealthCheckLastFailureReason@ request.
--
-- /See:/ 'newGetHealthCheckLastFailureReasonResponse' smart constructor.
data GetHealthCheckLastFailureReasonResponse = GetHealthCheckLastFailureReasonResponse'
  { -- | The response's http status code.
    GetHealthCheckLastFailureReasonResponse -> Int
httpStatus :: Prelude.Int,
    -- | A list that contains one @Observation@ element for each Amazon Route 53
    -- health checker that is reporting a last failure reason.
    GetHealthCheckLastFailureReasonResponse -> [HealthCheckObservation]
healthCheckObservations :: [HealthCheckObservation]
  }
  deriving (GetHealthCheckLastFailureReasonResponse
-> GetHealthCheckLastFailureReasonResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetHealthCheckLastFailureReasonResponse
-> GetHealthCheckLastFailureReasonResponse -> Bool
$c/= :: GetHealthCheckLastFailureReasonResponse
-> GetHealthCheckLastFailureReasonResponse -> Bool
== :: GetHealthCheckLastFailureReasonResponse
-> GetHealthCheckLastFailureReasonResponse -> Bool
$c== :: GetHealthCheckLastFailureReasonResponse
-> GetHealthCheckLastFailureReasonResponse -> Bool
Prelude.Eq, ReadPrec [GetHealthCheckLastFailureReasonResponse]
ReadPrec GetHealthCheckLastFailureReasonResponse
Int -> ReadS GetHealthCheckLastFailureReasonResponse
ReadS [GetHealthCheckLastFailureReasonResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetHealthCheckLastFailureReasonResponse]
$creadListPrec :: ReadPrec [GetHealthCheckLastFailureReasonResponse]
readPrec :: ReadPrec GetHealthCheckLastFailureReasonResponse
$creadPrec :: ReadPrec GetHealthCheckLastFailureReasonResponse
readList :: ReadS [GetHealthCheckLastFailureReasonResponse]
$creadList :: ReadS [GetHealthCheckLastFailureReasonResponse]
readsPrec :: Int -> ReadS GetHealthCheckLastFailureReasonResponse
$creadsPrec :: Int -> ReadS GetHealthCheckLastFailureReasonResponse
Prelude.Read, Int -> GetHealthCheckLastFailureReasonResponse -> ShowS
[GetHealthCheckLastFailureReasonResponse] -> ShowS
GetHealthCheckLastFailureReasonResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetHealthCheckLastFailureReasonResponse] -> ShowS
$cshowList :: [GetHealthCheckLastFailureReasonResponse] -> ShowS
show :: GetHealthCheckLastFailureReasonResponse -> String
$cshow :: GetHealthCheckLastFailureReasonResponse -> String
showsPrec :: Int -> GetHealthCheckLastFailureReasonResponse -> ShowS
$cshowsPrec :: Int -> GetHealthCheckLastFailureReasonResponse -> ShowS
Prelude.Show, forall x.
Rep GetHealthCheckLastFailureReasonResponse x
-> GetHealthCheckLastFailureReasonResponse
forall x.
GetHealthCheckLastFailureReasonResponse
-> Rep GetHealthCheckLastFailureReasonResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetHealthCheckLastFailureReasonResponse x
-> GetHealthCheckLastFailureReasonResponse
$cfrom :: forall x.
GetHealthCheckLastFailureReasonResponse
-> Rep GetHealthCheckLastFailureReasonResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetHealthCheckLastFailureReasonResponse' 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:
--
-- 'httpStatus', 'getHealthCheckLastFailureReasonResponse_httpStatus' - The response's http status code.
--
-- 'healthCheckObservations', 'getHealthCheckLastFailureReasonResponse_healthCheckObservations' - A list that contains one @Observation@ element for each Amazon Route 53
-- health checker that is reporting a last failure reason.
newGetHealthCheckLastFailureReasonResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetHealthCheckLastFailureReasonResponse
newGetHealthCheckLastFailureReasonResponse :: Int -> GetHealthCheckLastFailureReasonResponse
newGetHealthCheckLastFailureReasonResponse
  Int
pHttpStatus_ =
    GetHealthCheckLastFailureReasonResponse'
      { $sel:httpStatus:GetHealthCheckLastFailureReasonResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:healthCheckObservations:GetHealthCheckLastFailureReasonResponse' :: [HealthCheckObservation]
healthCheckObservations =
          forall a. Monoid a => a
Prelude.mempty
      }

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

-- | A list that contains one @Observation@ element for each Amazon Route 53
-- health checker that is reporting a last failure reason.
getHealthCheckLastFailureReasonResponse_healthCheckObservations :: Lens.Lens' GetHealthCheckLastFailureReasonResponse [HealthCheckObservation]
getHealthCheckLastFailureReasonResponse_healthCheckObservations :: Lens'
  GetHealthCheckLastFailureReasonResponse [HealthCheckObservation]
getHealthCheckLastFailureReasonResponse_healthCheckObservations = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetHealthCheckLastFailureReasonResponse' {[HealthCheckObservation]
healthCheckObservations :: [HealthCheckObservation]
$sel:healthCheckObservations:GetHealthCheckLastFailureReasonResponse' :: GetHealthCheckLastFailureReasonResponse -> [HealthCheckObservation]
healthCheckObservations} -> [HealthCheckObservation]
healthCheckObservations) (\s :: GetHealthCheckLastFailureReasonResponse
s@GetHealthCheckLastFailureReasonResponse' {} [HealthCheckObservation]
a -> GetHealthCheckLastFailureReasonResponse
s {$sel:healthCheckObservations:GetHealthCheckLastFailureReasonResponse' :: [HealthCheckObservation]
healthCheckObservations = [HealthCheckObservation]
a} :: GetHealthCheckLastFailureReasonResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance
  Prelude.NFData
    GetHealthCheckLastFailureReasonResponse
  where
  rnf :: GetHealthCheckLastFailureReasonResponse -> ()
rnf GetHealthCheckLastFailureReasonResponse' {Int
[HealthCheckObservation]
healthCheckObservations :: [HealthCheckObservation]
httpStatus :: Int
$sel:healthCheckObservations:GetHealthCheckLastFailureReasonResponse' :: GetHealthCheckLastFailureReasonResponse -> [HealthCheckObservation]
$sel:httpStatus:GetHealthCheckLastFailureReasonResponse' :: GetHealthCheckLastFailureReasonResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [HealthCheckObservation]
healthCheckObservations