amazonka-securityhub-2.0: gen/Amazonka/SecurityHub/CreateInsight.hs
{-# 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.SecurityHub.CreateInsight
-- Copyright : (c) 2013-2023 Brendan Hay
-- License : Mozilla Public License, v. 2.0.
-- Maintainer : Brendan Hay
-- Stability : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a custom insight in Security Hub. An insight is a consolidation
-- of findings that relate to a security issue that requires attention or
-- remediation.
--
-- To group the related findings in the insight, use the
-- @GroupByAttribute@.
module Amazonka.SecurityHub.CreateInsight
( -- * Creating a Request
CreateInsight (..),
newCreateInsight,
-- * Request Lenses
createInsight_name,
createInsight_filters,
createInsight_groupByAttribute,
-- * Destructuring the Response
CreateInsightResponse (..),
newCreateInsightResponse,
-- * Response Lenses
createInsightResponse_httpStatus,
createInsightResponse_insightArn,
)
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.SecurityHub.Types
-- | /See:/ 'newCreateInsight' smart constructor.
data CreateInsight = CreateInsight'
{ -- | The name of the custom insight to create.
name :: Prelude.Text,
-- | One or more attributes used to filter the findings included in the
-- insight. The insight only includes findings that match the criteria
-- defined in the filters.
filters :: AwsSecurityFindingFilters,
-- | The attribute used to group the findings for the insight. The grouping
-- attribute identifies the type of item that the insight applies to. For
-- example, if an insight is grouped by resource identifier, then the
-- insight produces a list of resource identifiers.
groupByAttribute :: Prelude.Text
}
deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
-- |
-- Create a value of 'CreateInsight' 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:
--
-- 'name', 'createInsight_name' - The name of the custom insight to create.
--
-- 'filters', 'createInsight_filters' - One or more attributes used to filter the findings included in the
-- insight. The insight only includes findings that match the criteria
-- defined in the filters.
--
-- 'groupByAttribute', 'createInsight_groupByAttribute' - The attribute used to group the findings for the insight. The grouping
-- attribute identifies the type of item that the insight applies to. For
-- example, if an insight is grouped by resource identifier, then the
-- insight produces a list of resource identifiers.
newCreateInsight ::
-- | 'name'
Prelude.Text ->
-- | 'filters'
AwsSecurityFindingFilters ->
-- | 'groupByAttribute'
Prelude.Text ->
CreateInsight
newCreateInsight pName_ pFilters_ pGroupByAttribute_ =
CreateInsight'
{ name = pName_,
filters = pFilters_,
groupByAttribute = pGroupByAttribute_
}
-- | The name of the custom insight to create.
createInsight_name :: Lens.Lens' CreateInsight Prelude.Text
createInsight_name = Lens.lens (\CreateInsight' {name} -> name) (\s@CreateInsight' {} a -> s {name = a} :: CreateInsight)
-- | One or more attributes used to filter the findings included in the
-- insight. The insight only includes findings that match the criteria
-- defined in the filters.
createInsight_filters :: Lens.Lens' CreateInsight AwsSecurityFindingFilters
createInsight_filters = Lens.lens (\CreateInsight' {filters} -> filters) (\s@CreateInsight' {} a -> s {filters = a} :: CreateInsight)
-- | The attribute used to group the findings for the insight. The grouping
-- attribute identifies the type of item that the insight applies to. For
-- example, if an insight is grouped by resource identifier, then the
-- insight produces a list of resource identifiers.
createInsight_groupByAttribute :: Lens.Lens' CreateInsight Prelude.Text
createInsight_groupByAttribute = Lens.lens (\CreateInsight' {groupByAttribute} -> groupByAttribute) (\s@CreateInsight' {} a -> s {groupByAttribute = a} :: CreateInsight)
instance Core.AWSRequest CreateInsight where
type
AWSResponse CreateInsight =
CreateInsightResponse
request overrides =
Request.postJSON (overrides defaultService)
response =
Response.receiveJSON
( \s h x ->
CreateInsightResponse'
Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
Prelude.<*> (x Data..:> "InsightArn")
)
instance Prelude.Hashable CreateInsight where
hashWithSalt _salt CreateInsight' {..} =
_salt
`Prelude.hashWithSalt` name
`Prelude.hashWithSalt` filters
`Prelude.hashWithSalt` groupByAttribute
instance Prelude.NFData CreateInsight where
rnf CreateInsight' {..} =
Prelude.rnf name
`Prelude.seq` Prelude.rnf filters
`Prelude.seq` Prelude.rnf groupByAttribute
instance Data.ToHeaders CreateInsight where
toHeaders =
Prelude.const
( Prelude.mconcat
[ "Content-Type"
Data.=# ( "application/x-amz-json-1.1" ::
Prelude.ByteString
)
]
)
instance Data.ToJSON CreateInsight where
toJSON CreateInsight' {..} =
Data.object
( Prelude.catMaybes
[ Prelude.Just ("Name" Data..= name),
Prelude.Just ("Filters" Data..= filters),
Prelude.Just
("GroupByAttribute" Data..= groupByAttribute)
]
)
instance Data.ToPath CreateInsight where
toPath = Prelude.const "/insights"
instance Data.ToQuery CreateInsight where
toQuery = Prelude.const Prelude.mempty
-- | /See:/ 'newCreateInsightResponse' smart constructor.
data CreateInsightResponse = CreateInsightResponse'
{ -- | The response's http status code.
httpStatus :: Prelude.Int,
-- | The ARN of the insight created.
insightArn :: Prelude.Text
}
deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
-- |
-- Create a value of 'CreateInsightResponse' 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', 'createInsightResponse_httpStatus' - The response's http status code.
--
-- 'insightArn', 'createInsightResponse_insightArn' - The ARN of the insight created.
newCreateInsightResponse ::
-- | 'httpStatus'
Prelude.Int ->
-- | 'insightArn'
Prelude.Text ->
CreateInsightResponse
newCreateInsightResponse pHttpStatus_ pInsightArn_ =
CreateInsightResponse'
{ httpStatus = pHttpStatus_,
insightArn = pInsightArn_
}
-- | The response's http status code.
createInsightResponse_httpStatus :: Lens.Lens' CreateInsightResponse Prelude.Int
createInsightResponse_httpStatus = Lens.lens (\CreateInsightResponse' {httpStatus} -> httpStatus) (\s@CreateInsightResponse' {} a -> s {httpStatus = a} :: CreateInsightResponse)
-- | The ARN of the insight created.
createInsightResponse_insightArn :: Lens.Lens' CreateInsightResponse Prelude.Text
createInsightResponse_insightArn = Lens.lens (\CreateInsightResponse' {insightArn} -> insightArn) (\s@CreateInsightResponse' {} a -> s {insightArn = a} :: CreateInsightResponse)
instance Prelude.NFData CreateInsightResponse where
rnf CreateInsightResponse' {..} =
Prelude.rnf httpStatus
`Prelude.seq` Prelude.rnf insightArn