amazonka-autoscaling-2.0: gen/Amazonka/AutoScaling/GetPredictiveScalingForecast.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.AutoScaling.GetPredictiveScalingForecast
-- Copyright : (c) 2013-2023 Brendan Hay
-- License : Mozilla Public License, v. 2.0.
-- Maintainer : Brendan Hay
-- Stability : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves the forecast data for a predictive scaling policy.
--
-- Load forecasts are predictions of the hourly load values using
-- historical load data from CloudWatch and an analysis of historical
-- trends. Capacity forecasts are represented as predicted values for the
-- minimum capacity that is needed on an hourly basis, based on the hourly
-- load forecast.
--
-- A minimum of 24 hours of data is required to create the initial
-- forecasts. However, having a full 14 days of historical data results in
-- more accurate forecasts.
--
-- For more information, see
-- <https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-predictive-scaling.html Predictive scaling for Amazon EC2 Auto Scaling>
-- in the /Amazon EC2 Auto Scaling User Guide/.
module Amazonka.AutoScaling.GetPredictiveScalingForecast
( -- * Creating a Request
GetPredictiveScalingForecast (..),
newGetPredictiveScalingForecast,
-- * Request Lenses
getPredictiveScalingForecast_autoScalingGroupName,
getPredictiveScalingForecast_policyName,
getPredictiveScalingForecast_startTime,
getPredictiveScalingForecast_endTime,
-- * Destructuring the Response
GetPredictiveScalingForecastResponse (..),
newGetPredictiveScalingForecastResponse,
-- * Response Lenses
getPredictiveScalingForecastResponse_httpStatus,
getPredictiveScalingForecastResponse_loadForecast,
getPredictiveScalingForecastResponse_capacityForecast,
getPredictiveScalingForecastResponse_updateTime,
)
where
import Amazonka.AutoScaling.Types
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
-- | /See:/ 'newGetPredictiveScalingForecast' smart constructor.
data GetPredictiveScalingForecast = GetPredictiveScalingForecast'
{ -- | The name of the Auto Scaling group.
autoScalingGroupName :: Prelude.Text,
-- | The name of the policy.
policyName :: Prelude.Text,
-- | The inclusive start time of the time range for the forecast data to get.
-- At most, the date and time can be one year before the current date and
-- time.
startTime :: Data.ISO8601,
-- | The exclusive end time of the time range for the forecast data to get.
-- The maximum time duration between the start and end time is 30 days.
--
-- Although this parameter can accept a date and time that is more than two
-- days in the future, the availability of forecast data has limits. Amazon
-- EC2 Auto Scaling only issues forecasts for periods of two days in
-- advance.
endTime :: Data.ISO8601
}
deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
-- |
-- Create a value of 'GetPredictiveScalingForecast' 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:
--
-- 'autoScalingGroupName', 'getPredictiveScalingForecast_autoScalingGroupName' - The name of the Auto Scaling group.
--
-- 'policyName', 'getPredictiveScalingForecast_policyName' - The name of the policy.
--
-- 'startTime', 'getPredictiveScalingForecast_startTime' - The inclusive start time of the time range for the forecast data to get.
-- At most, the date and time can be one year before the current date and
-- time.
--
-- 'endTime', 'getPredictiveScalingForecast_endTime' - The exclusive end time of the time range for the forecast data to get.
-- The maximum time duration between the start and end time is 30 days.
--
-- Although this parameter can accept a date and time that is more than two
-- days in the future, the availability of forecast data has limits. Amazon
-- EC2 Auto Scaling only issues forecasts for periods of two days in
-- advance.
newGetPredictiveScalingForecast ::
-- | 'autoScalingGroupName'
Prelude.Text ->
-- | 'policyName'
Prelude.Text ->
-- | 'startTime'
Prelude.UTCTime ->
-- | 'endTime'
Prelude.UTCTime ->
GetPredictiveScalingForecast
newGetPredictiveScalingForecast
pAutoScalingGroupName_
pPolicyName_
pStartTime_
pEndTime_ =
GetPredictiveScalingForecast'
{ autoScalingGroupName =
pAutoScalingGroupName_,
policyName = pPolicyName_,
startTime = Data._Time Lens.# pStartTime_,
endTime = Data._Time Lens.# pEndTime_
}
-- | The name of the Auto Scaling group.
getPredictiveScalingForecast_autoScalingGroupName :: Lens.Lens' GetPredictiveScalingForecast Prelude.Text
getPredictiveScalingForecast_autoScalingGroupName = Lens.lens (\GetPredictiveScalingForecast' {autoScalingGroupName} -> autoScalingGroupName) (\s@GetPredictiveScalingForecast' {} a -> s {autoScalingGroupName = a} :: GetPredictiveScalingForecast)
-- | The name of the policy.
getPredictiveScalingForecast_policyName :: Lens.Lens' GetPredictiveScalingForecast Prelude.Text
getPredictiveScalingForecast_policyName = Lens.lens (\GetPredictiveScalingForecast' {policyName} -> policyName) (\s@GetPredictiveScalingForecast' {} a -> s {policyName = a} :: GetPredictiveScalingForecast)
-- | The inclusive start time of the time range for the forecast data to get.
-- At most, the date and time can be one year before the current date and
-- time.
getPredictiveScalingForecast_startTime :: Lens.Lens' GetPredictiveScalingForecast Prelude.UTCTime
getPredictiveScalingForecast_startTime = Lens.lens (\GetPredictiveScalingForecast' {startTime} -> startTime) (\s@GetPredictiveScalingForecast' {} a -> s {startTime = a} :: GetPredictiveScalingForecast) Prelude.. Data._Time
-- | The exclusive end time of the time range for the forecast data to get.
-- The maximum time duration between the start and end time is 30 days.
--
-- Although this parameter can accept a date and time that is more than two
-- days in the future, the availability of forecast data has limits. Amazon
-- EC2 Auto Scaling only issues forecasts for periods of two days in
-- advance.
getPredictiveScalingForecast_endTime :: Lens.Lens' GetPredictiveScalingForecast Prelude.UTCTime
getPredictiveScalingForecast_endTime = Lens.lens (\GetPredictiveScalingForecast' {endTime} -> endTime) (\s@GetPredictiveScalingForecast' {} a -> s {endTime = a} :: GetPredictiveScalingForecast) Prelude.. Data._Time
instance Core.AWSRequest GetPredictiveScalingForecast where
type
AWSResponse GetPredictiveScalingForecast =
GetPredictiveScalingForecastResponse
request overrides =
Request.postQuery (overrides defaultService)
response =
Response.receiveXMLWrapper
"GetPredictiveScalingForecastResult"
( \s h x ->
GetPredictiveScalingForecastResponse'
Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
Prelude.<*> ( x
Data..@? "LoadForecast"
Core..!@ Prelude.mempty
Prelude.>>= Data.parseXMLList "member"
)
Prelude.<*> (x Data..@ "CapacityForecast")
Prelude.<*> (x Data..@ "UpdateTime")
)
instance
Prelude.Hashable
GetPredictiveScalingForecast
where
hashWithSalt _salt GetPredictiveScalingForecast' {..} =
_salt
`Prelude.hashWithSalt` autoScalingGroupName
`Prelude.hashWithSalt` policyName
`Prelude.hashWithSalt` startTime
`Prelude.hashWithSalt` endTime
instance Prelude.NFData GetPredictiveScalingForecast where
rnf GetPredictiveScalingForecast' {..} =
Prelude.rnf autoScalingGroupName
`Prelude.seq` Prelude.rnf policyName
`Prelude.seq` Prelude.rnf startTime
`Prelude.seq` Prelude.rnf endTime
instance Data.ToHeaders GetPredictiveScalingForecast where
toHeaders = Prelude.const Prelude.mempty
instance Data.ToPath GetPredictiveScalingForecast where
toPath = Prelude.const "/"
instance Data.ToQuery GetPredictiveScalingForecast where
toQuery GetPredictiveScalingForecast' {..} =
Prelude.mconcat
[ "Action"
Data.=: ( "GetPredictiveScalingForecast" ::
Prelude.ByteString
),
"Version"
Data.=: ("2011-01-01" :: Prelude.ByteString),
"AutoScalingGroupName" Data.=: autoScalingGroupName,
"PolicyName" Data.=: policyName,
"StartTime" Data.=: startTime,
"EndTime" Data.=: endTime
]
-- | /See:/ 'newGetPredictiveScalingForecastResponse' smart constructor.
data GetPredictiveScalingForecastResponse = GetPredictiveScalingForecastResponse'
{ -- | The response's http status code.
httpStatus :: Prelude.Int,
-- | The load forecast.
loadForecast :: [LoadForecast],
-- | The capacity forecast.
capacityForecast :: CapacityForecast,
-- | The time the forecast was made.
updateTime :: Data.ISO8601
}
deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
-- |
-- Create a value of 'GetPredictiveScalingForecastResponse' 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', 'getPredictiveScalingForecastResponse_httpStatus' - The response's http status code.
--
-- 'loadForecast', 'getPredictiveScalingForecastResponse_loadForecast' - The load forecast.
--
-- 'capacityForecast', 'getPredictiveScalingForecastResponse_capacityForecast' - The capacity forecast.
--
-- 'updateTime', 'getPredictiveScalingForecastResponse_updateTime' - The time the forecast was made.
newGetPredictiveScalingForecastResponse ::
-- | 'httpStatus'
Prelude.Int ->
-- | 'capacityForecast'
CapacityForecast ->
-- | 'updateTime'
Prelude.UTCTime ->
GetPredictiveScalingForecastResponse
newGetPredictiveScalingForecastResponse
pHttpStatus_
pCapacityForecast_
pUpdateTime_ =
GetPredictiveScalingForecastResponse'
{ httpStatus =
pHttpStatus_,
loadForecast = Prelude.mempty,
capacityForecast = pCapacityForecast_,
updateTime =
Data._Time Lens.# pUpdateTime_
}
-- | The response's http status code.
getPredictiveScalingForecastResponse_httpStatus :: Lens.Lens' GetPredictiveScalingForecastResponse Prelude.Int
getPredictiveScalingForecastResponse_httpStatus = Lens.lens (\GetPredictiveScalingForecastResponse' {httpStatus} -> httpStatus) (\s@GetPredictiveScalingForecastResponse' {} a -> s {httpStatus = a} :: GetPredictiveScalingForecastResponse)
-- | The load forecast.
getPredictiveScalingForecastResponse_loadForecast :: Lens.Lens' GetPredictiveScalingForecastResponse [LoadForecast]
getPredictiveScalingForecastResponse_loadForecast = Lens.lens (\GetPredictiveScalingForecastResponse' {loadForecast} -> loadForecast) (\s@GetPredictiveScalingForecastResponse' {} a -> s {loadForecast = a} :: GetPredictiveScalingForecastResponse) Prelude.. Lens.coerced
-- | The capacity forecast.
getPredictiveScalingForecastResponse_capacityForecast :: Lens.Lens' GetPredictiveScalingForecastResponse CapacityForecast
getPredictiveScalingForecastResponse_capacityForecast = Lens.lens (\GetPredictiveScalingForecastResponse' {capacityForecast} -> capacityForecast) (\s@GetPredictiveScalingForecastResponse' {} a -> s {capacityForecast = a} :: GetPredictiveScalingForecastResponse)
-- | The time the forecast was made.
getPredictiveScalingForecastResponse_updateTime :: Lens.Lens' GetPredictiveScalingForecastResponse Prelude.UTCTime
getPredictiveScalingForecastResponse_updateTime = Lens.lens (\GetPredictiveScalingForecastResponse' {updateTime} -> updateTime) (\s@GetPredictiveScalingForecastResponse' {} a -> s {updateTime = a} :: GetPredictiveScalingForecastResponse) Prelude.. Data._Time
instance
Prelude.NFData
GetPredictiveScalingForecastResponse
where
rnf GetPredictiveScalingForecastResponse' {..} =
Prelude.rnf httpStatus
`Prelude.seq` Prelude.rnf loadForecast
`Prelude.seq` Prelude.rnf capacityForecast
`Prelude.seq` Prelude.rnf updateTime