{-# 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.Inspector.Types.AssessmentRunAgent
-- 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.Inspector.Types.AssessmentRunAgent where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Inspector.Types.AgentHealth
import Amazonka.Inspector.Types.AgentHealthCode
import Amazonka.Inspector.Types.TelemetryMetadata
import qualified Amazonka.Prelude as Prelude

-- | Contains information about an Amazon Inspector agent. This data type is
-- used as a response element in the ListAssessmentRunAgents action.
--
-- /See:/ 'newAssessmentRunAgent' smart constructor.
data AssessmentRunAgent = AssessmentRunAgent'
  { -- | The description for the agent health code.
    AssessmentRunAgent -> Maybe Text
agentHealthDetails :: Prelude.Maybe Prelude.Text,
    -- | The Auto Scaling group of the EC2 instance that is specified by the
    -- agent ID.
    AssessmentRunAgent -> Maybe Text
autoScalingGroup :: Prelude.Maybe Prelude.Text,
    -- | The AWS account of the EC2 instance where the agent is installed.
    AssessmentRunAgent -> Text
agentId :: Prelude.Text,
    -- | The ARN of the assessment run that is associated with the agent.
    AssessmentRunAgent -> Text
assessmentRunArn :: Prelude.Text,
    -- | The current health state of the agent.
    AssessmentRunAgent -> AgentHealth
agentHealth :: AgentHealth,
    -- | The detailed health state of the agent.
    AssessmentRunAgent -> AgentHealthCode
agentHealthCode :: AgentHealthCode,
    -- | The Amazon Inspector application data metrics that are collected by the
    -- agent.
    AssessmentRunAgent -> [TelemetryMetadata]
telemetryMetadata :: [TelemetryMetadata]
  }
  deriving (AssessmentRunAgent -> AssessmentRunAgent -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AssessmentRunAgent -> AssessmentRunAgent -> Bool
$c/= :: AssessmentRunAgent -> AssessmentRunAgent -> Bool
== :: AssessmentRunAgent -> AssessmentRunAgent -> Bool
$c== :: AssessmentRunAgent -> AssessmentRunAgent -> Bool
Prelude.Eq, ReadPrec [AssessmentRunAgent]
ReadPrec AssessmentRunAgent
Int -> ReadS AssessmentRunAgent
ReadS [AssessmentRunAgent]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AssessmentRunAgent]
$creadListPrec :: ReadPrec [AssessmentRunAgent]
readPrec :: ReadPrec AssessmentRunAgent
$creadPrec :: ReadPrec AssessmentRunAgent
readList :: ReadS [AssessmentRunAgent]
$creadList :: ReadS [AssessmentRunAgent]
readsPrec :: Int -> ReadS AssessmentRunAgent
$creadsPrec :: Int -> ReadS AssessmentRunAgent
Prelude.Read, Int -> AssessmentRunAgent -> ShowS
[AssessmentRunAgent] -> ShowS
AssessmentRunAgent -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AssessmentRunAgent] -> ShowS
$cshowList :: [AssessmentRunAgent] -> ShowS
show :: AssessmentRunAgent -> String
$cshow :: AssessmentRunAgent -> String
showsPrec :: Int -> AssessmentRunAgent -> ShowS
$cshowsPrec :: Int -> AssessmentRunAgent -> ShowS
Prelude.Show, forall x. Rep AssessmentRunAgent x -> AssessmentRunAgent
forall x. AssessmentRunAgent -> Rep AssessmentRunAgent x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AssessmentRunAgent x -> AssessmentRunAgent
$cfrom :: forall x. AssessmentRunAgent -> Rep AssessmentRunAgent x
Prelude.Generic)

-- |
-- Create a value of 'AssessmentRunAgent' 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:
--
-- 'agentHealthDetails', 'assessmentRunAgent_agentHealthDetails' - The description for the agent health code.
--
-- 'autoScalingGroup', 'assessmentRunAgent_autoScalingGroup' - The Auto Scaling group of the EC2 instance that is specified by the
-- agent ID.
--
-- 'agentId', 'assessmentRunAgent_agentId' - The AWS account of the EC2 instance where the agent is installed.
--
-- 'assessmentRunArn', 'assessmentRunAgent_assessmentRunArn' - The ARN of the assessment run that is associated with the agent.
--
-- 'agentHealth', 'assessmentRunAgent_agentHealth' - The current health state of the agent.
--
-- 'agentHealthCode', 'assessmentRunAgent_agentHealthCode' - The detailed health state of the agent.
--
-- 'telemetryMetadata', 'assessmentRunAgent_telemetryMetadata' - The Amazon Inspector application data metrics that are collected by the
-- agent.
newAssessmentRunAgent ::
  -- | 'agentId'
  Prelude.Text ->
  -- | 'assessmentRunArn'
  Prelude.Text ->
  -- | 'agentHealth'
  AgentHealth ->
  -- | 'agentHealthCode'
  AgentHealthCode ->
  AssessmentRunAgent
newAssessmentRunAgent :: Text
-> Text -> AgentHealth -> AgentHealthCode -> AssessmentRunAgent
newAssessmentRunAgent
  Text
pAgentId_
  Text
pAssessmentRunArn_
  AgentHealth
pAgentHealth_
  AgentHealthCode
pAgentHealthCode_ =
    AssessmentRunAgent'
      { $sel:agentHealthDetails:AssessmentRunAgent' :: Maybe Text
agentHealthDetails =
          forall a. Maybe a
Prelude.Nothing,
        $sel:autoScalingGroup:AssessmentRunAgent' :: Maybe Text
autoScalingGroup = forall a. Maybe a
Prelude.Nothing,
        $sel:agentId:AssessmentRunAgent' :: Text
agentId = Text
pAgentId_,
        $sel:assessmentRunArn:AssessmentRunAgent' :: Text
assessmentRunArn = Text
pAssessmentRunArn_,
        $sel:agentHealth:AssessmentRunAgent' :: AgentHealth
agentHealth = AgentHealth
pAgentHealth_,
        $sel:agentHealthCode:AssessmentRunAgent' :: AgentHealthCode
agentHealthCode = AgentHealthCode
pAgentHealthCode_,
        $sel:telemetryMetadata:AssessmentRunAgent' :: [TelemetryMetadata]
telemetryMetadata = forall a. Monoid a => a
Prelude.mempty
      }

-- | The description for the agent health code.
assessmentRunAgent_agentHealthDetails :: Lens.Lens' AssessmentRunAgent (Prelude.Maybe Prelude.Text)
assessmentRunAgent_agentHealthDetails :: Lens' AssessmentRunAgent (Maybe Text)
assessmentRunAgent_agentHealthDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentRunAgent' {Maybe Text
agentHealthDetails :: Maybe Text
$sel:agentHealthDetails:AssessmentRunAgent' :: AssessmentRunAgent -> Maybe Text
agentHealthDetails} -> Maybe Text
agentHealthDetails) (\s :: AssessmentRunAgent
s@AssessmentRunAgent' {} Maybe Text
a -> AssessmentRunAgent
s {$sel:agentHealthDetails:AssessmentRunAgent' :: Maybe Text
agentHealthDetails = Maybe Text
a} :: AssessmentRunAgent)

-- | The Auto Scaling group of the EC2 instance that is specified by the
-- agent ID.
assessmentRunAgent_autoScalingGroup :: Lens.Lens' AssessmentRunAgent (Prelude.Maybe Prelude.Text)
assessmentRunAgent_autoScalingGroup :: Lens' AssessmentRunAgent (Maybe Text)
assessmentRunAgent_autoScalingGroup = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentRunAgent' {Maybe Text
autoScalingGroup :: Maybe Text
$sel:autoScalingGroup:AssessmentRunAgent' :: AssessmentRunAgent -> Maybe Text
autoScalingGroup} -> Maybe Text
autoScalingGroup) (\s :: AssessmentRunAgent
s@AssessmentRunAgent' {} Maybe Text
a -> AssessmentRunAgent
s {$sel:autoScalingGroup:AssessmentRunAgent' :: Maybe Text
autoScalingGroup = Maybe Text
a} :: AssessmentRunAgent)

-- | The AWS account of the EC2 instance where the agent is installed.
assessmentRunAgent_agentId :: Lens.Lens' AssessmentRunAgent Prelude.Text
assessmentRunAgent_agentId :: Lens' AssessmentRunAgent Text
assessmentRunAgent_agentId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentRunAgent' {Text
agentId :: Text
$sel:agentId:AssessmentRunAgent' :: AssessmentRunAgent -> Text
agentId} -> Text
agentId) (\s :: AssessmentRunAgent
s@AssessmentRunAgent' {} Text
a -> AssessmentRunAgent
s {$sel:agentId:AssessmentRunAgent' :: Text
agentId = Text
a} :: AssessmentRunAgent)

-- | The ARN of the assessment run that is associated with the agent.
assessmentRunAgent_assessmentRunArn :: Lens.Lens' AssessmentRunAgent Prelude.Text
assessmentRunAgent_assessmentRunArn :: Lens' AssessmentRunAgent Text
assessmentRunAgent_assessmentRunArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentRunAgent' {Text
assessmentRunArn :: Text
$sel:assessmentRunArn:AssessmentRunAgent' :: AssessmentRunAgent -> Text
assessmentRunArn} -> Text
assessmentRunArn) (\s :: AssessmentRunAgent
s@AssessmentRunAgent' {} Text
a -> AssessmentRunAgent
s {$sel:assessmentRunArn:AssessmentRunAgent' :: Text
assessmentRunArn = Text
a} :: AssessmentRunAgent)

-- | The current health state of the agent.
assessmentRunAgent_agentHealth :: Lens.Lens' AssessmentRunAgent AgentHealth
assessmentRunAgent_agentHealth :: Lens' AssessmentRunAgent AgentHealth
assessmentRunAgent_agentHealth = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentRunAgent' {AgentHealth
agentHealth :: AgentHealth
$sel:agentHealth:AssessmentRunAgent' :: AssessmentRunAgent -> AgentHealth
agentHealth} -> AgentHealth
agentHealth) (\s :: AssessmentRunAgent
s@AssessmentRunAgent' {} AgentHealth
a -> AssessmentRunAgent
s {$sel:agentHealth:AssessmentRunAgent' :: AgentHealth
agentHealth = AgentHealth
a} :: AssessmentRunAgent)

-- | The detailed health state of the agent.
assessmentRunAgent_agentHealthCode :: Lens.Lens' AssessmentRunAgent AgentHealthCode
assessmentRunAgent_agentHealthCode :: Lens' AssessmentRunAgent AgentHealthCode
assessmentRunAgent_agentHealthCode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentRunAgent' {AgentHealthCode
agentHealthCode :: AgentHealthCode
$sel:agentHealthCode:AssessmentRunAgent' :: AssessmentRunAgent -> AgentHealthCode
agentHealthCode} -> AgentHealthCode
agentHealthCode) (\s :: AssessmentRunAgent
s@AssessmentRunAgent' {} AgentHealthCode
a -> AssessmentRunAgent
s {$sel:agentHealthCode:AssessmentRunAgent' :: AgentHealthCode
agentHealthCode = AgentHealthCode
a} :: AssessmentRunAgent)

-- | The Amazon Inspector application data metrics that are collected by the
-- agent.
assessmentRunAgent_telemetryMetadata :: Lens.Lens' AssessmentRunAgent [TelemetryMetadata]
assessmentRunAgent_telemetryMetadata :: Lens' AssessmentRunAgent [TelemetryMetadata]
assessmentRunAgent_telemetryMetadata = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentRunAgent' {[TelemetryMetadata]
telemetryMetadata :: [TelemetryMetadata]
$sel:telemetryMetadata:AssessmentRunAgent' :: AssessmentRunAgent -> [TelemetryMetadata]
telemetryMetadata} -> [TelemetryMetadata]
telemetryMetadata) (\s :: AssessmentRunAgent
s@AssessmentRunAgent' {} [TelemetryMetadata]
a -> AssessmentRunAgent
s {$sel:telemetryMetadata:AssessmentRunAgent' :: [TelemetryMetadata]
telemetryMetadata = [TelemetryMetadata]
a} :: AssessmentRunAgent) 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 Data.FromJSON AssessmentRunAgent where
  parseJSON :: Value -> Parser AssessmentRunAgent
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"AssessmentRunAgent"
      ( \Object
x ->
          Maybe Text
-> Maybe Text
-> Text
-> Text
-> AgentHealth
-> AgentHealthCode
-> [TelemetryMetadata]
-> AssessmentRunAgent
AssessmentRunAgent'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"agentHealthDetails")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"autoScalingGroup")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"agentId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"assessmentRunArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"agentHealth")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"agentHealthCode")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"telemetryMetadata"
                            forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty
                        )
      )

instance Prelude.Hashable AssessmentRunAgent where
  hashWithSalt :: Int -> AssessmentRunAgent -> Int
hashWithSalt Int
_salt AssessmentRunAgent' {[TelemetryMetadata]
Maybe Text
Text
AgentHealth
AgentHealthCode
telemetryMetadata :: [TelemetryMetadata]
agentHealthCode :: AgentHealthCode
agentHealth :: AgentHealth
assessmentRunArn :: Text
agentId :: Text
autoScalingGroup :: Maybe Text
agentHealthDetails :: Maybe Text
$sel:telemetryMetadata:AssessmentRunAgent' :: AssessmentRunAgent -> [TelemetryMetadata]
$sel:agentHealthCode:AssessmentRunAgent' :: AssessmentRunAgent -> AgentHealthCode
$sel:agentHealth:AssessmentRunAgent' :: AssessmentRunAgent -> AgentHealth
$sel:assessmentRunArn:AssessmentRunAgent' :: AssessmentRunAgent -> Text
$sel:agentId:AssessmentRunAgent' :: AssessmentRunAgent -> Text
$sel:autoScalingGroup:AssessmentRunAgent' :: AssessmentRunAgent -> Maybe Text
$sel:agentHealthDetails:AssessmentRunAgent' :: AssessmentRunAgent -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
agentHealthDetails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
autoScalingGroup
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
agentId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assessmentRunArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` AgentHealth
agentHealth
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` AgentHealthCode
agentHealthCode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [TelemetryMetadata]
telemetryMetadata

instance Prelude.NFData AssessmentRunAgent where
  rnf :: AssessmentRunAgent -> ()
rnf AssessmentRunAgent' {[TelemetryMetadata]
Maybe Text
Text
AgentHealth
AgentHealthCode
telemetryMetadata :: [TelemetryMetadata]
agentHealthCode :: AgentHealthCode
agentHealth :: AgentHealth
assessmentRunArn :: Text
agentId :: Text
autoScalingGroup :: Maybe Text
agentHealthDetails :: Maybe Text
$sel:telemetryMetadata:AssessmentRunAgent' :: AssessmentRunAgent -> [TelemetryMetadata]
$sel:agentHealthCode:AssessmentRunAgent' :: AssessmentRunAgent -> AgentHealthCode
$sel:agentHealth:AssessmentRunAgent' :: AssessmentRunAgent -> AgentHealth
$sel:assessmentRunArn:AssessmentRunAgent' :: AssessmentRunAgent -> Text
$sel:agentId:AssessmentRunAgent' :: AssessmentRunAgent -> Text
$sel:autoScalingGroup:AssessmentRunAgent' :: AssessmentRunAgent -> Maybe Text
$sel:agentHealthDetails:AssessmentRunAgent' :: AssessmentRunAgent -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
agentHealthDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
autoScalingGroup
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
agentId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assessmentRunArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AgentHealth
agentHealth
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AgentHealthCode
agentHealthCode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [TelemetryMetadata]
telemetryMetadata