{-# 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.SageMakerEdge.SendHeartbeat
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Use to get the current status of devices registered on SageMaker Edge
-- Manager.
module Amazonka.SageMakerEdge.SendHeartbeat
  ( -- * Creating a Request
    SendHeartbeat (..),
    newSendHeartbeat,

    -- * Request Lenses
    sendHeartbeat_agentMetrics,
    sendHeartbeat_deploymentResult,
    sendHeartbeat_models,
    sendHeartbeat_agentVersion,
    sendHeartbeat_deviceName,
    sendHeartbeat_deviceFleetName,

    -- * Destructuring the Response
    SendHeartbeatResponse (..),
    newSendHeartbeatResponse,
  )
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.SageMakerEdge.Types

-- | /See:/ 'newSendHeartbeat' smart constructor.
data SendHeartbeat = SendHeartbeat'
  { -- | For internal use. Returns a list of SageMaker Edge Manager agent
    -- operating metrics.
    SendHeartbeat -> Maybe [EdgeMetric]
agentMetrics :: Prelude.Maybe [EdgeMetric],
    -- | Returns the result of a deployment on the device.
    SendHeartbeat -> Maybe DeploymentResult
deploymentResult :: Prelude.Maybe DeploymentResult,
    -- | Returns a list of models deployed on the the device.
    SendHeartbeat -> Maybe [Model]
models :: Prelude.Maybe [Model],
    -- | Returns the version of the agent.
    SendHeartbeat -> Text
agentVersion :: Prelude.Text,
    -- | The unique name of the device.
    SendHeartbeat -> Text
deviceName :: Prelude.Text,
    -- | The name of the fleet that the device belongs to.
    SendHeartbeat -> Text
deviceFleetName :: Prelude.Text
  }
  deriving (SendHeartbeat -> SendHeartbeat -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SendHeartbeat -> SendHeartbeat -> Bool
$c/= :: SendHeartbeat -> SendHeartbeat -> Bool
== :: SendHeartbeat -> SendHeartbeat -> Bool
$c== :: SendHeartbeat -> SendHeartbeat -> Bool
Prelude.Eq, ReadPrec [SendHeartbeat]
ReadPrec SendHeartbeat
Int -> ReadS SendHeartbeat
ReadS [SendHeartbeat]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SendHeartbeat]
$creadListPrec :: ReadPrec [SendHeartbeat]
readPrec :: ReadPrec SendHeartbeat
$creadPrec :: ReadPrec SendHeartbeat
readList :: ReadS [SendHeartbeat]
$creadList :: ReadS [SendHeartbeat]
readsPrec :: Int -> ReadS SendHeartbeat
$creadsPrec :: Int -> ReadS SendHeartbeat
Prelude.Read, Int -> SendHeartbeat -> ShowS
[SendHeartbeat] -> ShowS
SendHeartbeat -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SendHeartbeat] -> ShowS
$cshowList :: [SendHeartbeat] -> ShowS
show :: SendHeartbeat -> String
$cshow :: SendHeartbeat -> String
showsPrec :: Int -> SendHeartbeat -> ShowS
$cshowsPrec :: Int -> SendHeartbeat -> ShowS
Prelude.Show, forall x. Rep SendHeartbeat x -> SendHeartbeat
forall x. SendHeartbeat -> Rep SendHeartbeat x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SendHeartbeat x -> SendHeartbeat
$cfrom :: forall x. SendHeartbeat -> Rep SendHeartbeat x
Prelude.Generic)

-- |
-- Create a value of 'SendHeartbeat' 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:
--
-- 'agentMetrics', 'sendHeartbeat_agentMetrics' - For internal use. Returns a list of SageMaker Edge Manager agent
-- operating metrics.
--
-- 'deploymentResult', 'sendHeartbeat_deploymentResult' - Returns the result of a deployment on the device.
--
-- 'models', 'sendHeartbeat_models' - Returns a list of models deployed on the the device.
--
-- 'agentVersion', 'sendHeartbeat_agentVersion' - Returns the version of the agent.
--
-- 'deviceName', 'sendHeartbeat_deviceName' - The unique name of the device.
--
-- 'deviceFleetName', 'sendHeartbeat_deviceFleetName' - The name of the fleet that the device belongs to.
newSendHeartbeat ::
  -- | 'agentVersion'
  Prelude.Text ->
  -- | 'deviceName'
  Prelude.Text ->
  -- | 'deviceFleetName'
  Prelude.Text ->
  SendHeartbeat
newSendHeartbeat :: Text -> Text -> Text -> SendHeartbeat
newSendHeartbeat
  Text
pAgentVersion_
  Text
pDeviceName_
  Text
pDeviceFleetName_ =
    SendHeartbeat'
      { $sel:agentMetrics:SendHeartbeat' :: Maybe [EdgeMetric]
agentMetrics = forall a. Maybe a
Prelude.Nothing,
        $sel:deploymentResult:SendHeartbeat' :: Maybe DeploymentResult
deploymentResult = forall a. Maybe a
Prelude.Nothing,
        $sel:models:SendHeartbeat' :: Maybe [Model]
models = forall a. Maybe a
Prelude.Nothing,
        $sel:agentVersion:SendHeartbeat' :: Text
agentVersion = Text
pAgentVersion_,
        $sel:deviceName:SendHeartbeat' :: Text
deviceName = Text
pDeviceName_,
        $sel:deviceFleetName:SendHeartbeat' :: Text
deviceFleetName = Text
pDeviceFleetName_
      }

-- | For internal use. Returns a list of SageMaker Edge Manager agent
-- operating metrics.
sendHeartbeat_agentMetrics :: Lens.Lens' SendHeartbeat (Prelude.Maybe [EdgeMetric])
sendHeartbeat_agentMetrics :: Lens' SendHeartbeat (Maybe [EdgeMetric])
sendHeartbeat_agentMetrics = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendHeartbeat' {Maybe [EdgeMetric]
agentMetrics :: Maybe [EdgeMetric]
$sel:agentMetrics:SendHeartbeat' :: SendHeartbeat -> Maybe [EdgeMetric]
agentMetrics} -> Maybe [EdgeMetric]
agentMetrics) (\s :: SendHeartbeat
s@SendHeartbeat' {} Maybe [EdgeMetric]
a -> SendHeartbeat
s {$sel:agentMetrics:SendHeartbeat' :: Maybe [EdgeMetric]
agentMetrics = Maybe [EdgeMetric]
a} :: SendHeartbeat) 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

-- | Returns the result of a deployment on the device.
sendHeartbeat_deploymentResult :: Lens.Lens' SendHeartbeat (Prelude.Maybe DeploymentResult)
sendHeartbeat_deploymentResult :: Lens' SendHeartbeat (Maybe DeploymentResult)
sendHeartbeat_deploymentResult = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendHeartbeat' {Maybe DeploymentResult
deploymentResult :: Maybe DeploymentResult
$sel:deploymentResult:SendHeartbeat' :: SendHeartbeat -> Maybe DeploymentResult
deploymentResult} -> Maybe DeploymentResult
deploymentResult) (\s :: SendHeartbeat
s@SendHeartbeat' {} Maybe DeploymentResult
a -> SendHeartbeat
s {$sel:deploymentResult:SendHeartbeat' :: Maybe DeploymentResult
deploymentResult = Maybe DeploymentResult
a} :: SendHeartbeat)

-- | Returns a list of models deployed on the the device.
sendHeartbeat_models :: Lens.Lens' SendHeartbeat (Prelude.Maybe [Model])
sendHeartbeat_models :: Lens' SendHeartbeat (Maybe [Model])
sendHeartbeat_models = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendHeartbeat' {Maybe [Model]
models :: Maybe [Model]
$sel:models:SendHeartbeat' :: SendHeartbeat -> Maybe [Model]
models} -> Maybe [Model]
models) (\s :: SendHeartbeat
s@SendHeartbeat' {} Maybe [Model]
a -> SendHeartbeat
s {$sel:models:SendHeartbeat' :: Maybe [Model]
models = Maybe [Model]
a} :: SendHeartbeat) 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

-- | Returns the version of the agent.
sendHeartbeat_agentVersion :: Lens.Lens' SendHeartbeat Prelude.Text
sendHeartbeat_agentVersion :: Lens' SendHeartbeat Text
sendHeartbeat_agentVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendHeartbeat' {Text
agentVersion :: Text
$sel:agentVersion:SendHeartbeat' :: SendHeartbeat -> Text
agentVersion} -> Text
agentVersion) (\s :: SendHeartbeat
s@SendHeartbeat' {} Text
a -> SendHeartbeat
s {$sel:agentVersion:SendHeartbeat' :: Text
agentVersion = Text
a} :: SendHeartbeat)

-- | The unique name of the device.
sendHeartbeat_deviceName :: Lens.Lens' SendHeartbeat Prelude.Text
sendHeartbeat_deviceName :: Lens' SendHeartbeat Text
sendHeartbeat_deviceName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendHeartbeat' {Text
deviceName :: Text
$sel:deviceName:SendHeartbeat' :: SendHeartbeat -> Text
deviceName} -> Text
deviceName) (\s :: SendHeartbeat
s@SendHeartbeat' {} Text
a -> SendHeartbeat
s {$sel:deviceName:SendHeartbeat' :: Text
deviceName = Text
a} :: SendHeartbeat)

-- | The name of the fleet that the device belongs to.
sendHeartbeat_deviceFleetName :: Lens.Lens' SendHeartbeat Prelude.Text
sendHeartbeat_deviceFleetName :: Lens' SendHeartbeat Text
sendHeartbeat_deviceFleetName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SendHeartbeat' {Text
deviceFleetName :: Text
$sel:deviceFleetName:SendHeartbeat' :: SendHeartbeat -> Text
deviceFleetName} -> Text
deviceFleetName) (\s :: SendHeartbeat
s@SendHeartbeat' {} Text
a -> SendHeartbeat
s {$sel:deviceFleetName:SendHeartbeat' :: Text
deviceFleetName = Text
a} :: SendHeartbeat)

instance Core.AWSRequest SendHeartbeat where
  type
    AWSResponse SendHeartbeat =
      SendHeartbeatResponse
  request :: (Service -> Service) -> SendHeartbeat -> Request SendHeartbeat
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy SendHeartbeat
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse SendHeartbeat)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull SendHeartbeatResponse
SendHeartbeatResponse'

instance Prelude.Hashable SendHeartbeat where
  hashWithSalt :: Int -> SendHeartbeat -> Int
hashWithSalt Int
_salt SendHeartbeat' {Maybe [EdgeMetric]
Maybe [Model]
Maybe DeploymentResult
Text
deviceFleetName :: Text
deviceName :: Text
agentVersion :: Text
models :: Maybe [Model]
deploymentResult :: Maybe DeploymentResult
agentMetrics :: Maybe [EdgeMetric]
$sel:deviceFleetName:SendHeartbeat' :: SendHeartbeat -> Text
$sel:deviceName:SendHeartbeat' :: SendHeartbeat -> Text
$sel:agentVersion:SendHeartbeat' :: SendHeartbeat -> Text
$sel:models:SendHeartbeat' :: SendHeartbeat -> Maybe [Model]
$sel:deploymentResult:SendHeartbeat' :: SendHeartbeat -> Maybe DeploymentResult
$sel:agentMetrics:SendHeartbeat' :: SendHeartbeat -> Maybe [EdgeMetric]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [EdgeMetric]
agentMetrics
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DeploymentResult
deploymentResult
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Model]
models
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
agentVersion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
deviceName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
deviceFleetName

instance Prelude.NFData SendHeartbeat where
  rnf :: SendHeartbeat -> ()
rnf SendHeartbeat' {Maybe [EdgeMetric]
Maybe [Model]
Maybe DeploymentResult
Text
deviceFleetName :: Text
deviceName :: Text
agentVersion :: Text
models :: Maybe [Model]
deploymentResult :: Maybe DeploymentResult
agentMetrics :: Maybe [EdgeMetric]
$sel:deviceFleetName:SendHeartbeat' :: SendHeartbeat -> Text
$sel:deviceName:SendHeartbeat' :: SendHeartbeat -> Text
$sel:agentVersion:SendHeartbeat' :: SendHeartbeat -> Text
$sel:models:SendHeartbeat' :: SendHeartbeat -> Maybe [Model]
$sel:deploymentResult:SendHeartbeat' :: SendHeartbeat -> Maybe DeploymentResult
$sel:agentMetrics:SendHeartbeat' :: SendHeartbeat -> Maybe [EdgeMetric]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [EdgeMetric]
agentMetrics
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DeploymentResult
deploymentResult
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Model]
models
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
agentVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
deviceName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
deviceFleetName

instance Data.ToHeaders SendHeartbeat where
  toHeaders :: SendHeartbeat -> [Header]
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON SendHeartbeat where
  toJSON :: SendHeartbeat -> Value
toJSON SendHeartbeat' {Maybe [EdgeMetric]
Maybe [Model]
Maybe DeploymentResult
Text
deviceFleetName :: Text
deviceName :: Text
agentVersion :: Text
models :: Maybe [Model]
deploymentResult :: Maybe DeploymentResult
agentMetrics :: Maybe [EdgeMetric]
$sel:deviceFleetName:SendHeartbeat' :: SendHeartbeat -> Text
$sel:deviceName:SendHeartbeat' :: SendHeartbeat -> Text
$sel:agentVersion:SendHeartbeat' :: SendHeartbeat -> Text
$sel:models:SendHeartbeat' :: SendHeartbeat -> Maybe [Model]
$sel:deploymentResult:SendHeartbeat' :: SendHeartbeat -> Maybe DeploymentResult
$sel:agentMetrics:SendHeartbeat' :: SendHeartbeat -> Maybe [EdgeMetric]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AgentMetrics" 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 [EdgeMetric]
agentMetrics,
            (Key
"DeploymentResult" 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 DeploymentResult
deploymentResult,
            (Key
"Models" 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 [Model]
models,
            forall a. a -> Maybe a
Prelude.Just (Key
"AgentVersion" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
agentVersion),
            forall a. a -> Maybe a
Prelude.Just (Key
"DeviceName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
deviceName),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"DeviceFleetName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
deviceFleetName)
          ]
      )

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

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

-- | /See:/ 'newSendHeartbeatResponse' smart constructor.
data SendHeartbeatResponse = SendHeartbeatResponse'
  {
  }
  deriving (SendHeartbeatResponse -> SendHeartbeatResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SendHeartbeatResponse -> SendHeartbeatResponse -> Bool
$c/= :: SendHeartbeatResponse -> SendHeartbeatResponse -> Bool
== :: SendHeartbeatResponse -> SendHeartbeatResponse -> Bool
$c== :: SendHeartbeatResponse -> SendHeartbeatResponse -> Bool
Prelude.Eq, ReadPrec [SendHeartbeatResponse]
ReadPrec SendHeartbeatResponse
Int -> ReadS SendHeartbeatResponse
ReadS [SendHeartbeatResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SendHeartbeatResponse]
$creadListPrec :: ReadPrec [SendHeartbeatResponse]
readPrec :: ReadPrec SendHeartbeatResponse
$creadPrec :: ReadPrec SendHeartbeatResponse
readList :: ReadS [SendHeartbeatResponse]
$creadList :: ReadS [SendHeartbeatResponse]
readsPrec :: Int -> ReadS SendHeartbeatResponse
$creadsPrec :: Int -> ReadS SendHeartbeatResponse
Prelude.Read, Int -> SendHeartbeatResponse -> ShowS
[SendHeartbeatResponse] -> ShowS
SendHeartbeatResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SendHeartbeatResponse] -> ShowS
$cshowList :: [SendHeartbeatResponse] -> ShowS
show :: SendHeartbeatResponse -> String
$cshow :: SendHeartbeatResponse -> String
showsPrec :: Int -> SendHeartbeatResponse -> ShowS
$cshowsPrec :: Int -> SendHeartbeatResponse -> ShowS
Prelude.Show, forall x. Rep SendHeartbeatResponse x -> SendHeartbeatResponse
forall x. SendHeartbeatResponse -> Rep SendHeartbeatResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SendHeartbeatResponse x -> SendHeartbeatResponse
$cfrom :: forall x. SendHeartbeatResponse -> Rep SendHeartbeatResponse x
Prelude.Generic)

-- |
-- Create a value of 'SendHeartbeatResponse' 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.
newSendHeartbeatResponse ::
  SendHeartbeatResponse
newSendHeartbeatResponse :: SendHeartbeatResponse
newSendHeartbeatResponse = SendHeartbeatResponse
SendHeartbeatResponse'

instance Prelude.NFData SendHeartbeatResponse where
  rnf :: SendHeartbeatResponse -> ()
rnf SendHeartbeatResponse
_ = ()