{-# 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.ComputeOptimizer.GetEC2RecommendationProjectedMetrics
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns the projected utilization metrics of Amazon EC2 instance
-- recommendations.
--
-- The @Cpu@ and @Memory@ metrics are the only projected utilization
-- metrics returned when you run this action. Additionally, the @Memory@
-- metric is returned only for resources that have the unified CloudWatch
-- agent installed on them. For more information, see
-- <https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent Enabling Memory Utilization with the CloudWatch Agent>.
module Amazonka.ComputeOptimizer.GetEC2RecommendationProjectedMetrics
  ( -- * Creating a Request
    GetEC2RecommendationProjectedMetrics (..),
    newGetEC2RecommendationProjectedMetrics,

    -- * Request Lenses
    getEC2RecommendationProjectedMetrics_recommendationPreferences,
    getEC2RecommendationProjectedMetrics_instanceArn,
    getEC2RecommendationProjectedMetrics_stat,
    getEC2RecommendationProjectedMetrics_period,
    getEC2RecommendationProjectedMetrics_startTime,
    getEC2RecommendationProjectedMetrics_endTime,

    -- * Destructuring the Response
    GetEC2RecommendationProjectedMetricsResponse (..),
    newGetEC2RecommendationProjectedMetricsResponse,

    -- * Response Lenses
    getEC2RecommendationProjectedMetricsResponse_recommendedOptionProjectedMetrics,
    getEC2RecommendationProjectedMetricsResponse_httpStatus,
  )
where

import Amazonka.ComputeOptimizer.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:/ 'newGetEC2RecommendationProjectedMetrics' smart constructor.
data GetEC2RecommendationProjectedMetrics = GetEC2RecommendationProjectedMetrics'
  { -- | An object to specify the preferences for the Amazon EC2 recommendation
    -- projected metrics to return in the response.
    GetEC2RecommendationProjectedMetrics
-> Maybe RecommendationPreferences
recommendationPreferences :: Prelude.Maybe RecommendationPreferences,
    -- | The Amazon Resource Name (ARN) of the instances for which to return
    -- recommendation projected metrics.
    GetEC2RecommendationProjectedMetrics -> Text
instanceArn :: Prelude.Text,
    -- | The statistic of the projected metrics.
    GetEC2RecommendationProjectedMetrics -> MetricStatistic
stat :: MetricStatistic,
    -- | The granularity, in seconds, of the projected metrics data points.
    GetEC2RecommendationProjectedMetrics -> Int
period :: Prelude.Int,
    -- | The timestamp of the first projected metrics data point to return.
    GetEC2RecommendationProjectedMetrics -> POSIX
startTime :: Data.POSIX,
    -- | The timestamp of the last projected metrics data point to return.
    GetEC2RecommendationProjectedMetrics -> POSIX
endTime :: Data.POSIX
  }
  deriving (GetEC2RecommendationProjectedMetrics
-> GetEC2RecommendationProjectedMetrics -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetEC2RecommendationProjectedMetrics
-> GetEC2RecommendationProjectedMetrics -> Bool
$c/= :: GetEC2RecommendationProjectedMetrics
-> GetEC2RecommendationProjectedMetrics -> Bool
== :: GetEC2RecommendationProjectedMetrics
-> GetEC2RecommendationProjectedMetrics -> Bool
$c== :: GetEC2RecommendationProjectedMetrics
-> GetEC2RecommendationProjectedMetrics -> Bool
Prelude.Eq, ReadPrec [GetEC2RecommendationProjectedMetrics]
ReadPrec GetEC2RecommendationProjectedMetrics
Int -> ReadS GetEC2RecommendationProjectedMetrics
ReadS [GetEC2RecommendationProjectedMetrics]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetEC2RecommendationProjectedMetrics]
$creadListPrec :: ReadPrec [GetEC2RecommendationProjectedMetrics]
readPrec :: ReadPrec GetEC2RecommendationProjectedMetrics
$creadPrec :: ReadPrec GetEC2RecommendationProjectedMetrics
readList :: ReadS [GetEC2RecommendationProjectedMetrics]
$creadList :: ReadS [GetEC2RecommendationProjectedMetrics]
readsPrec :: Int -> ReadS GetEC2RecommendationProjectedMetrics
$creadsPrec :: Int -> ReadS GetEC2RecommendationProjectedMetrics
Prelude.Read, Int -> GetEC2RecommendationProjectedMetrics -> ShowS
[GetEC2RecommendationProjectedMetrics] -> ShowS
GetEC2RecommendationProjectedMetrics -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetEC2RecommendationProjectedMetrics] -> ShowS
$cshowList :: [GetEC2RecommendationProjectedMetrics] -> ShowS
show :: GetEC2RecommendationProjectedMetrics -> String
$cshow :: GetEC2RecommendationProjectedMetrics -> String
showsPrec :: Int -> GetEC2RecommendationProjectedMetrics -> ShowS
$cshowsPrec :: Int -> GetEC2RecommendationProjectedMetrics -> ShowS
Prelude.Show, forall x.
Rep GetEC2RecommendationProjectedMetrics x
-> GetEC2RecommendationProjectedMetrics
forall x.
GetEC2RecommendationProjectedMetrics
-> Rep GetEC2RecommendationProjectedMetrics x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetEC2RecommendationProjectedMetrics x
-> GetEC2RecommendationProjectedMetrics
$cfrom :: forall x.
GetEC2RecommendationProjectedMetrics
-> Rep GetEC2RecommendationProjectedMetrics x
Prelude.Generic)

-- |
-- Create a value of 'GetEC2RecommendationProjectedMetrics' 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:
--
-- 'recommendationPreferences', 'getEC2RecommendationProjectedMetrics_recommendationPreferences' - An object to specify the preferences for the Amazon EC2 recommendation
-- projected metrics to return in the response.
--
-- 'instanceArn', 'getEC2RecommendationProjectedMetrics_instanceArn' - The Amazon Resource Name (ARN) of the instances for which to return
-- recommendation projected metrics.
--
-- 'stat', 'getEC2RecommendationProjectedMetrics_stat' - The statistic of the projected metrics.
--
-- 'period', 'getEC2RecommendationProjectedMetrics_period' - The granularity, in seconds, of the projected metrics data points.
--
-- 'startTime', 'getEC2RecommendationProjectedMetrics_startTime' - The timestamp of the first projected metrics data point to return.
--
-- 'endTime', 'getEC2RecommendationProjectedMetrics_endTime' - The timestamp of the last projected metrics data point to return.
newGetEC2RecommendationProjectedMetrics ::
  -- | 'instanceArn'
  Prelude.Text ->
  -- | 'stat'
  MetricStatistic ->
  -- | 'period'
  Prelude.Int ->
  -- | 'startTime'
  Prelude.UTCTime ->
  -- | 'endTime'
  Prelude.UTCTime ->
  GetEC2RecommendationProjectedMetrics
newGetEC2RecommendationProjectedMetrics :: Text
-> MetricStatistic
-> Int
-> UTCTime
-> UTCTime
-> GetEC2RecommendationProjectedMetrics
newGetEC2RecommendationProjectedMetrics
  Text
pInstanceArn_
  MetricStatistic
pStat_
  Int
pPeriod_
  UTCTime
pStartTime_
  UTCTime
pEndTime_ =
    GetEC2RecommendationProjectedMetrics'
      { $sel:recommendationPreferences:GetEC2RecommendationProjectedMetrics' :: Maybe RecommendationPreferences
recommendationPreferences =
          forall a. Maybe a
Prelude.Nothing,
        $sel:instanceArn:GetEC2RecommendationProjectedMetrics' :: Text
instanceArn = Text
pInstanceArn_,
        $sel:stat:GetEC2RecommendationProjectedMetrics' :: MetricStatistic
stat = MetricStatistic
pStat_,
        $sel:period:GetEC2RecommendationProjectedMetrics' :: Int
period = Int
pPeriod_,
        $sel:startTime:GetEC2RecommendationProjectedMetrics' :: POSIX
startTime =
          forall (a :: Format). Iso' (Time a) UTCTime
Data._Time forall t b. AReview t b -> b -> t
Lens.# UTCTime
pStartTime_,
        $sel:endTime:GetEC2RecommendationProjectedMetrics' :: POSIX
endTime = forall (a :: Format). Iso' (Time a) UTCTime
Data._Time forall t b. AReview t b -> b -> t
Lens.# UTCTime
pEndTime_
      }

-- | An object to specify the preferences for the Amazon EC2 recommendation
-- projected metrics to return in the response.
getEC2RecommendationProjectedMetrics_recommendationPreferences :: Lens.Lens' GetEC2RecommendationProjectedMetrics (Prelude.Maybe RecommendationPreferences)
getEC2RecommendationProjectedMetrics_recommendationPreferences :: Lens'
  GetEC2RecommendationProjectedMetrics
  (Maybe RecommendationPreferences)
getEC2RecommendationProjectedMetrics_recommendationPreferences = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetEC2RecommendationProjectedMetrics' {Maybe RecommendationPreferences
recommendationPreferences :: Maybe RecommendationPreferences
$sel:recommendationPreferences:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics
-> Maybe RecommendationPreferences
recommendationPreferences} -> Maybe RecommendationPreferences
recommendationPreferences) (\s :: GetEC2RecommendationProjectedMetrics
s@GetEC2RecommendationProjectedMetrics' {} Maybe RecommendationPreferences
a -> GetEC2RecommendationProjectedMetrics
s {$sel:recommendationPreferences:GetEC2RecommendationProjectedMetrics' :: Maybe RecommendationPreferences
recommendationPreferences = Maybe RecommendationPreferences
a} :: GetEC2RecommendationProjectedMetrics)

-- | The Amazon Resource Name (ARN) of the instances for which to return
-- recommendation projected metrics.
getEC2RecommendationProjectedMetrics_instanceArn :: Lens.Lens' GetEC2RecommendationProjectedMetrics Prelude.Text
getEC2RecommendationProjectedMetrics_instanceArn :: Lens' GetEC2RecommendationProjectedMetrics Text
getEC2RecommendationProjectedMetrics_instanceArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetEC2RecommendationProjectedMetrics' {Text
instanceArn :: Text
$sel:instanceArn:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> Text
instanceArn} -> Text
instanceArn) (\s :: GetEC2RecommendationProjectedMetrics
s@GetEC2RecommendationProjectedMetrics' {} Text
a -> GetEC2RecommendationProjectedMetrics
s {$sel:instanceArn:GetEC2RecommendationProjectedMetrics' :: Text
instanceArn = Text
a} :: GetEC2RecommendationProjectedMetrics)

-- | The statistic of the projected metrics.
getEC2RecommendationProjectedMetrics_stat :: Lens.Lens' GetEC2RecommendationProjectedMetrics MetricStatistic
getEC2RecommendationProjectedMetrics_stat :: Lens' GetEC2RecommendationProjectedMetrics MetricStatistic
getEC2RecommendationProjectedMetrics_stat = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetEC2RecommendationProjectedMetrics' {MetricStatistic
stat :: MetricStatistic
$sel:stat:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> MetricStatistic
stat} -> MetricStatistic
stat) (\s :: GetEC2RecommendationProjectedMetrics
s@GetEC2RecommendationProjectedMetrics' {} MetricStatistic
a -> GetEC2RecommendationProjectedMetrics
s {$sel:stat:GetEC2RecommendationProjectedMetrics' :: MetricStatistic
stat = MetricStatistic
a} :: GetEC2RecommendationProjectedMetrics)

-- | The granularity, in seconds, of the projected metrics data points.
getEC2RecommendationProjectedMetrics_period :: Lens.Lens' GetEC2RecommendationProjectedMetrics Prelude.Int
getEC2RecommendationProjectedMetrics_period :: Lens' GetEC2RecommendationProjectedMetrics Int
getEC2RecommendationProjectedMetrics_period = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetEC2RecommendationProjectedMetrics' {Int
period :: Int
$sel:period:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> Int
period} -> Int
period) (\s :: GetEC2RecommendationProjectedMetrics
s@GetEC2RecommendationProjectedMetrics' {} Int
a -> GetEC2RecommendationProjectedMetrics
s {$sel:period:GetEC2RecommendationProjectedMetrics' :: Int
period = Int
a} :: GetEC2RecommendationProjectedMetrics)

-- | The timestamp of the first projected metrics data point to return.
getEC2RecommendationProjectedMetrics_startTime :: Lens.Lens' GetEC2RecommendationProjectedMetrics Prelude.UTCTime
getEC2RecommendationProjectedMetrics_startTime :: Lens' GetEC2RecommendationProjectedMetrics UTCTime
getEC2RecommendationProjectedMetrics_startTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetEC2RecommendationProjectedMetrics' {POSIX
startTime :: POSIX
$sel:startTime:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> POSIX
startTime} -> POSIX
startTime) (\s :: GetEC2RecommendationProjectedMetrics
s@GetEC2RecommendationProjectedMetrics' {} POSIX
a -> GetEC2RecommendationProjectedMetrics
s {$sel:startTime:GetEC2RecommendationProjectedMetrics' :: POSIX
startTime = POSIX
a} :: GetEC2RecommendationProjectedMetrics) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The timestamp of the last projected metrics data point to return.
getEC2RecommendationProjectedMetrics_endTime :: Lens.Lens' GetEC2RecommendationProjectedMetrics Prelude.UTCTime
getEC2RecommendationProjectedMetrics_endTime :: Lens' GetEC2RecommendationProjectedMetrics UTCTime
getEC2RecommendationProjectedMetrics_endTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetEC2RecommendationProjectedMetrics' {POSIX
endTime :: POSIX
$sel:endTime:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> POSIX
endTime} -> POSIX
endTime) (\s :: GetEC2RecommendationProjectedMetrics
s@GetEC2RecommendationProjectedMetrics' {} POSIX
a -> GetEC2RecommendationProjectedMetrics
s {$sel:endTime:GetEC2RecommendationProjectedMetrics' :: POSIX
endTime = POSIX
a} :: GetEC2RecommendationProjectedMetrics) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

instance
  Core.AWSRequest
    GetEC2RecommendationProjectedMetrics
  where
  type
    AWSResponse GetEC2RecommendationProjectedMetrics =
      GetEC2RecommendationProjectedMetricsResponse
  request :: (Service -> Service)
-> GetEC2RecommendationProjectedMetrics
-> Request GetEC2RecommendationProjectedMetrics
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetEC2RecommendationProjectedMetrics
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse GetEC2RecommendationProjectedMetrics)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe [RecommendedOptionProjectedMetric]
-> Int -> GetEC2RecommendationProjectedMetricsResponse
GetEC2RecommendationProjectedMetricsResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"recommendedOptionProjectedMetrics"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    GetEC2RecommendationProjectedMetrics
  where
  hashWithSalt :: Int -> GetEC2RecommendationProjectedMetrics -> Int
hashWithSalt
    Int
_salt
    GetEC2RecommendationProjectedMetrics' {Int
Maybe RecommendationPreferences
Text
POSIX
MetricStatistic
endTime :: POSIX
startTime :: POSIX
period :: Int
stat :: MetricStatistic
instanceArn :: Text
recommendationPreferences :: Maybe RecommendationPreferences
$sel:endTime:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> POSIX
$sel:startTime:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> POSIX
$sel:period:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> Int
$sel:stat:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> MetricStatistic
$sel:instanceArn:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> Text
$sel:recommendationPreferences:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics
-> Maybe RecommendationPreferences
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RecommendationPreferences
recommendationPreferences
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
instanceArn
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` MetricStatistic
stat
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Int
period
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` POSIX
startTime
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` POSIX
endTime

instance
  Prelude.NFData
    GetEC2RecommendationProjectedMetrics
  where
  rnf :: GetEC2RecommendationProjectedMetrics -> ()
rnf GetEC2RecommendationProjectedMetrics' {Int
Maybe RecommendationPreferences
Text
POSIX
MetricStatistic
endTime :: POSIX
startTime :: POSIX
period :: Int
stat :: MetricStatistic
instanceArn :: Text
recommendationPreferences :: Maybe RecommendationPreferences
$sel:endTime:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> POSIX
$sel:startTime:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> POSIX
$sel:period:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> Int
$sel:stat:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> MetricStatistic
$sel:instanceArn:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> Text
$sel:recommendationPreferences:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics
-> Maybe RecommendationPreferences
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe RecommendationPreferences
recommendationPreferences
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
instanceArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf MetricStatistic
stat
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
period
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf POSIX
startTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf POSIX
endTime

instance
  Data.ToHeaders
    GetEC2RecommendationProjectedMetrics
  where
  toHeaders :: GetEC2RecommendationProjectedMetrics -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"ComputeOptimizerService.GetEC2RecommendationProjectedMetrics" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.0" ::
                          Prelude.ByteString
                      )
          ]
      )

instance
  Data.ToJSON
    GetEC2RecommendationProjectedMetrics
  where
  toJSON :: GetEC2RecommendationProjectedMetrics -> Value
toJSON GetEC2RecommendationProjectedMetrics' {Int
Maybe RecommendationPreferences
Text
POSIX
MetricStatistic
endTime :: POSIX
startTime :: POSIX
period :: Int
stat :: MetricStatistic
instanceArn :: Text
recommendationPreferences :: Maybe RecommendationPreferences
$sel:endTime:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> POSIX
$sel:startTime:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> POSIX
$sel:period:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> Int
$sel:stat:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> MetricStatistic
$sel:instanceArn:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics -> Text
$sel:recommendationPreferences:GetEC2RecommendationProjectedMetrics' :: GetEC2RecommendationProjectedMetrics
-> Maybe RecommendationPreferences
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"recommendationPreferences" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe RecommendationPreferences
recommendationPreferences,
            forall a. a -> Maybe a
Prelude.Just (Key
"instanceArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
instanceArn),
            forall a. a -> Maybe a
Prelude.Just (Key
"stat" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= MetricStatistic
stat),
            forall a. a -> Maybe a
Prelude.Just (Key
"period" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Int
period),
            forall a. a -> Maybe a
Prelude.Just (Key
"startTime" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= POSIX
startTime),
            forall a. a -> Maybe a
Prelude.Just (Key
"endTime" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= POSIX
endTime)
          ]
      )

instance
  Data.ToPath
    GetEC2RecommendationProjectedMetrics
  where
  toPath :: GetEC2RecommendationProjectedMetrics -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance
  Data.ToQuery
    GetEC2RecommendationProjectedMetrics
  where
  toQuery :: GetEC2RecommendationProjectedMetrics -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newGetEC2RecommendationProjectedMetricsResponse' smart constructor.
data GetEC2RecommendationProjectedMetricsResponse = GetEC2RecommendationProjectedMetricsResponse'
  { -- | An array of objects that describes projected metrics.
    GetEC2RecommendationProjectedMetricsResponse
-> Maybe [RecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics :: Prelude.Maybe [RecommendedOptionProjectedMetric],
    -- | The response's http status code.
    GetEC2RecommendationProjectedMetricsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetEC2RecommendationProjectedMetricsResponse
-> GetEC2RecommendationProjectedMetricsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetEC2RecommendationProjectedMetricsResponse
-> GetEC2RecommendationProjectedMetricsResponse -> Bool
$c/= :: GetEC2RecommendationProjectedMetricsResponse
-> GetEC2RecommendationProjectedMetricsResponse -> Bool
== :: GetEC2RecommendationProjectedMetricsResponse
-> GetEC2RecommendationProjectedMetricsResponse -> Bool
$c== :: GetEC2RecommendationProjectedMetricsResponse
-> GetEC2RecommendationProjectedMetricsResponse -> Bool
Prelude.Eq, ReadPrec [GetEC2RecommendationProjectedMetricsResponse]
ReadPrec GetEC2RecommendationProjectedMetricsResponse
Int -> ReadS GetEC2RecommendationProjectedMetricsResponse
ReadS [GetEC2RecommendationProjectedMetricsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetEC2RecommendationProjectedMetricsResponse]
$creadListPrec :: ReadPrec [GetEC2RecommendationProjectedMetricsResponse]
readPrec :: ReadPrec GetEC2RecommendationProjectedMetricsResponse
$creadPrec :: ReadPrec GetEC2RecommendationProjectedMetricsResponse
readList :: ReadS [GetEC2RecommendationProjectedMetricsResponse]
$creadList :: ReadS [GetEC2RecommendationProjectedMetricsResponse]
readsPrec :: Int -> ReadS GetEC2RecommendationProjectedMetricsResponse
$creadsPrec :: Int -> ReadS GetEC2RecommendationProjectedMetricsResponse
Prelude.Read, Int -> GetEC2RecommendationProjectedMetricsResponse -> ShowS
[GetEC2RecommendationProjectedMetricsResponse] -> ShowS
GetEC2RecommendationProjectedMetricsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetEC2RecommendationProjectedMetricsResponse] -> ShowS
$cshowList :: [GetEC2RecommendationProjectedMetricsResponse] -> ShowS
show :: GetEC2RecommendationProjectedMetricsResponse -> String
$cshow :: GetEC2RecommendationProjectedMetricsResponse -> String
showsPrec :: Int -> GetEC2RecommendationProjectedMetricsResponse -> ShowS
$cshowsPrec :: Int -> GetEC2RecommendationProjectedMetricsResponse -> ShowS
Prelude.Show, forall x.
Rep GetEC2RecommendationProjectedMetricsResponse x
-> GetEC2RecommendationProjectedMetricsResponse
forall x.
GetEC2RecommendationProjectedMetricsResponse
-> Rep GetEC2RecommendationProjectedMetricsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetEC2RecommendationProjectedMetricsResponse x
-> GetEC2RecommendationProjectedMetricsResponse
$cfrom :: forall x.
GetEC2RecommendationProjectedMetricsResponse
-> Rep GetEC2RecommendationProjectedMetricsResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetEC2RecommendationProjectedMetricsResponse' 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:
--
-- 'recommendedOptionProjectedMetrics', 'getEC2RecommendationProjectedMetricsResponse_recommendedOptionProjectedMetrics' - An array of objects that describes projected metrics.
--
-- 'httpStatus', 'getEC2RecommendationProjectedMetricsResponse_httpStatus' - The response's http status code.
newGetEC2RecommendationProjectedMetricsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetEC2RecommendationProjectedMetricsResponse
newGetEC2RecommendationProjectedMetricsResponse :: Int -> GetEC2RecommendationProjectedMetricsResponse
newGetEC2RecommendationProjectedMetricsResponse
  Int
pHttpStatus_ =
    GetEC2RecommendationProjectedMetricsResponse'
      { $sel:recommendedOptionProjectedMetrics:GetEC2RecommendationProjectedMetricsResponse' :: Maybe [RecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:GetEC2RecommendationProjectedMetricsResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | An array of objects that describes projected metrics.
getEC2RecommendationProjectedMetricsResponse_recommendedOptionProjectedMetrics :: Lens.Lens' GetEC2RecommendationProjectedMetricsResponse (Prelude.Maybe [RecommendedOptionProjectedMetric])
getEC2RecommendationProjectedMetricsResponse_recommendedOptionProjectedMetrics :: Lens'
  GetEC2RecommendationProjectedMetricsResponse
  (Maybe [RecommendedOptionProjectedMetric])
getEC2RecommendationProjectedMetricsResponse_recommendedOptionProjectedMetrics = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetEC2RecommendationProjectedMetricsResponse' {Maybe [RecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics :: Maybe [RecommendedOptionProjectedMetric]
$sel:recommendedOptionProjectedMetrics:GetEC2RecommendationProjectedMetricsResponse' :: GetEC2RecommendationProjectedMetricsResponse
-> Maybe [RecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics} -> Maybe [RecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics) (\s :: GetEC2RecommendationProjectedMetricsResponse
s@GetEC2RecommendationProjectedMetricsResponse' {} Maybe [RecommendedOptionProjectedMetric]
a -> GetEC2RecommendationProjectedMetricsResponse
s {$sel:recommendedOptionProjectedMetrics:GetEC2RecommendationProjectedMetricsResponse' :: Maybe [RecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics = Maybe [RecommendedOptionProjectedMetric]
a} :: GetEC2RecommendationProjectedMetricsResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The response's http status code.
getEC2RecommendationProjectedMetricsResponse_httpStatus :: Lens.Lens' GetEC2RecommendationProjectedMetricsResponse Prelude.Int
getEC2RecommendationProjectedMetricsResponse_httpStatus :: Lens' GetEC2RecommendationProjectedMetricsResponse Int
getEC2RecommendationProjectedMetricsResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetEC2RecommendationProjectedMetricsResponse' {Int
httpStatus :: Int
$sel:httpStatus:GetEC2RecommendationProjectedMetricsResponse' :: GetEC2RecommendationProjectedMetricsResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: GetEC2RecommendationProjectedMetricsResponse
s@GetEC2RecommendationProjectedMetricsResponse' {} Int
a -> GetEC2RecommendationProjectedMetricsResponse
s {$sel:httpStatus:GetEC2RecommendationProjectedMetricsResponse' :: Int
httpStatus = Int
a} :: GetEC2RecommendationProjectedMetricsResponse)

instance
  Prelude.NFData
    GetEC2RecommendationProjectedMetricsResponse
  where
  rnf :: GetEC2RecommendationProjectedMetricsResponse -> ()
rnf GetEC2RecommendationProjectedMetricsResponse' {Int
Maybe [RecommendedOptionProjectedMetric]
httpStatus :: Int
recommendedOptionProjectedMetrics :: Maybe [RecommendedOptionProjectedMetric]
$sel:httpStatus:GetEC2RecommendationProjectedMetricsResponse' :: GetEC2RecommendationProjectedMetricsResponse -> Int
$sel:recommendedOptionProjectedMetrics:GetEC2RecommendationProjectedMetricsResponse' :: GetEC2RecommendationProjectedMetricsResponse
-> Maybe [RecommendedOptionProjectedMetric]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [RecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus