amazonka-cost-explorer-2.0: gen/Amazonka/CostExplorer/UpdateAnomalySubscription.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.CostExplorer.UpdateAnomalySubscription
-- Copyright : (c) 2013-2023 Brendan Hay
-- License : Mozilla Public License, v. 2.0.
-- Maintainer : Brendan Hay
-- Stability : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates an existing cost anomaly monitor subscription.
module Amazonka.CostExplorer.UpdateAnomalySubscription
( -- * Creating a Request
UpdateAnomalySubscription (..),
newUpdateAnomalySubscription,
-- * Request Lenses
updateAnomalySubscription_frequency,
updateAnomalySubscription_monitorArnList,
updateAnomalySubscription_subscribers,
updateAnomalySubscription_subscriptionName,
updateAnomalySubscription_threshold,
updateAnomalySubscription_thresholdExpression,
updateAnomalySubscription_subscriptionArn,
-- * Destructuring the Response
UpdateAnomalySubscriptionResponse (..),
newUpdateAnomalySubscriptionResponse,
-- * Response Lenses
updateAnomalySubscriptionResponse_httpStatus,
updateAnomalySubscriptionResponse_subscriptionArn,
)
where
import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import Amazonka.CostExplorer.Types
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
-- | /See:/ 'newUpdateAnomalySubscription' smart constructor.
data UpdateAnomalySubscription = UpdateAnomalySubscription'
{ -- | The update to the frequency value that subscribers receive
-- notifications.
frequency :: Prelude.Maybe AnomalySubscriptionFrequency,
-- | A list of cost anomaly monitor ARNs.
monitorArnList :: Prelude.Maybe [Prelude.Text],
-- | The update to the subscriber list.
subscribers :: Prelude.Maybe [Subscriber],
-- | The new name of the subscription.
subscriptionName :: Prelude.Maybe Prelude.Text,
-- | (deprecated)
--
-- The update to the threshold value for receiving notifications.
--
-- This field has been deprecated. To update a threshold, use
-- ThresholdExpression. Continued use of Threshold will be treated as
-- shorthand syntax for a ThresholdExpression.
threshold :: Prelude.Maybe Prelude.Double,
-- | The update to the
-- <https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html Expression>
-- object used to specify the anomalies that you want to generate alerts
-- for. This supports dimensions and nested expressions. The supported
-- dimensions are @ANOMALY_TOTAL_IMPACT_ABSOLUTE@ and
-- @ANOMALY_TOTAL_IMPACT_PERCENTAGE@. The supported nested expression types
-- are @AND@ and @OR@. The match option @GREATER_THAN_OR_EQUAL@ is
-- required. Values must be numbers between 0 and 10,000,000,000.
--
-- The following are examples of valid ThresholdExpressions:
--
-- - Absolute threshold:
-- @{ \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_ABSOLUTE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } }@
--
-- - Percentage threshold:
-- @{ \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_PERCENTAGE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } }@
--
-- - @AND@ two thresholds together:
-- @{ \"And\": [ { \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_ABSOLUTE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } }, { \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_PERCENTAGE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } } ] }@
--
-- - @OR@ two thresholds together:
-- @{ \"Or\": [ { \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_ABSOLUTE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } }, { \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_PERCENTAGE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } } ] }@
thresholdExpression :: Prelude.Maybe Expression,
-- | A cost anomaly subscription Amazon Resource Name (ARN).
subscriptionArn :: Prelude.Text
}
deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
-- |
-- Create a value of 'UpdateAnomalySubscription' 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:
--
-- 'frequency', 'updateAnomalySubscription_frequency' - The update to the frequency value that subscribers receive
-- notifications.
--
-- 'monitorArnList', 'updateAnomalySubscription_monitorArnList' - A list of cost anomaly monitor ARNs.
--
-- 'subscribers', 'updateAnomalySubscription_subscribers' - The update to the subscriber list.
--
-- 'subscriptionName', 'updateAnomalySubscription_subscriptionName' - The new name of the subscription.
--
-- 'threshold', 'updateAnomalySubscription_threshold' - (deprecated)
--
-- The update to the threshold value for receiving notifications.
--
-- This field has been deprecated. To update a threshold, use
-- ThresholdExpression. Continued use of Threshold will be treated as
-- shorthand syntax for a ThresholdExpression.
--
-- 'thresholdExpression', 'updateAnomalySubscription_thresholdExpression' - The update to the
-- <https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html Expression>
-- object used to specify the anomalies that you want to generate alerts
-- for. This supports dimensions and nested expressions. The supported
-- dimensions are @ANOMALY_TOTAL_IMPACT_ABSOLUTE@ and
-- @ANOMALY_TOTAL_IMPACT_PERCENTAGE@. The supported nested expression types
-- are @AND@ and @OR@. The match option @GREATER_THAN_OR_EQUAL@ is
-- required. Values must be numbers between 0 and 10,000,000,000.
--
-- The following are examples of valid ThresholdExpressions:
--
-- - Absolute threshold:
-- @{ \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_ABSOLUTE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } }@
--
-- - Percentage threshold:
-- @{ \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_PERCENTAGE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } }@
--
-- - @AND@ two thresholds together:
-- @{ \"And\": [ { \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_ABSOLUTE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } }, { \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_PERCENTAGE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } } ] }@
--
-- - @OR@ two thresholds together:
-- @{ \"Or\": [ { \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_ABSOLUTE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } }, { \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_PERCENTAGE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } } ] }@
--
-- 'subscriptionArn', 'updateAnomalySubscription_subscriptionArn' - A cost anomaly subscription Amazon Resource Name (ARN).
newUpdateAnomalySubscription ::
-- | 'subscriptionArn'
Prelude.Text ->
UpdateAnomalySubscription
newUpdateAnomalySubscription pSubscriptionArn_ =
UpdateAnomalySubscription'
{ frequency =
Prelude.Nothing,
monitorArnList = Prelude.Nothing,
subscribers = Prelude.Nothing,
subscriptionName = Prelude.Nothing,
threshold = Prelude.Nothing,
thresholdExpression = Prelude.Nothing,
subscriptionArn = pSubscriptionArn_
}
-- | The update to the frequency value that subscribers receive
-- notifications.
updateAnomalySubscription_frequency :: Lens.Lens' UpdateAnomalySubscription (Prelude.Maybe AnomalySubscriptionFrequency)
updateAnomalySubscription_frequency = Lens.lens (\UpdateAnomalySubscription' {frequency} -> frequency) (\s@UpdateAnomalySubscription' {} a -> s {frequency = a} :: UpdateAnomalySubscription)
-- | A list of cost anomaly monitor ARNs.
updateAnomalySubscription_monitorArnList :: Lens.Lens' UpdateAnomalySubscription (Prelude.Maybe [Prelude.Text])
updateAnomalySubscription_monitorArnList = Lens.lens (\UpdateAnomalySubscription' {monitorArnList} -> monitorArnList) (\s@UpdateAnomalySubscription' {} a -> s {monitorArnList = a} :: UpdateAnomalySubscription) Prelude.. Lens.mapping Lens.coerced
-- | The update to the subscriber list.
updateAnomalySubscription_subscribers :: Lens.Lens' UpdateAnomalySubscription (Prelude.Maybe [Subscriber])
updateAnomalySubscription_subscribers = Lens.lens (\UpdateAnomalySubscription' {subscribers} -> subscribers) (\s@UpdateAnomalySubscription' {} a -> s {subscribers = a} :: UpdateAnomalySubscription) Prelude.. Lens.mapping Lens.coerced
-- | The new name of the subscription.
updateAnomalySubscription_subscriptionName :: Lens.Lens' UpdateAnomalySubscription (Prelude.Maybe Prelude.Text)
updateAnomalySubscription_subscriptionName = Lens.lens (\UpdateAnomalySubscription' {subscriptionName} -> subscriptionName) (\s@UpdateAnomalySubscription' {} a -> s {subscriptionName = a} :: UpdateAnomalySubscription)
-- | (deprecated)
--
-- The update to the threshold value for receiving notifications.
--
-- This field has been deprecated. To update a threshold, use
-- ThresholdExpression. Continued use of Threshold will be treated as
-- shorthand syntax for a ThresholdExpression.
updateAnomalySubscription_threshold :: Lens.Lens' UpdateAnomalySubscription (Prelude.Maybe Prelude.Double)
updateAnomalySubscription_threshold = Lens.lens (\UpdateAnomalySubscription' {threshold} -> threshold) (\s@UpdateAnomalySubscription' {} a -> s {threshold = a} :: UpdateAnomalySubscription)
-- | The update to the
-- <https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html Expression>
-- object used to specify the anomalies that you want to generate alerts
-- for. This supports dimensions and nested expressions. The supported
-- dimensions are @ANOMALY_TOTAL_IMPACT_ABSOLUTE@ and
-- @ANOMALY_TOTAL_IMPACT_PERCENTAGE@. The supported nested expression types
-- are @AND@ and @OR@. The match option @GREATER_THAN_OR_EQUAL@ is
-- required. Values must be numbers between 0 and 10,000,000,000.
--
-- The following are examples of valid ThresholdExpressions:
--
-- - Absolute threshold:
-- @{ \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_ABSOLUTE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } }@
--
-- - Percentage threshold:
-- @{ \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_PERCENTAGE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } }@
--
-- - @AND@ two thresholds together:
-- @{ \"And\": [ { \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_ABSOLUTE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } }, { \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_PERCENTAGE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } } ] }@
--
-- - @OR@ two thresholds together:
-- @{ \"Or\": [ { \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_ABSOLUTE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } }, { \"Dimensions\": { \"Key\": \"ANOMALY_TOTAL_IMPACT_PERCENTAGE\", \"MatchOptions\": [ \"GREATER_THAN_OR_EQUAL\" ], \"Values\": [ \"100\" ] } } ] }@
updateAnomalySubscription_thresholdExpression :: Lens.Lens' UpdateAnomalySubscription (Prelude.Maybe Expression)
updateAnomalySubscription_thresholdExpression = Lens.lens (\UpdateAnomalySubscription' {thresholdExpression} -> thresholdExpression) (\s@UpdateAnomalySubscription' {} a -> s {thresholdExpression = a} :: UpdateAnomalySubscription)
-- | A cost anomaly subscription Amazon Resource Name (ARN).
updateAnomalySubscription_subscriptionArn :: Lens.Lens' UpdateAnomalySubscription Prelude.Text
updateAnomalySubscription_subscriptionArn = Lens.lens (\UpdateAnomalySubscription' {subscriptionArn} -> subscriptionArn) (\s@UpdateAnomalySubscription' {} a -> s {subscriptionArn = a} :: UpdateAnomalySubscription)
instance Core.AWSRequest UpdateAnomalySubscription where
type
AWSResponse UpdateAnomalySubscription =
UpdateAnomalySubscriptionResponse
request overrides =
Request.postJSON (overrides defaultService)
response =
Response.receiveJSON
( \s h x ->
UpdateAnomalySubscriptionResponse'
Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
Prelude.<*> (x Data..:> "SubscriptionArn")
)
instance Prelude.Hashable UpdateAnomalySubscription where
hashWithSalt _salt UpdateAnomalySubscription' {..} =
_salt
`Prelude.hashWithSalt` frequency
`Prelude.hashWithSalt` monitorArnList
`Prelude.hashWithSalt` subscribers
`Prelude.hashWithSalt` subscriptionName
`Prelude.hashWithSalt` threshold
`Prelude.hashWithSalt` thresholdExpression
`Prelude.hashWithSalt` subscriptionArn
instance Prelude.NFData UpdateAnomalySubscription where
rnf UpdateAnomalySubscription' {..} =
Prelude.rnf frequency
`Prelude.seq` Prelude.rnf monitorArnList
`Prelude.seq` Prelude.rnf subscribers
`Prelude.seq` Prelude.rnf subscriptionName
`Prelude.seq` Prelude.rnf threshold
`Prelude.seq` Prelude.rnf thresholdExpression
`Prelude.seq` Prelude.rnf subscriptionArn
instance Data.ToHeaders UpdateAnomalySubscription where
toHeaders =
Prelude.const
( Prelude.mconcat
[ "X-Amz-Target"
Data.=# ( "AWSInsightsIndexService.UpdateAnomalySubscription" ::
Prelude.ByteString
),
"Content-Type"
Data.=# ( "application/x-amz-json-1.1" ::
Prelude.ByteString
)
]
)
instance Data.ToJSON UpdateAnomalySubscription where
toJSON UpdateAnomalySubscription' {..} =
Data.object
( Prelude.catMaybes
[ ("Frequency" Data..=) Prelude.<$> frequency,
("MonitorArnList" Data..=)
Prelude.<$> monitorArnList,
("Subscribers" Data..=) Prelude.<$> subscribers,
("SubscriptionName" Data..=)
Prelude.<$> subscriptionName,
("Threshold" Data..=) Prelude.<$> threshold,
("ThresholdExpression" Data..=)
Prelude.<$> thresholdExpression,
Prelude.Just
("SubscriptionArn" Data..= subscriptionArn)
]
)
instance Data.ToPath UpdateAnomalySubscription where
toPath = Prelude.const "/"
instance Data.ToQuery UpdateAnomalySubscription where
toQuery = Prelude.const Prelude.mempty
-- | /See:/ 'newUpdateAnomalySubscriptionResponse' smart constructor.
data UpdateAnomalySubscriptionResponse = UpdateAnomalySubscriptionResponse'
{ -- | The response's http status code.
httpStatus :: Prelude.Int,
-- | A cost anomaly subscription ARN.
subscriptionArn :: Prelude.Text
}
deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
-- |
-- Create a value of 'UpdateAnomalySubscriptionResponse' 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', 'updateAnomalySubscriptionResponse_httpStatus' - The response's http status code.
--
-- 'subscriptionArn', 'updateAnomalySubscriptionResponse_subscriptionArn' - A cost anomaly subscription ARN.
newUpdateAnomalySubscriptionResponse ::
-- | 'httpStatus'
Prelude.Int ->
-- | 'subscriptionArn'
Prelude.Text ->
UpdateAnomalySubscriptionResponse
newUpdateAnomalySubscriptionResponse
pHttpStatus_
pSubscriptionArn_ =
UpdateAnomalySubscriptionResponse'
{ httpStatus =
pHttpStatus_,
subscriptionArn = pSubscriptionArn_
}
-- | The response's http status code.
updateAnomalySubscriptionResponse_httpStatus :: Lens.Lens' UpdateAnomalySubscriptionResponse Prelude.Int
updateAnomalySubscriptionResponse_httpStatus = Lens.lens (\UpdateAnomalySubscriptionResponse' {httpStatus} -> httpStatus) (\s@UpdateAnomalySubscriptionResponse' {} a -> s {httpStatus = a} :: UpdateAnomalySubscriptionResponse)
-- | A cost anomaly subscription ARN.
updateAnomalySubscriptionResponse_subscriptionArn :: Lens.Lens' UpdateAnomalySubscriptionResponse Prelude.Text
updateAnomalySubscriptionResponse_subscriptionArn = Lens.lens (\UpdateAnomalySubscriptionResponse' {subscriptionArn} -> subscriptionArn) (\s@UpdateAnomalySubscriptionResponse' {} a -> s {subscriptionArn = a} :: UpdateAnomalySubscriptionResponse)
instance
Prelude.NFData
UpdateAnomalySubscriptionResponse
where
rnf UpdateAnomalySubscriptionResponse' {..} =
Prelude.rnf httpStatus
`Prelude.seq` Prelude.rnf subscriptionArn