{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.CloudWatch.Types.MetricDataQuery
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.CloudWatch.Types.MetricDataQuery where

import Amazonka.CloudWatch.Types.MetricStat
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

-- | This structure is used in both @GetMetricData@ and @PutMetricAlarm@. The
-- supported use of this structure is different for those two operations.
--
-- When used in @GetMetricData@, it indicates the metric data to return,
-- and whether this call is just retrieving a batch set of data for one
-- metric, or is performing a Metrics Insights query or a math expression.
-- A single @GetMetricData@ call can include up to 500 @MetricDataQuery@
-- structures.
--
-- When used in @PutMetricAlarm@, it enables you to create an alarm based
-- on a metric math expression. Each @MetricDataQuery@ in the array
-- specifies either a metric to retrieve, or a math expression to be
-- performed on retrieved metrics. A single @PutMetricAlarm@ call can
-- include up to 20 @MetricDataQuery@ structures in the array. The 20
-- structures can include as many as 10 structures that contain a
-- @MetricStat@ parameter to retrieve a metric, and as many as 10
-- structures that contain the @Expression@ parameter to perform a math
-- expression. Of those @Expression@ structures, one must have @true@ as
-- the value for @ReturnData@. The result of this expression is the value
-- the alarm watches.
--
-- Any expression used in a @PutMetricAlarm@ operation must return a single
-- time series. For more information, see
-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax Metric Math Syntax and Functions>
-- in the /Amazon CloudWatch User Guide/.
--
-- Some of the parameters of this structure also have different uses
-- whether you are using this structure in a @GetMetricData@ operation or a
-- @PutMetricAlarm@ operation. These differences are explained in the
-- following parameter list.
--
-- /See:/ 'newMetricDataQuery' smart constructor.
data MetricDataQuery = MetricDataQuery'
  { -- | The ID of the account where the metrics are located.
    --
    -- If you are performing a @GetMetricData@ operation in a monitoring
    -- account, use this to specify which account to retrieve this metric from.
    --
    -- If you are performing a @PutMetricAlarm@ operation, use this to specify
    -- which account contains the metric that the alarm is watching.
    MetricDataQuery -> Maybe Text
accountId :: Prelude.Maybe Prelude.Text,
    -- | This field can contain either a Metrics Insights query, or a metric math
    -- expression to be performed on the returned data. For more information
    -- about Metrics Insights queries, see
    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-insights-querylanguage Metrics Insights query components and syntax>
    -- in the /Amazon CloudWatch User Guide/.
    --
    -- A math expression can use the @Id@ of the other metrics or queries to
    -- refer to those metrics, and can also use the @Id@ of other expressions
    -- to use the result of those expressions. For more information about
    -- metric math expressions, see
    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax Metric Math Syntax and Functions>
    -- in the /Amazon CloudWatch User Guide/.
    --
    -- Within each MetricDataQuery object, you must specify either @Expression@
    -- or @MetricStat@ but not both.
    MetricDataQuery -> Maybe Text
expression :: Prelude.Maybe Prelude.Text,
    -- | A human-readable label for this metric or expression. This is especially
    -- useful if this is an expression, so that you know what the value
    -- represents. If the metric or expression is shown in a CloudWatch
    -- dashboard widget, the label is shown. If Label is omitted, CloudWatch
    -- generates a default.
    --
    -- You can put dynamic expressions into a label, so that it is more
    -- descriptive. For more information, see
    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph-dynamic-labels.html Using Dynamic Labels>.
    MetricDataQuery -> Maybe Text
label :: Prelude.Maybe Prelude.Text,
    -- | The metric to be returned, along with statistics, period, and units. Use
    -- this parameter only if this object is retrieving a metric and not
    -- performing a math expression on returned data.
    --
    -- Within one MetricDataQuery object, you must specify either @Expression@
    -- or @MetricStat@ but not both.
    MetricDataQuery -> Maybe MetricStat
metricStat :: Prelude.Maybe MetricStat,
    -- | The granularity, in seconds, of the returned data points. For metrics
    -- with regular resolution, a period can be as short as one minute (60
    -- seconds) and must be a multiple of 60. For high-resolution metrics that
    -- are collected at intervals of less than one minute, the period can be 1,
    -- 5, 10, 30, 60, or any multiple of 60. High-resolution metrics are those
    -- metrics stored by a @PutMetricData@ operation that includes a
    -- @StorageResolution of 1 second@.
    MetricDataQuery -> Maybe Natural
period :: Prelude.Maybe Prelude.Natural,
    -- | When used in @GetMetricData@, this option indicates whether to return
    -- the timestamps and raw data values of this metric. If you are performing
    -- this call just to do math expressions and do not also need the raw data
    -- returned, you can specify @false@. If you omit this, the default of
    -- @true@ is used.
    --
    -- When used in @PutMetricAlarm@, specify @true@ for the one expression
    -- result to use as the alarm. For all other metrics and expressions in the
    -- same @PutMetricAlarm@ operation, specify @ReturnData@ as False.
    MetricDataQuery -> Maybe Bool
returnData :: Prelude.Maybe Prelude.Bool,
    -- | A short name used to tie this object to the results in the response.
    -- This name must be unique within a single call to @GetMetricData@. If you
    -- are performing math expressions on this set of data, this name
    -- represents that data and can serve as a variable in the mathematical
    -- expression. The valid characters are letters, numbers, and underscore.
    -- The first character must be a lowercase letter.
    MetricDataQuery -> Text
id :: Prelude.Text
  }
  deriving (MetricDataQuery -> MetricDataQuery -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MetricDataQuery -> MetricDataQuery -> Bool
$c/= :: MetricDataQuery -> MetricDataQuery -> Bool
== :: MetricDataQuery -> MetricDataQuery -> Bool
$c== :: MetricDataQuery -> MetricDataQuery -> Bool
Prelude.Eq, ReadPrec [MetricDataQuery]
ReadPrec MetricDataQuery
Int -> ReadS MetricDataQuery
ReadS [MetricDataQuery]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MetricDataQuery]
$creadListPrec :: ReadPrec [MetricDataQuery]
readPrec :: ReadPrec MetricDataQuery
$creadPrec :: ReadPrec MetricDataQuery
readList :: ReadS [MetricDataQuery]
$creadList :: ReadS [MetricDataQuery]
readsPrec :: Int -> ReadS MetricDataQuery
$creadsPrec :: Int -> ReadS MetricDataQuery
Prelude.Read, Int -> MetricDataQuery -> ShowS
[MetricDataQuery] -> ShowS
MetricDataQuery -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MetricDataQuery] -> ShowS
$cshowList :: [MetricDataQuery] -> ShowS
show :: MetricDataQuery -> String
$cshow :: MetricDataQuery -> String
showsPrec :: Int -> MetricDataQuery -> ShowS
$cshowsPrec :: Int -> MetricDataQuery -> ShowS
Prelude.Show, forall x. Rep MetricDataQuery x -> MetricDataQuery
forall x. MetricDataQuery -> Rep MetricDataQuery x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep MetricDataQuery x -> MetricDataQuery
$cfrom :: forall x. MetricDataQuery -> Rep MetricDataQuery x
Prelude.Generic)

-- |
-- Create a value of 'MetricDataQuery' 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:
--
-- 'accountId', 'metricDataQuery_accountId' - The ID of the account where the metrics are located.
--
-- If you are performing a @GetMetricData@ operation in a monitoring
-- account, use this to specify which account to retrieve this metric from.
--
-- If you are performing a @PutMetricAlarm@ operation, use this to specify
-- which account contains the metric that the alarm is watching.
--
-- 'expression', 'metricDataQuery_expression' - This field can contain either a Metrics Insights query, or a metric math
-- expression to be performed on the returned data. For more information
-- about Metrics Insights queries, see
-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-insights-querylanguage Metrics Insights query components and syntax>
-- in the /Amazon CloudWatch User Guide/.
--
-- A math expression can use the @Id@ of the other metrics or queries to
-- refer to those metrics, and can also use the @Id@ of other expressions
-- to use the result of those expressions. For more information about
-- metric math expressions, see
-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax Metric Math Syntax and Functions>
-- in the /Amazon CloudWatch User Guide/.
--
-- Within each MetricDataQuery object, you must specify either @Expression@
-- or @MetricStat@ but not both.
--
-- 'label', 'metricDataQuery_label' - A human-readable label for this metric or expression. This is especially
-- useful if this is an expression, so that you know what the value
-- represents. If the metric or expression is shown in a CloudWatch
-- dashboard widget, the label is shown. If Label is omitted, CloudWatch
-- generates a default.
--
-- You can put dynamic expressions into a label, so that it is more
-- descriptive. For more information, see
-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph-dynamic-labels.html Using Dynamic Labels>.
--
-- 'metricStat', 'metricDataQuery_metricStat' - The metric to be returned, along with statistics, period, and units. Use
-- this parameter only if this object is retrieving a metric and not
-- performing a math expression on returned data.
--
-- Within one MetricDataQuery object, you must specify either @Expression@
-- or @MetricStat@ but not both.
--
-- 'period', 'metricDataQuery_period' - The granularity, in seconds, of the returned data points. For metrics
-- with regular resolution, a period can be as short as one minute (60
-- seconds) and must be a multiple of 60. For high-resolution metrics that
-- are collected at intervals of less than one minute, the period can be 1,
-- 5, 10, 30, 60, or any multiple of 60. High-resolution metrics are those
-- metrics stored by a @PutMetricData@ operation that includes a
-- @StorageResolution of 1 second@.
--
-- 'returnData', 'metricDataQuery_returnData' - When used in @GetMetricData@, this option indicates whether to return
-- the timestamps and raw data values of this metric. If you are performing
-- this call just to do math expressions and do not also need the raw data
-- returned, you can specify @false@. If you omit this, the default of
-- @true@ is used.
--
-- When used in @PutMetricAlarm@, specify @true@ for the one expression
-- result to use as the alarm. For all other metrics and expressions in the
-- same @PutMetricAlarm@ operation, specify @ReturnData@ as False.
--
-- 'id', 'metricDataQuery_id' - A short name used to tie this object to the results in the response.
-- This name must be unique within a single call to @GetMetricData@. If you
-- are performing math expressions on this set of data, this name
-- represents that data and can serve as a variable in the mathematical
-- expression. The valid characters are letters, numbers, and underscore.
-- The first character must be a lowercase letter.
newMetricDataQuery ::
  -- | 'id'
  Prelude.Text ->
  MetricDataQuery
newMetricDataQuery :: Text -> MetricDataQuery
newMetricDataQuery Text
pId_ =
  MetricDataQuery'
    { $sel:accountId:MetricDataQuery' :: Maybe Text
accountId = forall a. Maybe a
Prelude.Nothing,
      $sel:expression:MetricDataQuery' :: Maybe Text
expression = forall a. Maybe a
Prelude.Nothing,
      $sel:label:MetricDataQuery' :: Maybe Text
label = forall a. Maybe a
Prelude.Nothing,
      $sel:metricStat:MetricDataQuery' :: Maybe MetricStat
metricStat = forall a. Maybe a
Prelude.Nothing,
      $sel:period:MetricDataQuery' :: Maybe Natural
period = forall a. Maybe a
Prelude.Nothing,
      $sel:returnData:MetricDataQuery' :: Maybe Bool
returnData = forall a. Maybe a
Prelude.Nothing,
      $sel:id:MetricDataQuery' :: Text
id = Text
pId_
    }

-- | The ID of the account where the metrics are located.
--
-- If you are performing a @GetMetricData@ operation in a monitoring
-- account, use this to specify which account to retrieve this metric from.
--
-- If you are performing a @PutMetricAlarm@ operation, use this to specify
-- which account contains the metric that the alarm is watching.
metricDataQuery_accountId :: Lens.Lens' MetricDataQuery (Prelude.Maybe Prelude.Text)
metricDataQuery_accountId :: Lens' MetricDataQuery (Maybe Text)
metricDataQuery_accountId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MetricDataQuery' {Maybe Text
accountId :: Maybe Text
$sel:accountId:MetricDataQuery' :: MetricDataQuery -> Maybe Text
accountId} -> Maybe Text
accountId) (\s :: MetricDataQuery
s@MetricDataQuery' {} Maybe Text
a -> MetricDataQuery
s {$sel:accountId:MetricDataQuery' :: Maybe Text
accountId = Maybe Text
a} :: MetricDataQuery)

-- | This field can contain either a Metrics Insights query, or a metric math
-- expression to be performed on the returned data. For more information
-- about Metrics Insights queries, see
-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-insights-querylanguage Metrics Insights query components and syntax>
-- in the /Amazon CloudWatch User Guide/.
--
-- A math expression can use the @Id@ of the other metrics or queries to
-- refer to those metrics, and can also use the @Id@ of other expressions
-- to use the result of those expressions. For more information about
-- metric math expressions, see
-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax Metric Math Syntax and Functions>
-- in the /Amazon CloudWatch User Guide/.
--
-- Within each MetricDataQuery object, you must specify either @Expression@
-- or @MetricStat@ but not both.
metricDataQuery_expression :: Lens.Lens' MetricDataQuery (Prelude.Maybe Prelude.Text)
metricDataQuery_expression :: Lens' MetricDataQuery (Maybe Text)
metricDataQuery_expression = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MetricDataQuery' {Maybe Text
expression :: Maybe Text
$sel:expression:MetricDataQuery' :: MetricDataQuery -> Maybe Text
expression} -> Maybe Text
expression) (\s :: MetricDataQuery
s@MetricDataQuery' {} Maybe Text
a -> MetricDataQuery
s {$sel:expression:MetricDataQuery' :: Maybe Text
expression = Maybe Text
a} :: MetricDataQuery)

-- | A human-readable label for this metric or expression. This is especially
-- useful if this is an expression, so that you know what the value
-- represents. If the metric or expression is shown in a CloudWatch
-- dashboard widget, the label is shown. If Label is omitted, CloudWatch
-- generates a default.
--
-- You can put dynamic expressions into a label, so that it is more
-- descriptive. For more information, see
-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph-dynamic-labels.html Using Dynamic Labels>.
metricDataQuery_label :: Lens.Lens' MetricDataQuery (Prelude.Maybe Prelude.Text)
metricDataQuery_label :: Lens' MetricDataQuery (Maybe Text)
metricDataQuery_label = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MetricDataQuery' {Maybe Text
label :: Maybe Text
$sel:label:MetricDataQuery' :: MetricDataQuery -> Maybe Text
label} -> Maybe Text
label) (\s :: MetricDataQuery
s@MetricDataQuery' {} Maybe Text
a -> MetricDataQuery
s {$sel:label:MetricDataQuery' :: Maybe Text
label = Maybe Text
a} :: MetricDataQuery)

-- | The metric to be returned, along with statistics, period, and units. Use
-- this parameter only if this object is retrieving a metric and not
-- performing a math expression on returned data.
--
-- Within one MetricDataQuery object, you must specify either @Expression@
-- or @MetricStat@ but not both.
metricDataQuery_metricStat :: Lens.Lens' MetricDataQuery (Prelude.Maybe MetricStat)
metricDataQuery_metricStat :: Lens' MetricDataQuery (Maybe MetricStat)
metricDataQuery_metricStat = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MetricDataQuery' {Maybe MetricStat
metricStat :: Maybe MetricStat
$sel:metricStat:MetricDataQuery' :: MetricDataQuery -> Maybe MetricStat
metricStat} -> Maybe MetricStat
metricStat) (\s :: MetricDataQuery
s@MetricDataQuery' {} Maybe MetricStat
a -> MetricDataQuery
s {$sel:metricStat:MetricDataQuery' :: Maybe MetricStat
metricStat = Maybe MetricStat
a} :: MetricDataQuery)

-- | The granularity, in seconds, of the returned data points. For metrics
-- with regular resolution, a period can be as short as one minute (60
-- seconds) and must be a multiple of 60. For high-resolution metrics that
-- are collected at intervals of less than one minute, the period can be 1,
-- 5, 10, 30, 60, or any multiple of 60. High-resolution metrics are those
-- metrics stored by a @PutMetricData@ operation that includes a
-- @StorageResolution of 1 second@.
metricDataQuery_period :: Lens.Lens' MetricDataQuery (Prelude.Maybe Prelude.Natural)
metricDataQuery_period :: Lens' MetricDataQuery (Maybe Natural)
metricDataQuery_period = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MetricDataQuery' {Maybe Natural
period :: Maybe Natural
$sel:period:MetricDataQuery' :: MetricDataQuery -> Maybe Natural
period} -> Maybe Natural
period) (\s :: MetricDataQuery
s@MetricDataQuery' {} Maybe Natural
a -> MetricDataQuery
s {$sel:period:MetricDataQuery' :: Maybe Natural
period = Maybe Natural
a} :: MetricDataQuery)

-- | When used in @GetMetricData@, this option indicates whether to return
-- the timestamps and raw data values of this metric. If you are performing
-- this call just to do math expressions and do not also need the raw data
-- returned, you can specify @false@. If you omit this, the default of
-- @true@ is used.
--
-- When used in @PutMetricAlarm@, specify @true@ for the one expression
-- result to use as the alarm. For all other metrics and expressions in the
-- same @PutMetricAlarm@ operation, specify @ReturnData@ as False.
metricDataQuery_returnData :: Lens.Lens' MetricDataQuery (Prelude.Maybe Prelude.Bool)
metricDataQuery_returnData :: Lens' MetricDataQuery (Maybe Bool)
metricDataQuery_returnData = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MetricDataQuery' {Maybe Bool
returnData :: Maybe Bool
$sel:returnData:MetricDataQuery' :: MetricDataQuery -> Maybe Bool
returnData} -> Maybe Bool
returnData) (\s :: MetricDataQuery
s@MetricDataQuery' {} Maybe Bool
a -> MetricDataQuery
s {$sel:returnData:MetricDataQuery' :: Maybe Bool
returnData = Maybe Bool
a} :: MetricDataQuery)

-- | A short name used to tie this object to the results in the response.
-- This name must be unique within a single call to @GetMetricData@. If you
-- are performing math expressions on this set of data, this name
-- represents that data and can serve as a variable in the mathematical
-- expression. The valid characters are letters, numbers, and underscore.
-- The first character must be a lowercase letter.
metricDataQuery_id :: Lens.Lens' MetricDataQuery Prelude.Text
metricDataQuery_id :: Lens' MetricDataQuery Text
metricDataQuery_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MetricDataQuery' {Text
id :: Text
$sel:id:MetricDataQuery' :: MetricDataQuery -> Text
id} -> Text
id) (\s :: MetricDataQuery
s@MetricDataQuery' {} Text
a -> MetricDataQuery
s {$sel:id:MetricDataQuery' :: Text
id = Text
a} :: MetricDataQuery)

instance Data.FromXML MetricDataQuery where
  parseXML :: [Node] -> Either String MetricDataQuery
parseXML [Node]
x =
    Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe MetricStat
-> Maybe Natural
-> Maybe Bool
-> Text
-> MetricDataQuery
MetricDataQuery'
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"AccountId")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Expression")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Label")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"MetricStat")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Period")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"ReturnData")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String a
Data..@ Text
"Id")

instance Prelude.Hashable MetricDataQuery where
  hashWithSalt :: Int -> MetricDataQuery -> Int
hashWithSalt Int
_salt MetricDataQuery' {Maybe Bool
Maybe Natural
Maybe Text
Maybe MetricStat
Text
id :: Text
returnData :: Maybe Bool
period :: Maybe Natural
metricStat :: Maybe MetricStat
label :: Maybe Text
expression :: Maybe Text
accountId :: Maybe Text
$sel:id:MetricDataQuery' :: MetricDataQuery -> Text
$sel:returnData:MetricDataQuery' :: MetricDataQuery -> Maybe Bool
$sel:period:MetricDataQuery' :: MetricDataQuery -> Maybe Natural
$sel:metricStat:MetricDataQuery' :: MetricDataQuery -> Maybe MetricStat
$sel:label:MetricDataQuery' :: MetricDataQuery -> Maybe Text
$sel:expression:MetricDataQuery' :: MetricDataQuery -> Maybe Text
$sel:accountId:MetricDataQuery' :: MetricDataQuery -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
accountId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
expression
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
label
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MetricStat
metricStat
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
period
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
returnData
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
id

instance Prelude.NFData MetricDataQuery where
  rnf :: MetricDataQuery -> ()
rnf MetricDataQuery' {Maybe Bool
Maybe Natural
Maybe Text
Maybe MetricStat
Text
id :: Text
returnData :: Maybe Bool
period :: Maybe Natural
metricStat :: Maybe MetricStat
label :: Maybe Text
expression :: Maybe Text
accountId :: Maybe Text
$sel:id:MetricDataQuery' :: MetricDataQuery -> Text
$sel:returnData:MetricDataQuery' :: MetricDataQuery -> Maybe Bool
$sel:period:MetricDataQuery' :: MetricDataQuery -> Maybe Natural
$sel:metricStat:MetricDataQuery' :: MetricDataQuery -> Maybe MetricStat
$sel:label:MetricDataQuery' :: MetricDataQuery -> Maybe Text
$sel:expression:MetricDataQuery' :: MetricDataQuery -> Maybe Text
$sel:accountId:MetricDataQuery' :: MetricDataQuery -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
accountId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
expression
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
label
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MetricStat
metricStat
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
period
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
returnData
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
id

instance Data.ToQuery MetricDataQuery where
  toQuery :: MetricDataQuery -> QueryString
toQuery MetricDataQuery' {Maybe Bool
Maybe Natural
Maybe Text
Maybe MetricStat
Text
id :: Text
returnData :: Maybe Bool
period :: Maybe Natural
metricStat :: Maybe MetricStat
label :: Maybe Text
expression :: Maybe Text
accountId :: Maybe Text
$sel:id:MetricDataQuery' :: MetricDataQuery -> Text
$sel:returnData:MetricDataQuery' :: MetricDataQuery -> Maybe Bool
$sel:period:MetricDataQuery' :: MetricDataQuery -> Maybe Natural
$sel:metricStat:MetricDataQuery' :: MetricDataQuery -> Maybe MetricStat
$sel:label:MetricDataQuery' :: MetricDataQuery -> Maybe Text
$sel:expression:MetricDataQuery' :: MetricDataQuery -> Maybe Text
$sel:accountId:MetricDataQuery' :: MetricDataQuery -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"AccountId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
accountId,
        ByteString
"Expression" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
expression,
        ByteString
"Label" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
label,
        ByteString
"MetricStat" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe MetricStat
metricStat,
        ByteString
"Period" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Natural
period,
        ByteString
"ReturnData" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
returnData,
        ByteString
"Id" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
id
      ]