packages feed

amazonka-compute-optimizer-2.0: gen/Amazonka/ComputeOptimizer/GetEC2RecommendationProjectedMetrics.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.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.
    recommendationPreferences :: Prelude.Maybe RecommendationPreferences,
    -- | The Amazon Resource Name (ARN) of the instances for which to return
    -- recommendation projected metrics.
    instanceArn :: Prelude.Text,
    -- | The statistic of the projected metrics.
    stat :: MetricStatistic,
    -- | The granularity, in seconds, of the projected metrics data points.
    period :: Prelude.Int,
    -- | The timestamp of the first projected metrics data point to return.
    startTime :: Data.POSIX,
    -- | The timestamp of the last projected metrics data point to return.
    endTime :: Data.POSIX
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, 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
  pInstanceArn_
  pStat_
  pPeriod_
  pStartTime_
  pEndTime_ =
    GetEC2RecommendationProjectedMetrics'
      { recommendationPreferences =
          Prelude.Nothing,
        instanceArn = pInstanceArn_,
        stat = pStat_,
        period = pPeriod_,
        startTime =
          Data._Time Lens.# pStartTime_,
        endTime = Data._Time Lens.# 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.lens (\GetEC2RecommendationProjectedMetrics' {recommendationPreferences} -> recommendationPreferences) (\s@GetEC2RecommendationProjectedMetrics' {} a -> s {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.lens (\GetEC2RecommendationProjectedMetrics' {instanceArn} -> instanceArn) (\s@GetEC2RecommendationProjectedMetrics' {} a -> s {instanceArn = a} :: GetEC2RecommendationProjectedMetrics)

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

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

-- | The timestamp of the first projected metrics data point to return.
getEC2RecommendationProjectedMetrics_startTime :: Lens.Lens' GetEC2RecommendationProjectedMetrics Prelude.UTCTime
getEC2RecommendationProjectedMetrics_startTime = Lens.lens (\GetEC2RecommendationProjectedMetrics' {startTime} -> startTime) (\s@GetEC2RecommendationProjectedMetrics' {} a -> s {startTime = a} :: GetEC2RecommendationProjectedMetrics) Prelude.. Data._Time

-- | The timestamp of the last projected metrics data point to return.
getEC2RecommendationProjectedMetrics_endTime :: Lens.Lens' GetEC2RecommendationProjectedMetrics Prelude.UTCTime
getEC2RecommendationProjectedMetrics_endTime = Lens.lens (\GetEC2RecommendationProjectedMetrics' {endTime} -> endTime) (\s@GetEC2RecommendationProjectedMetrics' {} a -> s {endTime = a} :: GetEC2RecommendationProjectedMetrics) Prelude.. Data._Time

instance
  Core.AWSRequest
    GetEC2RecommendationProjectedMetrics
  where
  type
    AWSResponse GetEC2RecommendationProjectedMetrics =
      GetEC2RecommendationProjectedMetricsResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          GetEC2RecommendationProjectedMetricsResponse'
            Prelude.<$> ( x
                            Data..?> "recommendedOptionProjectedMetrics"
                            Core..!@ Prelude.mempty
                        )
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance
  Prelude.Hashable
    GetEC2RecommendationProjectedMetrics
  where
  hashWithSalt
    _salt
    GetEC2RecommendationProjectedMetrics' {..} =
      _salt
        `Prelude.hashWithSalt` recommendationPreferences
        `Prelude.hashWithSalt` instanceArn
        `Prelude.hashWithSalt` stat
        `Prelude.hashWithSalt` period
        `Prelude.hashWithSalt` startTime
        `Prelude.hashWithSalt` endTime

instance
  Prelude.NFData
    GetEC2RecommendationProjectedMetrics
  where
  rnf GetEC2RecommendationProjectedMetrics' {..} =
    Prelude.rnf recommendationPreferences
      `Prelude.seq` Prelude.rnf instanceArn
      `Prelude.seq` Prelude.rnf stat
      `Prelude.seq` Prelude.rnf period
      `Prelude.seq` Prelude.rnf startTime
      `Prelude.seq` Prelude.rnf endTime

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

instance
  Data.ToJSON
    GetEC2RecommendationProjectedMetrics
  where
  toJSON GetEC2RecommendationProjectedMetrics' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("recommendationPreferences" Data..=)
              Prelude.<$> recommendationPreferences,
            Prelude.Just ("instanceArn" Data..= instanceArn),
            Prelude.Just ("stat" Data..= stat),
            Prelude.Just ("period" Data..= period),
            Prelude.Just ("startTime" Data..= startTime),
            Prelude.Just ("endTime" Data..= endTime)
          ]
      )

instance
  Data.ToPath
    GetEC2RecommendationProjectedMetrics
  where
  toPath = Prelude.const "/"

instance
  Data.ToQuery
    GetEC2RecommendationProjectedMetrics
  where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newGetEC2RecommendationProjectedMetricsResponse' smart constructor.
data GetEC2RecommendationProjectedMetricsResponse = GetEC2RecommendationProjectedMetricsResponse'
  { -- | An array of objects that describes projected metrics.
    recommendedOptionProjectedMetrics :: Prelude.Maybe [RecommendedOptionProjectedMetric],
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, 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
  pHttpStatus_ =
    GetEC2RecommendationProjectedMetricsResponse'
      { recommendedOptionProjectedMetrics =
          Prelude.Nothing,
        httpStatus = pHttpStatus_
      }

-- | An array of objects that describes projected metrics.
getEC2RecommendationProjectedMetricsResponse_recommendedOptionProjectedMetrics :: Lens.Lens' GetEC2RecommendationProjectedMetricsResponse (Prelude.Maybe [RecommendedOptionProjectedMetric])
getEC2RecommendationProjectedMetricsResponse_recommendedOptionProjectedMetrics = Lens.lens (\GetEC2RecommendationProjectedMetricsResponse' {recommendedOptionProjectedMetrics} -> recommendedOptionProjectedMetrics) (\s@GetEC2RecommendationProjectedMetricsResponse' {} a -> s {recommendedOptionProjectedMetrics = a} :: GetEC2RecommendationProjectedMetricsResponse) Prelude.. Lens.mapping Lens.coerced

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

instance
  Prelude.NFData
    GetEC2RecommendationProjectedMetricsResponse
  where
  rnf GetEC2RecommendationProjectedMetricsResponse' {..} =
    Prelude.rnf recommendedOptionProjectedMetrics
      `Prelude.seq` Prelude.rnf httpStatus