{-# 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.Lightsail.GetRelationalDatabaseMetricData
-- 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 data points of the specified metric for a database in Amazon
-- Lightsail.
--
-- Metrics report the utilization of your resources, and the error counts
-- generated by them. Monitor and collect metric data regularly to maintain
-- the reliability, availability, and performance of your resources.
module Amazonka.Lightsail.GetRelationalDatabaseMetricData
  ( -- * Creating a Request
    GetRelationalDatabaseMetricData (..),
    newGetRelationalDatabaseMetricData,

    -- * Request Lenses
    getRelationalDatabaseMetricData_relationalDatabaseName,
    getRelationalDatabaseMetricData_metricName,
    getRelationalDatabaseMetricData_period,
    getRelationalDatabaseMetricData_startTime,
    getRelationalDatabaseMetricData_endTime,
    getRelationalDatabaseMetricData_unit,
    getRelationalDatabaseMetricData_statistics,

    -- * Destructuring the Response
    GetRelationalDatabaseMetricDataResponse (..),
    newGetRelationalDatabaseMetricDataResponse,

    -- * Response Lenses
    getRelationalDatabaseMetricDataResponse_metricData,
    getRelationalDatabaseMetricDataResponse_metricName,
    getRelationalDatabaseMetricDataResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Lightsail.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newGetRelationalDatabaseMetricData' smart constructor.
data GetRelationalDatabaseMetricData = GetRelationalDatabaseMetricData'
  { -- | The name of your database from which to get metric data.
    GetRelationalDatabaseMetricData -> Text
relationalDatabaseName :: Prelude.Text,
    -- | The metric for which you want to return information.
    --
    -- Valid relational database metric names are listed below, along with the
    -- most useful @statistics@ to include in your request, and the published
    -- @unit@ value. All relational database metric data is available in
    -- 1-minute (60 seconds) granularity.
    --
    -- -   __@CPUUtilization@__ - The percentage of CPU utilization currently
    --     in use on the database.
    --
    --     @Statistics@: The most useful statistics are @Maximum@ and
    --     @Average@.
    --
    --     @Unit@: The published unit is @Percent@.
    --
    -- -   __@DatabaseConnections@__ - The number of database connections in
    --     use.
    --
    --     @Statistics@: The most useful statistics are @Maximum@ and @Sum@.
    --
    --     @Unit@: The published unit is @Count@.
    --
    -- -   __@DiskQueueDepth@__ - The number of outstanding IOs (read\/write
    --     requests) that are waiting to access the disk.
    --
    --     @Statistics@: The most useful statistic is @Sum@.
    --
    --     @Unit@: The published unit is @Count@.
    --
    -- -   __@FreeStorageSpace@__ - The amount of available storage space.
    --
    --     @Statistics@: The most useful statistic is @Sum@.
    --
    --     @Unit@: The published unit is @Bytes@.
    --
    -- -   __@NetworkReceiveThroughput@__ - The incoming (Receive) network
    --     traffic on the database, including both customer database traffic
    --     and AWS traffic used for monitoring and replication.
    --
    --     @Statistics@: The most useful statistic is @Average@.
    --
    --     @Unit@: The published unit is @Bytes\/Second@.
    --
    -- -   __@NetworkTransmitThroughput@__ - The outgoing (Transmit) network
    --     traffic on the database, including both customer database traffic
    --     and AWS traffic used for monitoring and replication.
    --
    --     @Statistics@: The most useful statistic is @Average@.
    --
    --     @Unit@: The published unit is @Bytes\/Second@.
    GetRelationalDatabaseMetricData -> RelationalDatabaseMetricName
metricName :: RelationalDatabaseMetricName,
    -- | The granularity, in seconds, of the returned data points.
    --
    -- All relational database metric data is available in 1-minute (60
    -- seconds) granularity.
    GetRelationalDatabaseMetricData -> Natural
period :: Prelude.Natural,
    -- | The start of the time interval from which to get metric data.
    --
    -- Constraints:
    --
    -- -   Specified in Coordinated Universal Time (UTC).
    --
    -- -   Specified in the Unix time format.
    --
    --     For example, if you wish to use a start time of October 1, 2018, at
    --     8 PM UTC, then you input @1538424000@ as the start time.
    GetRelationalDatabaseMetricData -> POSIX
startTime :: Data.POSIX,
    -- | The end of the time interval from which to get metric data.
    --
    -- Constraints:
    --
    -- -   Specified in Coordinated Universal Time (UTC).
    --
    -- -   Specified in the Unix time format.
    --
    --     For example, if you wish to use an end time of October 1, 2018, at 8
    --     PM UTC, then you input @1538424000@ as the end time.
    GetRelationalDatabaseMetricData -> POSIX
endTime :: Data.POSIX,
    -- | The unit for the metric data request. Valid units depend on the metric
    -- data being requested. For the valid units with each available metric,
    -- see the @metricName@ parameter.
    GetRelationalDatabaseMetricData -> MetricUnit
unit :: MetricUnit,
    -- | The statistic for the metric.
    --
    -- The following statistics are available:
    --
    -- -   @Minimum@ - The lowest value observed during the specified period.
    --     Use this value to determine low volumes of activity for your
    --     application.
    --
    -- -   @Maximum@ - The highest value observed during the specified period.
    --     Use this value to determine high volumes of activity for your
    --     application.
    --
    -- -   @Sum@ - All values submitted for the matching metric added together.
    --     You can use this statistic to determine the total volume of a
    --     metric.
    --
    -- -   @Average@ - The value of Sum \/ SampleCount during the specified
    --     period. By comparing this statistic with the Minimum and Maximum
    --     values, you can determine the full scope of a metric and how close
    --     the average use is to the Minimum and Maximum values. This
    --     comparison helps you to know when to increase or decrease your
    --     resources.
    --
    -- -   @SampleCount@ - The count, or number, of data points used for the
    --     statistical calculation.
    GetRelationalDatabaseMetricData -> [MetricStatistic]
statistics :: [MetricStatistic]
  }
  deriving (GetRelationalDatabaseMetricData
-> GetRelationalDatabaseMetricData -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetRelationalDatabaseMetricData
-> GetRelationalDatabaseMetricData -> Bool
$c/= :: GetRelationalDatabaseMetricData
-> GetRelationalDatabaseMetricData -> Bool
== :: GetRelationalDatabaseMetricData
-> GetRelationalDatabaseMetricData -> Bool
$c== :: GetRelationalDatabaseMetricData
-> GetRelationalDatabaseMetricData -> Bool
Prelude.Eq, ReadPrec [GetRelationalDatabaseMetricData]
ReadPrec GetRelationalDatabaseMetricData
Int -> ReadS GetRelationalDatabaseMetricData
ReadS [GetRelationalDatabaseMetricData]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetRelationalDatabaseMetricData]
$creadListPrec :: ReadPrec [GetRelationalDatabaseMetricData]
readPrec :: ReadPrec GetRelationalDatabaseMetricData
$creadPrec :: ReadPrec GetRelationalDatabaseMetricData
readList :: ReadS [GetRelationalDatabaseMetricData]
$creadList :: ReadS [GetRelationalDatabaseMetricData]
readsPrec :: Int -> ReadS GetRelationalDatabaseMetricData
$creadsPrec :: Int -> ReadS GetRelationalDatabaseMetricData
Prelude.Read, Int -> GetRelationalDatabaseMetricData -> ShowS
[GetRelationalDatabaseMetricData] -> ShowS
GetRelationalDatabaseMetricData -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetRelationalDatabaseMetricData] -> ShowS
$cshowList :: [GetRelationalDatabaseMetricData] -> ShowS
show :: GetRelationalDatabaseMetricData -> String
$cshow :: GetRelationalDatabaseMetricData -> String
showsPrec :: Int -> GetRelationalDatabaseMetricData -> ShowS
$cshowsPrec :: Int -> GetRelationalDatabaseMetricData -> ShowS
Prelude.Show, forall x.
Rep GetRelationalDatabaseMetricData x
-> GetRelationalDatabaseMetricData
forall x.
GetRelationalDatabaseMetricData
-> Rep GetRelationalDatabaseMetricData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetRelationalDatabaseMetricData x
-> GetRelationalDatabaseMetricData
$cfrom :: forall x.
GetRelationalDatabaseMetricData
-> Rep GetRelationalDatabaseMetricData x
Prelude.Generic)

-- |
-- Create a value of 'GetRelationalDatabaseMetricData' 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:
--
-- 'relationalDatabaseName', 'getRelationalDatabaseMetricData_relationalDatabaseName' - The name of your database from which to get metric data.
--
-- 'metricName', 'getRelationalDatabaseMetricData_metricName' - The metric for which you want to return information.
--
-- Valid relational database metric names are listed below, along with the
-- most useful @statistics@ to include in your request, and the published
-- @unit@ value. All relational database metric data is available in
-- 1-minute (60 seconds) granularity.
--
-- -   __@CPUUtilization@__ - The percentage of CPU utilization currently
--     in use on the database.
--
--     @Statistics@: The most useful statistics are @Maximum@ and
--     @Average@.
--
--     @Unit@: The published unit is @Percent@.
--
-- -   __@DatabaseConnections@__ - The number of database connections in
--     use.
--
--     @Statistics@: The most useful statistics are @Maximum@ and @Sum@.
--
--     @Unit@: The published unit is @Count@.
--
-- -   __@DiskQueueDepth@__ - The number of outstanding IOs (read\/write
--     requests) that are waiting to access the disk.
--
--     @Statistics@: The most useful statistic is @Sum@.
--
--     @Unit@: The published unit is @Count@.
--
-- -   __@FreeStorageSpace@__ - The amount of available storage space.
--
--     @Statistics@: The most useful statistic is @Sum@.
--
--     @Unit@: The published unit is @Bytes@.
--
-- -   __@NetworkReceiveThroughput@__ - The incoming (Receive) network
--     traffic on the database, including both customer database traffic
--     and AWS traffic used for monitoring and replication.
--
--     @Statistics@: The most useful statistic is @Average@.
--
--     @Unit@: The published unit is @Bytes\/Second@.
--
-- -   __@NetworkTransmitThroughput@__ - The outgoing (Transmit) network
--     traffic on the database, including both customer database traffic
--     and AWS traffic used for monitoring and replication.
--
--     @Statistics@: The most useful statistic is @Average@.
--
--     @Unit@: The published unit is @Bytes\/Second@.
--
-- 'period', 'getRelationalDatabaseMetricData_period' - The granularity, in seconds, of the returned data points.
--
-- All relational database metric data is available in 1-minute (60
-- seconds) granularity.
--
-- 'startTime', 'getRelationalDatabaseMetricData_startTime' - The start of the time interval from which to get metric data.
--
-- Constraints:
--
-- -   Specified in Coordinated Universal Time (UTC).
--
-- -   Specified in the Unix time format.
--
--     For example, if you wish to use a start time of October 1, 2018, at
--     8 PM UTC, then you input @1538424000@ as the start time.
--
-- 'endTime', 'getRelationalDatabaseMetricData_endTime' - The end of the time interval from which to get metric data.
--
-- Constraints:
--
-- -   Specified in Coordinated Universal Time (UTC).
--
-- -   Specified in the Unix time format.
--
--     For example, if you wish to use an end time of October 1, 2018, at 8
--     PM UTC, then you input @1538424000@ as the end time.
--
-- 'unit', 'getRelationalDatabaseMetricData_unit' - The unit for the metric data request. Valid units depend on the metric
-- data being requested. For the valid units with each available metric,
-- see the @metricName@ parameter.
--
-- 'statistics', 'getRelationalDatabaseMetricData_statistics' - The statistic for the metric.
--
-- The following statistics are available:
--
-- -   @Minimum@ - The lowest value observed during the specified period.
--     Use this value to determine low volumes of activity for your
--     application.
--
-- -   @Maximum@ - The highest value observed during the specified period.
--     Use this value to determine high volumes of activity for your
--     application.
--
-- -   @Sum@ - All values submitted for the matching metric added together.
--     You can use this statistic to determine the total volume of a
--     metric.
--
-- -   @Average@ - The value of Sum \/ SampleCount during the specified
--     period. By comparing this statistic with the Minimum and Maximum
--     values, you can determine the full scope of a metric and how close
--     the average use is to the Minimum and Maximum values. This
--     comparison helps you to know when to increase or decrease your
--     resources.
--
-- -   @SampleCount@ - The count, or number, of data points used for the
--     statistical calculation.
newGetRelationalDatabaseMetricData ::
  -- | 'relationalDatabaseName'
  Prelude.Text ->
  -- | 'metricName'
  RelationalDatabaseMetricName ->
  -- | 'period'
  Prelude.Natural ->
  -- | 'startTime'
  Prelude.UTCTime ->
  -- | 'endTime'
  Prelude.UTCTime ->
  -- | 'unit'
  MetricUnit ->
  GetRelationalDatabaseMetricData
newGetRelationalDatabaseMetricData :: Text
-> RelationalDatabaseMetricName
-> Natural
-> UTCTime
-> UTCTime
-> MetricUnit
-> GetRelationalDatabaseMetricData
newGetRelationalDatabaseMetricData
  Text
pRelationalDatabaseName_
  RelationalDatabaseMetricName
pMetricName_
  Natural
pPeriod_
  UTCTime
pStartTime_
  UTCTime
pEndTime_
  MetricUnit
pUnit_ =
    GetRelationalDatabaseMetricData'
      { $sel:relationalDatabaseName:GetRelationalDatabaseMetricData' :: Text
relationalDatabaseName =
          Text
pRelationalDatabaseName_,
        $sel:metricName:GetRelationalDatabaseMetricData' :: RelationalDatabaseMetricName
metricName = RelationalDatabaseMetricName
pMetricName_,
        $sel:period:GetRelationalDatabaseMetricData' :: Natural
period = Natural
pPeriod_,
        $sel:startTime:GetRelationalDatabaseMetricData' :: POSIX
startTime = forall (a :: Format). Iso' (Time a) UTCTime
Data._Time forall t b. AReview t b -> b -> t
Lens.# UTCTime
pStartTime_,
        $sel:endTime:GetRelationalDatabaseMetricData' :: POSIX
endTime = forall (a :: Format). Iso' (Time a) UTCTime
Data._Time forall t b. AReview t b -> b -> t
Lens.# UTCTime
pEndTime_,
        $sel:unit:GetRelationalDatabaseMetricData' :: MetricUnit
unit = MetricUnit
pUnit_,
        $sel:statistics:GetRelationalDatabaseMetricData' :: [MetricStatistic]
statistics = forall a. Monoid a => a
Prelude.mempty
      }

-- | The name of your database from which to get metric data.
getRelationalDatabaseMetricData_relationalDatabaseName :: Lens.Lens' GetRelationalDatabaseMetricData Prelude.Text
getRelationalDatabaseMetricData_relationalDatabaseName :: Lens' GetRelationalDatabaseMetricData Text
getRelationalDatabaseMetricData_relationalDatabaseName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabaseMetricData' {Text
relationalDatabaseName :: Text
$sel:relationalDatabaseName:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> Text
relationalDatabaseName} -> Text
relationalDatabaseName) (\s :: GetRelationalDatabaseMetricData
s@GetRelationalDatabaseMetricData' {} Text
a -> GetRelationalDatabaseMetricData
s {$sel:relationalDatabaseName:GetRelationalDatabaseMetricData' :: Text
relationalDatabaseName = Text
a} :: GetRelationalDatabaseMetricData)

-- | The metric for which you want to return information.
--
-- Valid relational database metric names are listed below, along with the
-- most useful @statistics@ to include in your request, and the published
-- @unit@ value. All relational database metric data is available in
-- 1-minute (60 seconds) granularity.
--
-- -   __@CPUUtilization@__ - The percentage of CPU utilization currently
--     in use on the database.
--
--     @Statistics@: The most useful statistics are @Maximum@ and
--     @Average@.
--
--     @Unit@: The published unit is @Percent@.
--
-- -   __@DatabaseConnections@__ - The number of database connections in
--     use.
--
--     @Statistics@: The most useful statistics are @Maximum@ and @Sum@.
--
--     @Unit@: The published unit is @Count@.
--
-- -   __@DiskQueueDepth@__ - The number of outstanding IOs (read\/write
--     requests) that are waiting to access the disk.
--
--     @Statistics@: The most useful statistic is @Sum@.
--
--     @Unit@: The published unit is @Count@.
--
-- -   __@FreeStorageSpace@__ - The amount of available storage space.
--
--     @Statistics@: The most useful statistic is @Sum@.
--
--     @Unit@: The published unit is @Bytes@.
--
-- -   __@NetworkReceiveThroughput@__ - The incoming (Receive) network
--     traffic on the database, including both customer database traffic
--     and AWS traffic used for monitoring and replication.
--
--     @Statistics@: The most useful statistic is @Average@.
--
--     @Unit@: The published unit is @Bytes\/Second@.
--
-- -   __@NetworkTransmitThroughput@__ - The outgoing (Transmit) network
--     traffic on the database, including both customer database traffic
--     and AWS traffic used for monitoring and replication.
--
--     @Statistics@: The most useful statistic is @Average@.
--
--     @Unit@: The published unit is @Bytes\/Second@.
getRelationalDatabaseMetricData_metricName :: Lens.Lens' GetRelationalDatabaseMetricData RelationalDatabaseMetricName
getRelationalDatabaseMetricData_metricName :: Lens' GetRelationalDatabaseMetricData RelationalDatabaseMetricName
getRelationalDatabaseMetricData_metricName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabaseMetricData' {RelationalDatabaseMetricName
metricName :: RelationalDatabaseMetricName
$sel:metricName:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> RelationalDatabaseMetricName
metricName} -> RelationalDatabaseMetricName
metricName) (\s :: GetRelationalDatabaseMetricData
s@GetRelationalDatabaseMetricData' {} RelationalDatabaseMetricName
a -> GetRelationalDatabaseMetricData
s {$sel:metricName:GetRelationalDatabaseMetricData' :: RelationalDatabaseMetricName
metricName = RelationalDatabaseMetricName
a} :: GetRelationalDatabaseMetricData)

-- | The granularity, in seconds, of the returned data points.
--
-- All relational database metric data is available in 1-minute (60
-- seconds) granularity.
getRelationalDatabaseMetricData_period :: Lens.Lens' GetRelationalDatabaseMetricData Prelude.Natural
getRelationalDatabaseMetricData_period :: Lens' GetRelationalDatabaseMetricData Natural
getRelationalDatabaseMetricData_period = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabaseMetricData' {Natural
period :: Natural
$sel:period:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> Natural
period} -> Natural
period) (\s :: GetRelationalDatabaseMetricData
s@GetRelationalDatabaseMetricData' {} Natural
a -> GetRelationalDatabaseMetricData
s {$sel:period:GetRelationalDatabaseMetricData' :: Natural
period = Natural
a} :: GetRelationalDatabaseMetricData)

-- | The start of the time interval from which to get metric data.
--
-- Constraints:
--
-- -   Specified in Coordinated Universal Time (UTC).
--
-- -   Specified in the Unix time format.
--
--     For example, if you wish to use a start time of October 1, 2018, at
--     8 PM UTC, then you input @1538424000@ as the start time.
getRelationalDatabaseMetricData_startTime :: Lens.Lens' GetRelationalDatabaseMetricData Prelude.UTCTime
getRelationalDatabaseMetricData_startTime :: Lens' GetRelationalDatabaseMetricData UTCTime
getRelationalDatabaseMetricData_startTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabaseMetricData' {POSIX
startTime :: POSIX
$sel:startTime:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> POSIX
startTime} -> POSIX
startTime) (\s :: GetRelationalDatabaseMetricData
s@GetRelationalDatabaseMetricData' {} POSIX
a -> GetRelationalDatabaseMetricData
s {$sel:startTime:GetRelationalDatabaseMetricData' :: POSIX
startTime = POSIX
a} :: GetRelationalDatabaseMetricData) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The end of the time interval from which to get metric data.
--
-- Constraints:
--
-- -   Specified in Coordinated Universal Time (UTC).
--
-- -   Specified in the Unix time format.
--
--     For example, if you wish to use an end time of October 1, 2018, at 8
--     PM UTC, then you input @1538424000@ as the end time.
getRelationalDatabaseMetricData_endTime :: Lens.Lens' GetRelationalDatabaseMetricData Prelude.UTCTime
getRelationalDatabaseMetricData_endTime :: Lens' GetRelationalDatabaseMetricData UTCTime
getRelationalDatabaseMetricData_endTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabaseMetricData' {POSIX
endTime :: POSIX
$sel:endTime:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> POSIX
endTime} -> POSIX
endTime) (\s :: GetRelationalDatabaseMetricData
s@GetRelationalDatabaseMetricData' {} POSIX
a -> GetRelationalDatabaseMetricData
s {$sel:endTime:GetRelationalDatabaseMetricData' :: POSIX
endTime = POSIX
a} :: GetRelationalDatabaseMetricData) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The unit for the metric data request. Valid units depend on the metric
-- data being requested. For the valid units with each available metric,
-- see the @metricName@ parameter.
getRelationalDatabaseMetricData_unit :: Lens.Lens' GetRelationalDatabaseMetricData MetricUnit
getRelationalDatabaseMetricData_unit :: Lens' GetRelationalDatabaseMetricData MetricUnit
getRelationalDatabaseMetricData_unit = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabaseMetricData' {MetricUnit
unit :: MetricUnit
$sel:unit:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> MetricUnit
unit} -> MetricUnit
unit) (\s :: GetRelationalDatabaseMetricData
s@GetRelationalDatabaseMetricData' {} MetricUnit
a -> GetRelationalDatabaseMetricData
s {$sel:unit:GetRelationalDatabaseMetricData' :: MetricUnit
unit = MetricUnit
a} :: GetRelationalDatabaseMetricData)

-- | The statistic for the metric.
--
-- The following statistics are available:
--
-- -   @Minimum@ - The lowest value observed during the specified period.
--     Use this value to determine low volumes of activity for your
--     application.
--
-- -   @Maximum@ - The highest value observed during the specified period.
--     Use this value to determine high volumes of activity for your
--     application.
--
-- -   @Sum@ - All values submitted for the matching metric added together.
--     You can use this statistic to determine the total volume of a
--     metric.
--
-- -   @Average@ - The value of Sum \/ SampleCount during the specified
--     period. By comparing this statistic with the Minimum and Maximum
--     values, you can determine the full scope of a metric and how close
--     the average use is to the Minimum and Maximum values. This
--     comparison helps you to know when to increase or decrease your
--     resources.
--
-- -   @SampleCount@ - The count, or number, of data points used for the
--     statistical calculation.
getRelationalDatabaseMetricData_statistics :: Lens.Lens' GetRelationalDatabaseMetricData [MetricStatistic]
getRelationalDatabaseMetricData_statistics :: Lens' GetRelationalDatabaseMetricData [MetricStatistic]
getRelationalDatabaseMetricData_statistics = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabaseMetricData' {[MetricStatistic]
statistics :: [MetricStatistic]
$sel:statistics:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> [MetricStatistic]
statistics} -> [MetricStatistic]
statistics) (\s :: GetRelationalDatabaseMetricData
s@GetRelationalDatabaseMetricData' {} [MetricStatistic]
a -> GetRelationalDatabaseMetricData
s {$sel:statistics:GetRelationalDatabaseMetricData' :: [MetricStatistic]
statistics = [MetricStatistic]
a} :: GetRelationalDatabaseMetricData) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance
  Core.AWSRequest
    GetRelationalDatabaseMetricData
  where
  type
    AWSResponse GetRelationalDatabaseMetricData =
      GetRelationalDatabaseMetricDataResponse
  request :: (Service -> Service)
-> GetRelationalDatabaseMetricData
-> Request GetRelationalDatabaseMetricData
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 GetRelationalDatabaseMetricData
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse GetRelationalDatabaseMetricData)))
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 [MetricDatapoint]
-> Maybe RelationalDatabaseMetricName
-> Int
-> GetRelationalDatabaseMetricDataResponse
GetRelationalDatabaseMetricDataResponse'
            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
"metricData" 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.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"metricName")
            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
    GetRelationalDatabaseMetricData
  where
  hashWithSalt :: Int -> GetRelationalDatabaseMetricData -> Int
hashWithSalt
    Int
_salt
    GetRelationalDatabaseMetricData' {Natural
[MetricStatistic]
Text
POSIX
MetricUnit
RelationalDatabaseMetricName
statistics :: [MetricStatistic]
unit :: MetricUnit
endTime :: POSIX
startTime :: POSIX
period :: Natural
metricName :: RelationalDatabaseMetricName
relationalDatabaseName :: Text
$sel:statistics:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> [MetricStatistic]
$sel:unit:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> MetricUnit
$sel:endTime:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> POSIX
$sel:startTime:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> POSIX
$sel:period:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> Natural
$sel:metricName:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> RelationalDatabaseMetricName
$sel:relationalDatabaseName:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
relationalDatabaseName
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` RelationalDatabaseMetricName
metricName
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Natural
period
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` POSIX
startTime
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` POSIX
endTime
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` MetricUnit
unit
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [MetricStatistic]
statistics

instance
  Prelude.NFData
    GetRelationalDatabaseMetricData
  where
  rnf :: GetRelationalDatabaseMetricData -> ()
rnf GetRelationalDatabaseMetricData' {Natural
[MetricStatistic]
Text
POSIX
MetricUnit
RelationalDatabaseMetricName
statistics :: [MetricStatistic]
unit :: MetricUnit
endTime :: POSIX
startTime :: POSIX
period :: Natural
metricName :: RelationalDatabaseMetricName
relationalDatabaseName :: Text
$sel:statistics:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> [MetricStatistic]
$sel:unit:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> MetricUnit
$sel:endTime:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> POSIX
$sel:startTime:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> POSIX
$sel:period:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> Natural
$sel:metricName:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> RelationalDatabaseMetricName
$sel:relationalDatabaseName:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
relationalDatabaseName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf RelationalDatabaseMetricName
metricName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Natural
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
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf MetricUnit
unit
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [MetricStatistic]
statistics

instance
  Data.ToHeaders
    GetRelationalDatabaseMetricData
  where
  toHeaders :: GetRelationalDatabaseMetricData -> 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
"Lightsail_20161128.GetRelationalDatabaseMetricData" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON GetRelationalDatabaseMetricData where
  toJSON :: GetRelationalDatabaseMetricData -> Value
toJSON GetRelationalDatabaseMetricData' {Natural
[MetricStatistic]
Text
POSIX
MetricUnit
RelationalDatabaseMetricName
statistics :: [MetricStatistic]
unit :: MetricUnit
endTime :: POSIX
startTime :: POSIX
period :: Natural
metricName :: RelationalDatabaseMetricName
relationalDatabaseName :: Text
$sel:statistics:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> [MetricStatistic]
$sel:unit:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> MetricUnit
$sel:endTime:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> POSIX
$sel:startTime:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> POSIX
$sel:period:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> Natural
$sel:metricName:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> RelationalDatabaseMetricName
$sel:relationalDatabaseName:GetRelationalDatabaseMetricData' :: GetRelationalDatabaseMetricData -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              ( Key
"relationalDatabaseName"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
relationalDatabaseName
              ),
            forall a. a -> Maybe a
Prelude.Just (Key
"metricName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= RelationalDatabaseMetricName
metricName),
            forall a. a -> Maybe a
Prelude.Just (Key
"period" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Natural
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),
            forall a. a -> Maybe a
Prelude.Just (Key
"unit" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= MetricUnit
unit),
            forall a. a -> Maybe a
Prelude.Just (Key
"statistics" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= [MetricStatistic]
statistics)
          ]
      )

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

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

-- | /See:/ 'newGetRelationalDatabaseMetricDataResponse' smart constructor.
data GetRelationalDatabaseMetricDataResponse = GetRelationalDatabaseMetricDataResponse'
  { -- | An array of objects that describe the metric data returned.
    GetRelationalDatabaseMetricDataResponse -> Maybe [MetricDatapoint]
metricData :: Prelude.Maybe [MetricDatapoint],
    -- | The name of the metric returned.
    GetRelationalDatabaseMetricDataResponse
-> Maybe RelationalDatabaseMetricName
metricName :: Prelude.Maybe RelationalDatabaseMetricName,
    -- | The response's http status code.
    GetRelationalDatabaseMetricDataResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetRelationalDatabaseMetricDataResponse
-> GetRelationalDatabaseMetricDataResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetRelationalDatabaseMetricDataResponse
-> GetRelationalDatabaseMetricDataResponse -> Bool
$c/= :: GetRelationalDatabaseMetricDataResponse
-> GetRelationalDatabaseMetricDataResponse -> Bool
== :: GetRelationalDatabaseMetricDataResponse
-> GetRelationalDatabaseMetricDataResponse -> Bool
$c== :: GetRelationalDatabaseMetricDataResponse
-> GetRelationalDatabaseMetricDataResponse -> Bool
Prelude.Eq, ReadPrec [GetRelationalDatabaseMetricDataResponse]
ReadPrec GetRelationalDatabaseMetricDataResponse
Int -> ReadS GetRelationalDatabaseMetricDataResponse
ReadS [GetRelationalDatabaseMetricDataResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetRelationalDatabaseMetricDataResponse]
$creadListPrec :: ReadPrec [GetRelationalDatabaseMetricDataResponse]
readPrec :: ReadPrec GetRelationalDatabaseMetricDataResponse
$creadPrec :: ReadPrec GetRelationalDatabaseMetricDataResponse
readList :: ReadS [GetRelationalDatabaseMetricDataResponse]
$creadList :: ReadS [GetRelationalDatabaseMetricDataResponse]
readsPrec :: Int -> ReadS GetRelationalDatabaseMetricDataResponse
$creadsPrec :: Int -> ReadS GetRelationalDatabaseMetricDataResponse
Prelude.Read, Int -> GetRelationalDatabaseMetricDataResponse -> ShowS
[GetRelationalDatabaseMetricDataResponse] -> ShowS
GetRelationalDatabaseMetricDataResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetRelationalDatabaseMetricDataResponse] -> ShowS
$cshowList :: [GetRelationalDatabaseMetricDataResponse] -> ShowS
show :: GetRelationalDatabaseMetricDataResponse -> String
$cshow :: GetRelationalDatabaseMetricDataResponse -> String
showsPrec :: Int -> GetRelationalDatabaseMetricDataResponse -> ShowS
$cshowsPrec :: Int -> GetRelationalDatabaseMetricDataResponse -> ShowS
Prelude.Show, forall x.
Rep GetRelationalDatabaseMetricDataResponse x
-> GetRelationalDatabaseMetricDataResponse
forall x.
GetRelationalDatabaseMetricDataResponse
-> Rep GetRelationalDatabaseMetricDataResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetRelationalDatabaseMetricDataResponse x
-> GetRelationalDatabaseMetricDataResponse
$cfrom :: forall x.
GetRelationalDatabaseMetricDataResponse
-> Rep GetRelationalDatabaseMetricDataResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetRelationalDatabaseMetricDataResponse' 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:
--
-- 'metricData', 'getRelationalDatabaseMetricDataResponse_metricData' - An array of objects that describe the metric data returned.
--
-- 'metricName', 'getRelationalDatabaseMetricDataResponse_metricName' - The name of the metric returned.
--
-- 'httpStatus', 'getRelationalDatabaseMetricDataResponse_httpStatus' - The response's http status code.
newGetRelationalDatabaseMetricDataResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetRelationalDatabaseMetricDataResponse
newGetRelationalDatabaseMetricDataResponse :: Int -> GetRelationalDatabaseMetricDataResponse
newGetRelationalDatabaseMetricDataResponse
  Int
pHttpStatus_ =
    GetRelationalDatabaseMetricDataResponse'
      { $sel:metricData:GetRelationalDatabaseMetricDataResponse' :: Maybe [MetricDatapoint]
metricData =
          forall a. Maybe a
Prelude.Nothing,
        $sel:metricName:GetRelationalDatabaseMetricDataResponse' :: Maybe RelationalDatabaseMetricName
metricName = forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:GetRelationalDatabaseMetricDataResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | An array of objects that describe the metric data returned.
getRelationalDatabaseMetricDataResponse_metricData :: Lens.Lens' GetRelationalDatabaseMetricDataResponse (Prelude.Maybe [MetricDatapoint])
getRelationalDatabaseMetricDataResponse_metricData :: Lens'
  GetRelationalDatabaseMetricDataResponse (Maybe [MetricDatapoint])
getRelationalDatabaseMetricDataResponse_metricData = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabaseMetricDataResponse' {Maybe [MetricDatapoint]
metricData :: Maybe [MetricDatapoint]
$sel:metricData:GetRelationalDatabaseMetricDataResponse' :: GetRelationalDatabaseMetricDataResponse -> Maybe [MetricDatapoint]
metricData} -> Maybe [MetricDatapoint]
metricData) (\s :: GetRelationalDatabaseMetricDataResponse
s@GetRelationalDatabaseMetricDataResponse' {} Maybe [MetricDatapoint]
a -> GetRelationalDatabaseMetricDataResponse
s {$sel:metricData:GetRelationalDatabaseMetricDataResponse' :: Maybe [MetricDatapoint]
metricData = Maybe [MetricDatapoint]
a} :: GetRelationalDatabaseMetricDataResponse) 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 name of the metric returned.
getRelationalDatabaseMetricDataResponse_metricName :: Lens.Lens' GetRelationalDatabaseMetricDataResponse (Prelude.Maybe RelationalDatabaseMetricName)
getRelationalDatabaseMetricDataResponse_metricName :: Lens'
  GetRelationalDatabaseMetricDataResponse
  (Maybe RelationalDatabaseMetricName)
getRelationalDatabaseMetricDataResponse_metricName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabaseMetricDataResponse' {Maybe RelationalDatabaseMetricName
metricName :: Maybe RelationalDatabaseMetricName
$sel:metricName:GetRelationalDatabaseMetricDataResponse' :: GetRelationalDatabaseMetricDataResponse
-> Maybe RelationalDatabaseMetricName
metricName} -> Maybe RelationalDatabaseMetricName
metricName) (\s :: GetRelationalDatabaseMetricDataResponse
s@GetRelationalDatabaseMetricDataResponse' {} Maybe RelationalDatabaseMetricName
a -> GetRelationalDatabaseMetricDataResponse
s {$sel:metricName:GetRelationalDatabaseMetricDataResponse' :: Maybe RelationalDatabaseMetricName
metricName = Maybe RelationalDatabaseMetricName
a} :: GetRelationalDatabaseMetricDataResponse)

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

instance
  Prelude.NFData
    GetRelationalDatabaseMetricDataResponse
  where
  rnf :: GetRelationalDatabaseMetricDataResponse -> ()
rnf GetRelationalDatabaseMetricDataResponse' {Int
Maybe [MetricDatapoint]
Maybe RelationalDatabaseMetricName
httpStatus :: Int
metricName :: Maybe RelationalDatabaseMetricName
metricData :: Maybe [MetricDatapoint]
$sel:httpStatus:GetRelationalDatabaseMetricDataResponse' :: GetRelationalDatabaseMetricDataResponse -> Int
$sel:metricName:GetRelationalDatabaseMetricDataResponse' :: GetRelationalDatabaseMetricDataResponse
-> Maybe RelationalDatabaseMetricName
$sel:metricData:GetRelationalDatabaseMetricDataResponse' :: GetRelationalDatabaseMetricDataResponse -> Maybe [MetricDatapoint]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [MetricDatapoint]
metricData
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RelationalDatabaseMetricName
metricName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus