{-# 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.DevOpsGuru.Types.ReactiveInsight
-- 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.DevOpsGuru.Types.ReactiveInsight where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.DevOpsGuru.Types.InsightSeverity
import Amazonka.DevOpsGuru.Types.InsightStatus
import Amazonka.DevOpsGuru.Types.InsightTimeRange
import Amazonka.DevOpsGuru.Types.ResourceCollection
import qualified Amazonka.Prelude as Prelude

-- | Information about a reactive insight. This object is returned by
-- @ListInsights@.
--
-- /See:/ 'newReactiveInsight' smart constructor.
data ReactiveInsight = ReactiveInsight'
  { -- | Describes the reactive insight.
    ReactiveInsight -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The ID of a reactive insight.
    ReactiveInsight -> Maybe Text
id :: Prelude.Maybe Prelude.Text,
    ReactiveInsight -> Maybe InsightTimeRange
insightTimeRange :: Prelude.Maybe InsightTimeRange,
    -- | The name of a reactive insight.
    ReactiveInsight -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    ReactiveInsight -> Maybe ResourceCollection
resourceCollection :: Prelude.Maybe ResourceCollection,
    -- | The severity of the insight. For more information, see
    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
    -- in the /Amazon DevOps Guru User Guide/.
    ReactiveInsight -> Maybe InsightSeverity
severity :: Prelude.Maybe InsightSeverity,
    -- | The ID of the Amazon Web Services System Manager OpsItem created for
    -- this insight. You must enable the creation of OpstItems insights before
    -- they are created for each insight.
    ReactiveInsight -> Maybe Text
ssmOpsItemId :: Prelude.Maybe Prelude.Text,
    -- | The status of a reactive insight.
    ReactiveInsight -> Maybe InsightStatus
status :: Prelude.Maybe InsightStatus
  }
  deriving (ReactiveInsight -> ReactiveInsight -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReactiveInsight -> ReactiveInsight -> Bool
$c/= :: ReactiveInsight -> ReactiveInsight -> Bool
== :: ReactiveInsight -> ReactiveInsight -> Bool
$c== :: ReactiveInsight -> ReactiveInsight -> Bool
Prelude.Eq, ReadPrec [ReactiveInsight]
ReadPrec ReactiveInsight
Int -> ReadS ReactiveInsight
ReadS [ReactiveInsight]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ReactiveInsight]
$creadListPrec :: ReadPrec [ReactiveInsight]
readPrec :: ReadPrec ReactiveInsight
$creadPrec :: ReadPrec ReactiveInsight
readList :: ReadS [ReactiveInsight]
$creadList :: ReadS [ReactiveInsight]
readsPrec :: Int -> ReadS ReactiveInsight
$creadsPrec :: Int -> ReadS ReactiveInsight
Prelude.Read, Int -> ReactiveInsight -> ShowS
[ReactiveInsight] -> ShowS
ReactiveInsight -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ReactiveInsight] -> ShowS
$cshowList :: [ReactiveInsight] -> ShowS
show :: ReactiveInsight -> String
$cshow :: ReactiveInsight -> String
showsPrec :: Int -> ReactiveInsight -> ShowS
$cshowsPrec :: Int -> ReactiveInsight -> ShowS
Prelude.Show, forall x. Rep ReactiveInsight x -> ReactiveInsight
forall x. ReactiveInsight -> Rep ReactiveInsight x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ReactiveInsight x -> ReactiveInsight
$cfrom :: forall x. ReactiveInsight -> Rep ReactiveInsight x
Prelude.Generic)

-- |
-- Create a value of 'ReactiveInsight' 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:
--
-- 'description', 'reactiveInsight_description' - Describes the reactive insight.
--
-- 'id', 'reactiveInsight_id' - The ID of a reactive insight.
--
-- 'insightTimeRange', 'reactiveInsight_insightTimeRange' - Undocumented member.
--
-- 'name', 'reactiveInsight_name' - The name of a reactive insight.
--
-- 'resourceCollection', 'reactiveInsight_resourceCollection' - Undocumented member.
--
-- 'severity', 'reactiveInsight_severity' - The severity of the insight. For more information, see
-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
-- in the /Amazon DevOps Guru User Guide/.
--
-- 'ssmOpsItemId', 'reactiveInsight_ssmOpsItemId' - The ID of the Amazon Web Services System Manager OpsItem created for
-- this insight. You must enable the creation of OpstItems insights before
-- they are created for each insight.
--
-- 'status', 'reactiveInsight_status' - The status of a reactive insight.
newReactiveInsight ::
  ReactiveInsight
newReactiveInsight :: ReactiveInsight
newReactiveInsight =
  ReactiveInsight'
    { $sel:description:ReactiveInsight' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:id:ReactiveInsight' :: Maybe Text
id = forall a. Maybe a
Prelude.Nothing,
      $sel:insightTimeRange:ReactiveInsight' :: Maybe InsightTimeRange
insightTimeRange = forall a. Maybe a
Prelude.Nothing,
      $sel:name:ReactiveInsight' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:resourceCollection:ReactiveInsight' :: Maybe ResourceCollection
resourceCollection = forall a. Maybe a
Prelude.Nothing,
      $sel:severity:ReactiveInsight' :: Maybe InsightSeverity
severity = forall a. Maybe a
Prelude.Nothing,
      $sel:ssmOpsItemId:ReactiveInsight' :: Maybe Text
ssmOpsItemId = forall a. Maybe a
Prelude.Nothing,
      $sel:status:ReactiveInsight' :: Maybe InsightStatus
status = forall a. Maybe a
Prelude.Nothing
    }

-- | Describes the reactive insight.
reactiveInsight_description :: Lens.Lens' ReactiveInsight (Prelude.Maybe Prelude.Text)
reactiveInsight_description :: Lens' ReactiveInsight (Maybe Text)
reactiveInsight_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReactiveInsight' {Maybe Text
description :: Maybe Text
$sel:description:ReactiveInsight' :: ReactiveInsight -> Maybe Text
description} -> Maybe Text
description) (\s :: ReactiveInsight
s@ReactiveInsight' {} Maybe Text
a -> ReactiveInsight
s {$sel:description:ReactiveInsight' :: Maybe Text
description = Maybe Text
a} :: ReactiveInsight)

-- | The ID of a reactive insight.
reactiveInsight_id :: Lens.Lens' ReactiveInsight (Prelude.Maybe Prelude.Text)
reactiveInsight_id :: Lens' ReactiveInsight (Maybe Text)
reactiveInsight_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReactiveInsight' {Maybe Text
id :: Maybe Text
$sel:id:ReactiveInsight' :: ReactiveInsight -> Maybe Text
id} -> Maybe Text
id) (\s :: ReactiveInsight
s@ReactiveInsight' {} Maybe Text
a -> ReactiveInsight
s {$sel:id:ReactiveInsight' :: Maybe Text
id = Maybe Text
a} :: ReactiveInsight)

-- | Undocumented member.
reactiveInsight_insightTimeRange :: Lens.Lens' ReactiveInsight (Prelude.Maybe InsightTimeRange)
reactiveInsight_insightTimeRange :: Lens' ReactiveInsight (Maybe InsightTimeRange)
reactiveInsight_insightTimeRange = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReactiveInsight' {Maybe InsightTimeRange
insightTimeRange :: Maybe InsightTimeRange
$sel:insightTimeRange:ReactiveInsight' :: ReactiveInsight -> Maybe InsightTimeRange
insightTimeRange} -> Maybe InsightTimeRange
insightTimeRange) (\s :: ReactiveInsight
s@ReactiveInsight' {} Maybe InsightTimeRange
a -> ReactiveInsight
s {$sel:insightTimeRange:ReactiveInsight' :: Maybe InsightTimeRange
insightTimeRange = Maybe InsightTimeRange
a} :: ReactiveInsight)

-- | The name of a reactive insight.
reactiveInsight_name :: Lens.Lens' ReactiveInsight (Prelude.Maybe Prelude.Text)
reactiveInsight_name :: Lens' ReactiveInsight (Maybe Text)
reactiveInsight_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReactiveInsight' {Maybe Text
name :: Maybe Text
$sel:name:ReactiveInsight' :: ReactiveInsight -> Maybe Text
name} -> Maybe Text
name) (\s :: ReactiveInsight
s@ReactiveInsight' {} Maybe Text
a -> ReactiveInsight
s {$sel:name:ReactiveInsight' :: Maybe Text
name = Maybe Text
a} :: ReactiveInsight)

-- | Undocumented member.
reactiveInsight_resourceCollection :: Lens.Lens' ReactiveInsight (Prelude.Maybe ResourceCollection)
reactiveInsight_resourceCollection :: Lens' ReactiveInsight (Maybe ResourceCollection)
reactiveInsight_resourceCollection = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReactiveInsight' {Maybe ResourceCollection
resourceCollection :: Maybe ResourceCollection
$sel:resourceCollection:ReactiveInsight' :: ReactiveInsight -> Maybe ResourceCollection
resourceCollection} -> Maybe ResourceCollection
resourceCollection) (\s :: ReactiveInsight
s@ReactiveInsight' {} Maybe ResourceCollection
a -> ReactiveInsight
s {$sel:resourceCollection:ReactiveInsight' :: Maybe ResourceCollection
resourceCollection = Maybe ResourceCollection
a} :: ReactiveInsight)

-- | The severity of the insight. For more information, see
-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
-- in the /Amazon DevOps Guru User Guide/.
reactiveInsight_severity :: Lens.Lens' ReactiveInsight (Prelude.Maybe InsightSeverity)
reactiveInsight_severity :: Lens' ReactiveInsight (Maybe InsightSeverity)
reactiveInsight_severity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReactiveInsight' {Maybe InsightSeverity
severity :: Maybe InsightSeverity
$sel:severity:ReactiveInsight' :: ReactiveInsight -> Maybe InsightSeverity
severity} -> Maybe InsightSeverity
severity) (\s :: ReactiveInsight
s@ReactiveInsight' {} Maybe InsightSeverity
a -> ReactiveInsight
s {$sel:severity:ReactiveInsight' :: Maybe InsightSeverity
severity = Maybe InsightSeverity
a} :: ReactiveInsight)

-- | The ID of the Amazon Web Services System Manager OpsItem created for
-- this insight. You must enable the creation of OpstItems insights before
-- they are created for each insight.
reactiveInsight_ssmOpsItemId :: Lens.Lens' ReactiveInsight (Prelude.Maybe Prelude.Text)
reactiveInsight_ssmOpsItemId :: Lens' ReactiveInsight (Maybe Text)
reactiveInsight_ssmOpsItemId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReactiveInsight' {Maybe Text
ssmOpsItemId :: Maybe Text
$sel:ssmOpsItemId:ReactiveInsight' :: ReactiveInsight -> Maybe Text
ssmOpsItemId} -> Maybe Text
ssmOpsItemId) (\s :: ReactiveInsight
s@ReactiveInsight' {} Maybe Text
a -> ReactiveInsight
s {$sel:ssmOpsItemId:ReactiveInsight' :: Maybe Text
ssmOpsItemId = Maybe Text
a} :: ReactiveInsight)

-- | The status of a reactive insight.
reactiveInsight_status :: Lens.Lens' ReactiveInsight (Prelude.Maybe InsightStatus)
reactiveInsight_status :: Lens' ReactiveInsight (Maybe InsightStatus)
reactiveInsight_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReactiveInsight' {Maybe InsightStatus
status :: Maybe InsightStatus
$sel:status:ReactiveInsight' :: ReactiveInsight -> Maybe InsightStatus
status} -> Maybe InsightStatus
status) (\s :: ReactiveInsight
s@ReactiveInsight' {} Maybe InsightStatus
a -> ReactiveInsight
s {$sel:status:ReactiveInsight' :: Maybe InsightStatus
status = Maybe InsightStatus
a} :: ReactiveInsight)

instance Data.FromJSON ReactiveInsight where
  parseJSON :: Value -> Parser ReactiveInsight
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ReactiveInsight"
      ( \Object
x ->
          Maybe Text
-> Maybe Text
-> Maybe InsightTimeRange
-> Maybe Text
-> Maybe ResourceCollection
-> Maybe InsightSeverity
-> Maybe Text
-> Maybe InsightStatus
-> ReactiveInsight
ReactiveInsight'
            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
"Description")
            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
"Id")
            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
"InsightTimeRange")
            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
"Name")
            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
"ResourceCollection")
            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
"Severity")
            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
"SsmOpsItemId")
            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
"Status")
      )

instance Prelude.Hashable ReactiveInsight where
  hashWithSalt :: Int -> ReactiveInsight -> Int
hashWithSalt Int
_salt ReactiveInsight' {Maybe Text
Maybe InsightSeverity
Maybe InsightStatus
Maybe InsightTimeRange
Maybe ResourceCollection
status :: Maybe InsightStatus
ssmOpsItemId :: Maybe Text
severity :: Maybe InsightSeverity
resourceCollection :: Maybe ResourceCollection
name :: Maybe Text
insightTimeRange :: Maybe InsightTimeRange
id :: Maybe Text
description :: Maybe Text
$sel:status:ReactiveInsight' :: ReactiveInsight -> Maybe InsightStatus
$sel:ssmOpsItemId:ReactiveInsight' :: ReactiveInsight -> Maybe Text
$sel:severity:ReactiveInsight' :: ReactiveInsight -> Maybe InsightSeverity
$sel:resourceCollection:ReactiveInsight' :: ReactiveInsight -> Maybe ResourceCollection
$sel:name:ReactiveInsight' :: ReactiveInsight -> Maybe Text
$sel:insightTimeRange:ReactiveInsight' :: ReactiveInsight -> Maybe InsightTimeRange
$sel:id:ReactiveInsight' :: ReactiveInsight -> Maybe Text
$sel:description:ReactiveInsight' :: ReactiveInsight -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
id
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InsightTimeRange
insightTimeRange
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceCollection
resourceCollection
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InsightSeverity
severity
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
ssmOpsItemId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InsightStatus
status

instance Prelude.NFData ReactiveInsight where
  rnf :: ReactiveInsight -> ()
rnf ReactiveInsight' {Maybe Text
Maybe InsightSeverity
Maybe InsightStatus
Maybe InsightTimeRange
Maybe ResourceCollection
status :: Maybe InsightStatus
ssmOpsItemId :: Maybe Text
severity :: Maybe InsightSeverity
resourceCollection :: Maybe ResourceCollection
name :: Maybe Text
insightTimeRange :: Maybe InsightTimeRange
id :: Maybe Text
description :: Maybe Text
$sel:status:ReactiveInsight' :: ReactiveInsight -> Maybe InsightStatus
$sel:ssmOpsItemId:ReactiveInsight' :: ReactiveInsight -> Maybe Text
$sel:severity:ReactiveInsight' :: ReactiveInsight -> Maybe InsightSeverity
$sel:resourceCollection:ReactiveInsight' :: ReactiveInsight -> Maybe ResourceCollection
$sel:name:ReactiveInsight' :: ReactiveInsight -> Maybe Text
$sel:insightTimeRange:ReactiveInsight' :: ReactiveInsight -> Maybe InsightTimeRange
$sel:id:ReactiveInsight' :: ReactiveInsight -> Maybe Text
$sel:description:ReactiveInsight' :: ReactiveInsight -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
id
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InsightTimeRange
insightTimeRange
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceCollection
resourceCollection
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InsightSeverity
severity
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
ssmOpsItemId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InsightStatus
status