{-# 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.Connect.GetCurrentMetricData
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets the real-time metric data from the specified Amazon Connect
-- instance.
--
-- For a description of each metric, see
-- <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html Real-time Metrics Definitions>
-- in the /Amazon Connect Administrator Guide/.
module Amazonka.Connect.GetCurrentMetricData
  ( -- * Creating a Request
    GetCurrentMetricData (..),
    newGetCurrentMetricData,

    -- * Request Lenses
    getCurrentMetricData_groupings,
    getCurrentMetricData_maxResults,
    getCurrentMetricData_nextToken,
    getCurrentMetricData_sortCriteria,
    getCurrentMetricData_instanceId,
    getCurrentMetricData_filters,
    getCurrentMetricData_currentMetrics,

    -- * Destructuring the Response
    GetCurrentMetricDataResponse (..),
    newGetCurrentMetricDataResponse,

    -- * Response Lenses
    getCurrentMetricDataResponse_approximateTotalCount,
    getCurrentMetricDataResponse_dataSnapshotTime,
    getCurrentMetricDataResponse_metricResults,
    getCurrentMetricDataResponse_nextToken,
    getCurrentMetricDataResponse_httpStatus,
  )
where

import Amazonka.Connect.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:/ 'newGetCurrentMetricData' smart constructor.
data GetCurrentMetricData = GetCurrentMetricData'
  { -- | The grouping applied to the metrics returned. For example, when grouped
    -- by @QUEUE@, the metrics returned apply to each queue rather than
    -- aggregated for all queues.
    --
    -- -   If you group by @CHANNEL@, you should include a Channels filter.
    --     VOICE, CHAT, and TASK channels are supported.
    --
    -- -   If you group by @ROUTING_PROFILE@, you must include either a queue
    --     or routing profile filter. In addition, a routing profile filter is
    --     required for metrics @CONTACTS_SCHEDULED@, @CONTACTS_IN_QUEUE@, and
    --     @ OLDEST_CONTACT_AGE@.
    --
    -- -   If no @Grouping@ is included in the request, a summary of metrics is
    --     returned.
    GetCurrentMetricData -> Maybe [Grouping]
groupings :: Prelude.Maybe [Grouping],
    -- | The maximum number of results to return per page.
    GetCurrentMetricData -> Maybe Natural
maxResults :: Prelude.Maybe Prelude.Natural,
    -- | The token for the next set of results. Use the value returned in the
    -- previous response in the next request to retrieve the next set of
    -- results.
    --
    -- The token expires after 5 minutes from the time it is created.
    -- Subsequent requests that use the token must use the same request
    -- parameters as the request that generated the token.
    GetCurrentMetricData -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The way to sort the resulting response based on metrics. You can enter
    -- one sort criteria. By default resources are sorted based on
    -- @AGENTS_ONLINE@, @DESCENDING@. The metric collection is sorted based on
    -- the input metrics.
    --
    -- Note the following:
    --
    -- -   Sorting on @SLOTS_ACTIVE@ and @SLOTS_AVAILABLE@ is not supported.
    GetCurrentMetricData -> Maybe [CurrentMetricSortCriteria]
sortCriteria :: Prelude.Maybe [CurrentMetricSortCriteria],
    -- | The identifier of the Amazon Connect instance. You can find the
    -- instanceId in the ARN of the instance.
    GetCurrentMetricData -> Text
instanceId :: Prelude.Text,
    -- | The filters to apply to returned metrics. You can filter up to the
    -- following limits:
    --
    -- -   Queues: 100
    --
    -- -   Routing profiles: 100
    --
    -- -   Channels: 3 (VOICE, CHAT, and TASK channels are supported.)
    --
    -- Metric data is retrieved only for the resources associated with the
    -- queues or routing profiles, and by any channels included in the filter.
    -- (You cannot filter by both queue AND routing profile.) You can include
    -- both resource IDs and resource ARNs in the same request.
    --
    -- Currently tagging is only supported on the resources that are passed in
    -- the filter.
    GetCurrentMetricData -> Filters
filters :: Filters,
    -- | The metrics to retrieve. Specify the name and unit for each metric. The
    -- following metrics are available. For a description of all the metrics,
    -- see
    -- <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html Real-time Metrics Definitions>
    -- in the /Amazon Connect Administrator Guide/.
    --
    -- [AGENTS_AFTER_CONTACT_WORK]
    --     Unit: COUNT
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#aftercallwork-real-time ACW>
    --
    -- [AGENTS_AVAILABLE]
    --     Unit: COUNT
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#available-real-time Available>
    --
    -- [AGENTS_ERROR]
    --     Unit: COUNT
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#error-real-time Error>
    --
    -- [AGENTS_NON_PRODUCTIVE]
    --     Unit: COUNT
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#non-productive-time-real-time NPT (Non-Productive Time)>
    --
    -- [AGENTS_ON_CALL]
    --     Unit: COUNT
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#on-call-real-time On contact>
    --
    -- [AGENTS_ON_CONTACT]
    --     Unit: COUNT
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#on-call-real-time On contact>
    --
    -- [AGENTS_ONLINE]
    --     Unit: COUNT
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#online-real-time Online>
    --
    -- [AGENTS_STAFFED]
    --     Unit: COUNT
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#staffed-real-time Staffed>
    --
    -- [CONTACTS_IN_QUEUE]
    --     Unit: COUNT
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#in-queue-real-time In queue>
    --
    -- [CONTACTS_SCHEDULED]
    --     Unit: COUNT
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#scheduled-real-time Scheduled>
    --
    -- [OLDEST_CONTACT_AGE]
    --     Unit: SECONDS
    --
    --     When you use groupings, Unit says SECONDS and the Value is returned
    --     in SECONDS.
    --
    --     When you do not use groupings, Unit says SECONDS but the Value is
    --     returned in MILLISECONDS. For example, if you get a response like
    --     this:
    --
    --     @{ \"Metric\": { \"Name\": \"OLDEST_CONTACT_AGE\", \"Unit\": \"SECONDS\" }, \"Value\": 24113.0 @}
    --
    --     The actual OLDEST_CONTACT_AGE is 24 seconds.
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#oldest-real-time Oldest>
    --
    -- [SLOTS_ACTIVE]
    --     Unit: COUNT
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#active-real-time Active>
    --
    -- [SLOTS_AVAILABLE]
    --     Unit: COUNT
    --
    --     Name in real-time metrics report:
    --     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#availability-real-time Availability>
    GetCurrentMetricData -> [CurrentMetric]
currentMetrics :: [CurrentMetric]
  }
  deriving (GetCurrentMetricData -> GetCurrentMetricData -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetCurrentMetricData -> GetCurrentMetricData -> Bool
$c/= :: GetCurrentMetricData -> GetCurrentMetricData -> Bool
== :: GetCurrentMetricData -> GetCurrentMetricData -> Bool
$c== :: GetCurrentMetricData -> GetCurrentMetricData -> Bool
Prelude.Eq, ReadPrec [GetCurrentMetricData]
ReadPrec GetCurrentMetricData
Int -> ReadS GetCurrentMetricData
ReadS [GetCurrentMetricData]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetCurrentMetricData]
$creadListPrec :: ReadPrec [GetCurrentMetricData]
readPrec :: ReadPrec GetCurrentMetricData
$creadPrec :: ReadPrec GetCurrentMetricData
readList :: ReadS [GetCurrentMetricData]
$creadList :: ReadS [GetCurrentMetricData]
readsPrec :: Int -> ReadS GetCurrentMetricData
$creadsPrec :: Int -> ReadS GetCurrentMetricData
Prelude.Read, Int -> GetCurrentMetricData -> ShowS
[GetCurrentMetricData] -> ShowS
GetCurrentMetricData -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetCurrentMetricData] -> ShowS
$cshowList :: [GetCurrentMetricData] -> ShowS
show :: GetCurrentMetricData -> String
$cshow :: GetCurrentMetricData -> String
showsPrec :: Int -> GetCurrentMetricData -> ShowS
$cshowsPrec :: Int -> GetCurrentMetricData -> ShowS
Prelude.Show, forall x. Rep GetCurrentMetricData x -> GetCurrentMetricData
forall x. GetCurrentMetricData -> Rep GetCurrentMetricData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetCurrentMetricData x -> GetCurrentMetricData
$cfrom :: forall x. GetCurrentMetricData -> Rep GetCurrentMetricData x
Prelude.Generic)

-- |
-- Create a value of 'GetCurrentMetricData' 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:
--
-- 'groupings', 'getCurrentMetricData_groupings' - The grouping applied to the metrics returned. For example, when grouped
-- by @QUEUE@, the metrics returned apply to each queue rather than
-- aggregated for all queues.
--
-- -   If you group by @CHANNEL@, you should include a Channels filter.
--     VOICE, CHAT, and TASK channels are supported.
--
-- -   If you group by @ROUTING_PROFILE@, you must include either a queue
--     or routing profile filter. In addition, a routing profile filter is
--     required for metrics @CONTACTS_SCHEDULED@, @CONTACTS_IN_QUEUE@, and
--     @ OLDEST_CONTACT_AGE@.
--
-- -   If no @Grouping@ is included in the request, a summary of metrics is
--     returned.
--
-- 'maxResults', 'getCurrentMetricData_maxResults' - The maximum number of results to return per page.
--
-- 'nextToken', 'getCurrentMetricData_nextToken' - The token for the next set of results. Use the value returned in the
-- previous response in the next request to retrieve the next set of
-- results.
--
-- The token expires after 5 minutes from the time it is created.
-- Subsequent requests that use the token must use the same request
-- parameters as the request that generated the token.
--
-- 'sortCriteria', 'getCurrentMetricData_sortCriteria' - The way to sort the resulting response based on metrics. You can enter
-- one sort criteria. By default resources are sorted based on
-- @AGENTS_ONLINE@, @DESCENDING@. The metric collection is sorted based on
-- the input metrics.
--
-- Note the following:
--
-- -   Sorting on @SLOTS_ACTIVE@ and @SLOTS_AVAILABLE@ is not supported.
--
-- 'instanceId', 'getCurrentMetricData_instanceId' - The identifier of the Amazon Connect instance. You can find the
-- instanceId in the ARN of the instance.
--
-- 'filters', 'getCurrentMetricData_filters' - The filters to apply to returned metrics. You can filter up to the
-- following limits:
--
-- -   Queues: 100
--
-- -   Routing profiles: 100
--
-- -   Channels: 3 (VOICE, CHAT, and TASK channels are supported.)
--
-- Metric data is retrieved only for the resources associated with the
-- queues or routing profiles, and by any channels included in the filter.
-- (You cannot filter by both queue AND routing profile.) You can include
-- both resource IDs and resource ARNs in the same request.
--
-- Currently tagging is only supported on the resources that are passed in
-- the filter.
--
-- 'currentMetrics', 'getCurrentMetricData_currentMetrics' - The metrics to retrieve. Specify the name and unit for each metric. The
-- following metrics are available. For a description of all the metrics,
-- see
-- <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html Real-time Metrics Definitions>
-- in the /Amazon Connect Administrator Guide/.
--
-- [AGENTS_AFTER_CONTACT_WORK]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#aftercallwork-real-time ACW>
--
-- [AGENTS_AVAILABLE]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#available-real-time Available>
--
-- [AGENTS_ERROR]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#error-real-time Error>
--
-- [AGENTS_NON_PRODUCTIVE]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#non-productive-time-real-time NPT (Non-Productive Time)>
--
-- [AGENTS_ON_CALL]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#on-call-real-time On contact>
--
-- [AGENTS_ON_CONTACT]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#on-call-real-time On contact>
--
-- [AGENTS_ONLINE]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#online-real-time Online>
--
-- [AGENTS_STAFFED]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#staffed-real-time Staffed>
--
-- [CONTACTS_IN_QUEUE]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#in-queue-real-time In queue>
--
-- [CONTACTS_SCHEDULED]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#scheduled-real-time Scheduled>
--
-- [OLDEST_CONTACT_AGE]
--     Unit: SECONDS
--
--     When you use groupings, Unit says SECONDS and the Value is returned
--     in SECONDS.
--
--     When you do not use groupings, Unit says SECONDS but the Value is
--     returned in MILLISECONDS. For example, if you get a response like
--     this:
--
--     @{ \"Metric\": { \"Name\": \"OLDEST_CONTACT_AGE\", \"Unit\": \"SECONDS\" }, \"Value\": 24113.0 @}
--
--     The actual OLDEST_CONTACT_AGE is 24 seconds.
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#oldest-real-time Oldest>
--
-- [SLOTS_ACTIVE]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#active-real-time Active>
--
-- [SLOTS_AVAILABLE]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#availability-real-time Availability>
newGetCurrentMetricData ::
  -- | 'instanceId'
  Prelude.Text ->
  -- | 'filters'
  Filters ->
  GetCurrentMetricData
newGetCurrentMetricData :: Text -> Filters -> GetCurrentMetricData
newGetCurrentMetricData Text
pInstanceId_ Filters
pFilters_ =
  GetCurrentMetricData'
    { $sel:groupings:GetCurrentMetricData' :: Maybe [Grouping]
groupings = forall a. Maybe a
Prelude.Nothing,
      $sel:maxResults:GetCurrentMetricData' :: Maybe Natural
maxResults = forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:GetCurrentMetricData' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:sortCriteria:GetCurrentMetricData' :: Maybe [CurrentMetricSortCriteria]
sortCriteria = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceId:GetCurrentMetricData' :: Text
instanceId = Text
pInstanceId_,
      $sel:filters:GetCurrentMetricData' :: Filters
filters = Filters
pFilters_,
      $sel:currentMetrics:GetCurrentMetricData' :: [CurrentMetric]
currentMetrics = forall a. Monoid a => a
Prelude.mempty
    }

-- | The grouping applied to the metrics returned. For example, when grouped
-- by @QUEUE@, the metrics returned apply to each queue rather than
-- aggregated for all queues.
--
-- -   If you group by @CHANNEL@, you should include a Channels filter.
--     VOICE, CHAT, and TASK channels are supported.
--
-- -   If you group by @ROUTING_PROFILE@, you must include either a queue
--     or routing profile filter. In addition, a routing profile filter is
--     required for metrics @CONTACTS_SCHEDULED@, @CONTACTS_IN_QUEUE@, and
--     @ OLDEST_CONTACT_AGE@.
--
-- -   If no @Grouping@ is included in the request, a summary of metrics is
--     returned.
getCurrentMetricData_groupings :: Lens.Lens' GetCurrentMetricData (Prelude.Maybe [Grouping])
getCurrentMetricData_groupings :: Lens' GetCurrentMetricData (Maybe [Grouping])
getCurrentMetricData_groupings = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetCurrentMetricData' {Maybe [Grouping]
groupings :: Maybe [Grouping]
$sel:groupings:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe [Grouping]
groupings} -> Maybe [Grouping]
groupings) (\s :: GetCurrentMetricData
s@GetCurrentMetricData' {} Maybe [Grouping]
a -> GetCurrentMetricData
s {$sel:groupings:GetCurrentMetricData' :: Maybe [Grouping]
groupings = Maybe [Grouping]
a} :: GetCurrentMetricData) 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 maximum number of results to return per page.
getCurrentMetricData_maxResults :: Lens.Lens' GetCurrentMetricData (Prelude.Maybe Prelude.Natural)
getCurrentMetricData_maxResults :: Lens' GetCurrentMetricData (Maybe Natural)
getCurrentMetricData_maxResults = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetCurrentMetricData' {Maybe Natural
maxResults :: Maybe Natural
$sel:maxResults:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe Natural
maxResults} -> Maybe Natural
maxResults) (\s :: GetCurrentMetricData
s@GetCurrentMetricData' {} Maybe Natural
a -> GetCurrentMetricData
s {$sel:maxResults:GetCurrentMetricData' :: Maybe Natural
maxResults = Maybe Natural
a} :: GetCurrentMetricData)

-- | The token for the next set of results. Use the value returned in the
-- previous response in the next request to retrieve the next set of
-- results.
--
-- The token expires after 5 minutes from the time it is created.
-- Subsequent requests that use the token must use the same request
-- parameters as the request that generated the token.
getCurrentMetricData_nextToken :: Lens.Lens' GetCurrentMetricData (Prelude.Maybe Prelude.Text)
getCurrentMetricData_nextToken :: Lens' GetCurrentMetricData (Maybe Text)
getCurrentMetricData_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetCurrentMetricData' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: GetCurrentMetricData
s@GetCurrentMetricData' {} Maybe Text
a -> GetCurrentMetricData
s {$sel:nextToken:GetCurrentMetricData' :: Maybe Text
nextToken = Maybe Text
a} :: GetCurrentMetricData)

-- | The way to sort the resulting response based on metrics. You can enter
-- one sort criteria. By default resources are sorted based on
-- @AGENTS_ONLINE@, @DESCENDING@. The metric collection is sorted based on
-- the input metrics.
--
-- Note the following:
--
-- -   Sorting on @SLOTS_ACTIVE@ and @SLOTS_AVAILABLE@ is not supported.
getCurrentMetricData_sortCriteria :: Lens.Lens' GetCurrentMetricData (Prelude.Maybe [CurrentMetricSortCriteria])
getCurrentMetricData_sortCriteria :: Lens' GetCurrentMetricData (Maybe [CurrentMetricSortCriteria])
getCurrentMetricData_sortCriteria = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetCurrentMetricData' {Maybe [CurrentMetricSortCriteria]
sortCriteria :: Maybe [CurrentMetricSortCriteria]
$sel:sortCriteria:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe [CurrentMetricSortCriteria]
sortCriteria} -> Maybe [CurrentMetricSortCriteria]
sortCriteria) (\s :: GetCurrentMetricData
s@GetCurrentMetricData' {} Maybe [CurrentMetricSortCriteria]
a -> GetCurrentMetricData
s {$sel:sortCriteria:GetCurrentMetricData' :: Maybe [CurrentMetricSortCriteria]
sortCriteria = Maybe [CurrentMetricSortCriteria]
a} :: GetCurrentMetricData) 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 identifier of the Amazon Connect instance. You can find the
-- instanceId in the ARN of the instance.
getCurrentMetricData_instanceId :: Lens.Lens' GetCurrentMetricData Prelude.Text
getCurrentMetricData_instanceId :: Lens' GetCurrentMetricData Text
getCurrentMetricData_instanceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetCurrentMetricData' {Text
instanceId :: Text
$sel:instanceId:GetCurrentMetricData' :: GetCurrentMetricData -> Text
instanceId} -> Text
instanceId) (\s :: GetCurrentMetricData
s@GetCurrentMetricData' {} Text
a -> GetCurrentMetricData
s {$sel:instanceId:GetCurrentMetricData' :: Text
instanceId = Text
a} :: GetCurrentMetricData)

-- | The filters to apply to returned metrics. You can filter up to the
-- following limits:
--
-- -   Queues: 100
--
-- -   Routing profiles: 100
--
-- -   Channels: 3 (VOICE, CHAT, and TASK channels are supported.)
--
-- Metric data is retrieved only for the resources associated with the
-- queues or routing profiles, and by any channels included in the filter.
-- (You cannot filter by both queue AND routing profile.) You can include
-- both resource IDs and resource ARNs in the same request.
--
-- Currently tagging is only supported on the resources that are passed in
-- the filter.
getCurrentMetricData_filters :: Lens.Lens' GetCurrentMetricData Filters
getCurrentMetricData_filters :: Lens' GetCurrentMetricData Filters
getCurrentMetricData_filters = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetCurrentMetricData' {Filters
filters :: Filters
$sel:filters:GetCurrentMetricData' :: GetCurrentMetricData -> Filters
filters} -> Filters
filters) (\s :: GetCurrentMetricData
s@GetCurrentMetricData' {} Filters
a -> GetCurrentMetricData
s {$sel:filters:GetCurrentMetricData' :: Filters
filters = Filters
a} :: GetCurrentMetricData)

-- | The metrics to retrieve. Specify the name and unit for each metric. The
-- following metrics are available. For a description of all the metrics,
-- see
-- <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html Real-time Metrics Definitions>
-- in the /Amazon Connect Administrator Guide/.
--
-- [AGENTS_AFTER_CONTACT_WORK]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#aftercallwork-real-time ACW>
--
-- [AGENTS_AVAILABLE]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#available-real-time Available>
--
-- [AGENTS_ERROR]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#error-real-time Error>
--
-- [AGENTS_NON_PRODUCTIVE]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#non-productive-time-real-time NPT (Non-Productive Time)>
--
-- [AGENTS_ON_CALL]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#on-call-real-time On contact>
--
-- [AGENTS_ON_CONTACT]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#on-call-real-time On contact>
--
-- [AGENTS_ONLINE]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#online-real-time Online>
--
-- [AGENTS_STAFFED]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#staffed-real-time Staffed>
--
-- [CONTACTS_IN_QUEUE]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#in-queue-real-time In queue>
--
-- [CONTACTS_SCHEDULED]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#scheduled-real-time Scheduled>
--
-- [OLDEST_CONTACT_AGE]
--     Unit: SECONDS
--
--     When you use groupings, Unit says SECONDS and the Value is returned
--     in SECONDS.
--
--     When you do not use groupings, Unit says SECONDS but the Value is
--     returned in MILLISECONDS. For example, if you get a response like
--     this:
--
--     @{ \"Metric\": { \"Name\": \"OLDEST_CONTACT_AGE\", \"Unit\": \"SECONDS\" }, \"Value\": 24113.0 @}
--
--     The actual OLDEST_CONTACT_AGE is 24 seconds.
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#oldest-real-time Oldest>
--
-- [SLOTS_ACTIVE]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#active-real-time Active>
--
-- [SLOTS_AVAILABLE]
--     Unit: COUNT
--
--     Name in real-time metrics report:
--     <https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#availability-real-time Availability>
getCurrentMetricData_currentMetrics :: Lens.Lens' GetCurrentMetricData [CurrentMetric]
getCurrentMetricData_currentMetrics :: Lens' GetCurrentMetricData [CurrentMetric]
getCurrentMetricData_currentMetrics = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetCurrentMetricData' {[CurrentMetric]
currentMetrics :: [CurrentMetric]
$sel:currentMetrics:GetCurrentMetricData' :: GetCurrentMetricData -> [CurrentMetric]
currentMetrics} -> [CurrentMetric]
currentMetrics) (\s :: GetCurrentMetricData
s@GetCurrentMetricData' {} [CurrentMetric]
a -> GetCurrentMetricData
s {$sel:currentMetrics:GetCurrentMetricData' :: [CurrentMetric]
currentMetrics = [CurrentMetric]
a} :: GetCurrentMetricData) 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 GetCurrentMetricData where
  type
    AWSResponse GetCurrentMetricData =
      GetCurrentMetricDataResponse
  request :: (Service -> Service)
-> GetCurrentMetricData -> Request GetCurrentMetricData
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 GetCurrentMetricData
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetCurrentMetricData)))
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 Integer
-> Maybe POSIX
-> Maybe [CurrentMetricResult]
-> Maybe Text
-> Int
-> GetCurrentMetricDataResponse
GetCurrentMetricDataResponse'
            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
"ApproximateTotalCount")
            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
"DataSnapshotTime")
            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
"MetricResults" 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
"NextToken")
            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 GetCurrentMetricData where
  hashWithSalt :: Int -> GetCurrentMetricData -> Int
hashWithSalt Int
_salt GetCurrentMetricData' {[CurrentMetric]
Maybe Natural
Maybe [Grouping]
Maybe [CurrentMetricSortCriteria]
Maybe Text
Text
Filters
currentMetrics :: [CurrentMetric]
filters :: Filters
instanceId :: Text
sortCriteria :: Maybe [CurrentMetricSortCriteria]
nextToken :: Maybe Text
maxResults :: Maybe Natural
groupings :: Maybe [Grouping]
$sel:currentMetrics:GetCurrentMetricData' :: GetCurrentMetricData -> [CurrentMetric]
$sel:filters:GetCurrentMetricData' :: GetCurrentMetricData -> Filters
$sel:instanceId:GetCurrentMetricData' :: GetCurrentMetricData -> Text
$sel:sortCriteria:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe [CurrentMetricSortCriteria]
$sel:nextToken:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe Text
$sel:maxResults:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe Natural
$sel:groupings:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe [Grouping]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Grouping]
groupings
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
maxResults
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [CurrentMetricSortCriteria]
sortCriteria
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
instanceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Filters
filters
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [CurrentMetric]
currentMetrics

instance Prelude.NFData GetCurrentMetricData where
  rnf :: GetCurrentMetricData -> ()
rnf GetCurrentMetricData' {[CurrentMetric]
Maybe Natural
Maybe [Grouping]
Maybe [CurrentMetricSortCriteria]
Maybe Text
Text
Filters
currentMetrics :: [CurrentMetric]
filters :: Filters
instanceId :: Text
sortCriteria :: Maybe [CurrentMetricSortCriteria]
nextToken :: Maybe Text
maxResults :: Maybe Natural
groupings :: Maybe [Grouping]
$sel:currentMetrics:GetCurrentMetricData' :: GetCurrentMetricData -> [CurrentMetric]
$sel:filters:GetCurrentMetricData' :: GetCurrentMetricData -> Filters
$sel:instanceId:GetCurrentMetricData' :: GetCurrentMetricData -> Text
$sel:sortCriteria:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe [CurrentMetricSortCriteria]
$sel:nextToken:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe Text
$sel:maxResults:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe Natural
$sel:groupings:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe [Grouping]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Grouping]
groupings
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
maxResults
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [CurrentMetricSortCriteria]
sortCriteria
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
instanceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Filters
filters
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [CurrentMetric]
currentMetrics

instance Data.ToHeaders GetCurrentMetricData where
  toHeaders :: GetCurrentMetricData -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON GetCurrentMetricData where
  toJSON :: GetCurrentMetricData -> Value
toJSON GetCurrentMetricData' {[CurrentMetric]
Maybe Natural
Maybe [Grouping]
Maybe [CurrentMetricSortCriteria]
Maybe Text
Text
Filters
currentMetrics :: [CurrentMetric]
filters :: Filters
instanceId :: Text
sortCriteria :: Maybe [CurrentMetricSortCriteria]
nextToken :: Maybe Text
maxResults :: Maybe Natural
groupings :: Maybe [Grouping]
$sel:currentMetrics:GetCurrentMetricData' :: GetCurrentMetricData -> [CurrentMetric]
$sel:filters:GetCurrentMetricData' :: GetCurrentMetricData -> Filters
$sel:instanceId:GetCurrentMetricData' :: GetCurrentMetricData -> Text
$sel:sortCriteria:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe [CurrentMetricSortCriteria]
$sel:nextToken:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe Text
$sel:maxResults:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe Natural
$sel:groupings:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe [Grouping]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Groupings" 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 [Grouping]
groupings,
            (Key
"MaxResults" 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 Natural
maxResults,
            (Key
"NextToken" 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 Text
nextToken,
            (Key
"SortCriteria" 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 [CurrentMetricSortCriteria]
sortCriteria,
            forall a. a -> Maybe a
Prelude.Just (Key
"Filters" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Filters
filters),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"CurrentMetrics" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= [CurrentMetric]
currentMetrics)
          ]
      )

instance Data.ToPath GetCurrentMetricData where
  toPath :: GetCurrentMetricData -> ByteString
toPath GetCurrentMetricData' {[CurrentMetric]
Maybe Natural
Maybe [Grouping]
Maybe [CurrentMetricSortCriteria]
Maybe Text
Text
Filters
currentMetrics :: [CurrentMetric]
filters :: Filters
instanceId :: Text
sortCriteria :: Maybe [CurrentMetricSortCriteria]
nextToken :: Maybe Text
maxResults :: Maybe Natural
groupings :: Maybe [Grouping]
$sel:currentMetrics:GetCurrentMetricData' :: GetCurrentMetricData -> [CurrentMetric]
$sel:filters:GetCurrentMetricData' :: GetCurrentMetricData -> Filters
$sel:instanceId:GetCurrentMetricData' :: GetCurrentMetricData -> Text
$sel:sortCriteria:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe [CurrentMetricSortCriteria]
$sel:nextToken:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe Text
$sel:maxResults:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe Natural
$sel:groupings:GetCurrentMetricData' :: GetCurrentMetricData -> Maybe [Grouping]
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/metrics/current/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
instanceId]

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

-- | /See:/ 'newGetCurrentMetricDataResponse' smart constructor.
data GetCurrentMetricDataResponse = GetCurrentMetricDataResponse'
  { -- | The total count of the result, regardless of the current page size.
    GetCurrentMetricDataResponse -> Maybe Integer
approximateTotalCount :: Prelude.Maybe Prelude.Integer,
    -- | The time at which the metrics were retrieved and cached for pagination.
    GetCurrentMetricDataResponse -> Maybe POSIX
dataSnapshotTime :: Prelude.Maybe Data.POSIX,
    -- | Information about the real-time metrics.
    GetCurrentMetricDataResponse -> Maybe [CurrentMetricResult]
metricResults :: Prelude.Maybe [CurrentMetricResult],
    -- | If there are additional results, this is the token for the next set of
    -- results.
    --
    -- The token expires after 5 minutes from the time it is created.
    -- Subsequent requests that use the token must use the same request
    -- parameters as the request that generated the token.
    GetCurrentMetricDataResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GetCurrentMetricDataResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetCurrentMetricDataResponse
-> GetCurrentMetricDataResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetCurrentMetricDataResponse
-> GetCurrentMetricDataResponse -> Bool
$c/= :: GetCurrentMetricDataResponse
-> GetCurrentMetricDataResponse -> Bool
== :: GetCurrentMetricDataResponse
-> GetCurrentMetricDataResponse -> Bool
$c== :: GetCurrentMetricDataResponse
-> GetCurrentMetricDataResponse -> Bool
Prelude.Eq, ReadPrec [GetCurrentMetricDataResponse]
ReadPrec GetCurrentMetricDataResponse
Int -> ReadS GetCurrentMetricDataResponse
ReadS [GetCurrentMetricDataResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetCurrentMetricDataResponse]
$creadListPrec :: ReadPrec [GetCurrentMetricDataResponse]
readPrec :: ReadPrec GetCurrentMetricDataResponse
$creadPrec :: ReadPrec GetCurrentMetricDataResponse
readList :: ReadS [GetCurrentMetricDataResponse]
$creadList :: ReadS [GetCurrentMetricDataResponse]
readsPrec :: Int -> ReadS GetCurrentMetricDataResponse
$creadsPrec :: Int -> ReadS GetCurrentMetricDataResponse
Prelude.Read, Int -> GetCurrentMetricDataResponse -> ShowS
[GetCurrentMetricDataResponse] -> ShowS
GetCurrentMetricDataResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetCurrentMetricDataResponse] -> ShowS
$cshowList :: [GetCurrentMetricDataResponse] -> ShowS
show :: GetCurrentMetricDataResponse -> String
$cshow :: GetCurrentMetricDataResponse -> String
showsPrec :: Int -> GetCurrentMetricDataResponse -> ShowS
$cshowsPrec :: Int -> GetCurrentMetricDataResponse -> ShowS
Prelude.Show, forall x.
Rep GetCurrentMetricDataResponse x -> GetCurrentMetricDataResponse
forall x.
GetCurrentMetricDataResponse -> Rep GetCurrentMetricDataResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetCurrentMetricDataResponse x -> GetCurrentMetricDataResponse
$cfrom :: forall x.
GetCurrentMetricDataResponse -> Rep GetCurrentMetricDataResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetCurrentMetricDataResponse' 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:
--
-- 'approximateTotalCount', 'getCurrentMetricDataResponse_approximateTotalCount' - The total count of the result, regardless of the current page size.
--
-- 'dataSnapshotTime', 'getCurrentMetricDataResponse_dataSnapshotTime' - The time at which the metrics were retrieved and cached for pagination.
--
-- 'metricResults', 'getCurrentMetricDataResponse_metricResults' - Information about the real-time metrics.
--
-- 'nextToken', 'getCurrentMetricDataResponse_nextToken' - If there are additional results, this is the token for the next set of
-- results.
--
-- The token expires after 5 minutes from the time it is created.
-- Subsequent requests that use the token must use the same request
-- parameters as the request that generated the token.
--
-- 'httpStatus', 'getCurrentMetricDataResponse_httpStatus' - The response's http status code.
newGetCurrentMetricDataResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetCurrentMetricDataResponse
newGetCurrentMetricDataResponse :: Int -> GetCurrentMetricDataResponse
newGetCurrentMetricDataResponse Int
pHttpStatus_ =
  GetCurrentMetricDataResponse'
    { $sel:approximateTotalCount:GetCurrentMetricDataResponse' :: Maybe Integer
approximateTotalCount =
        forall a. Maybe a
Prelude.Nothing,
      $sel:dataSnapshotTime:GetCurrentMetricDataResponse' :: Maybe POSIX
dataSnapshotTime = forall a. Maybe a
Prelude.Nothing,
      $sel:metricResults:GetCurrentMetricDataResponse' :: Maybe [CurrentMetricResult]
metricResults = forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:GetCurrentMetricDataResponse' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetCurrentMetricDataResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The total count of the result, regardless of the current page size.
getCurrentMetricDataResponse_approximateTotalCount :: Lens.Lens' GetCurrentMetricDataResponse (Prelude.Maybe Prelude.Integer)
getCurrentMetricDataResponse_approximateTotalCount :: Lens' GetCurrentMetricDataResponse (Maybe Integer)
getCurrentMetricDataResponse_approximateTotalCount = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetCurrentMetricDataResponse' {Maybe Integer
approximateTotalCount :: Maybe Integer
$sel:approximateTotalCount:GetCurrentMetricDataResponse' :: GetCurrentMetricDataResponse -> Maybe Integer
approximateTotalCount} -> Maybe Integer
approximateTotalCount) (\s :: GetCurrentMetricDataResponse
s@GetCurrentMetricDataResponse' {} Maybe Integer
a -> GetCurrentMetricDataResponse
s {$sel:approximateTotalCount:GetCurrentMetricDataResponse' :: Maybe Integer
approximateTotalCount = Maybe Integer
a} :: GetCurrentMetricDataResponse)

-- | The time at which the metrics were retrieved and cached for pagination.
getCurrentMetricDataResponse_dataSnapshotTime :: Lens.Lens' GetCurrentMetricDataResponse (Prelude.Maybe Prelude.UTCTime)
getCurrentMetricDataResponse_dataSnapshotTime :: Lens' GetCurrentMetricDataResponse (Maybe UTCTime)
getCurrentMetricDataResponse_dataSnapshotTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetCurrentMetricDataResponse' {Maybe POSIX
dataSnapshotTime :: Maybe POSIX
$sel:dataSnapshotTime:GetCurrentMetricDataResponse' :: GetCurrentMetricDataResponse -> Maybe POSIX
dataSnapshotTime} -> Maybe POSIX
dataSnapshotTime) (\s :: GetCurrentMetricDataResponse
s@GetCurrentMetricDataResponse' {} Maybe POSIX
a -> GetCurrentMetricDataResponse
s {$sel:dataSnapshotTime:GetCurrentMetricDataResponse' :: Maybe POSIX
dataSnapshotTime = Maybe POSIX
a} :: GetCurrentMetricDataResponse) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | Information about the real-time metrics.
getCurrentMetricDataResponse_metricResults :: Lens.Lens' GetCurrentMetricDataResponse (Prelude.Maybe [CurrentMetricResult])
getCurrentMetricDataResponse_metricResults :: Lens' GetCurrentMetricDataResponse (Maybe [CurrentMetricResult])
getCurrentMetricDataResponse_metricResults = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetCurrentMetricDataResponse' {Maybe [CurrentMetricResult]
metricResults :: Maybe [CurrentMetricResult]
$sel:metricResults:GetCurrentMetricDataResponse' :: GetCurrentMetricDataResponse -> Maybe [CurrentMetricResult]
metricResults} -> Maybe [CurrentMetricResult]
metricResults) (\s :: GetCurrentMetricDataResponse
s@GetCurrentMetricDataResponse' {} Maybe [CurrentMetricResult]
a -> GetCurrentMetricDataResponse
s {$sel:metricResults:GetCurrentMetricDataResponse' :: Maybe [CurrentMetricResult]
metricResults = Maybe [CurrentMetricResult]
a} :: GetCurrentMetricDataResponse) 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

-- | If there are additional results, this is the token for the next set of
-- results.
--
-- The token expires after 5 minutes from the time it is created.
-- Subsequent requests that use the token must use the same request
-- parameters as the request that generated the token.
getCurrentMetricDataResponse_nextToken :: Lens.Lens' GetCurrentMetricDataResponse (Prelude.Maybe Prelude.Text)
getCurrentMetricDataResponse_nextToken :: Lens' GetCurrentMetricDataResponse (Maybe Text)
getCurrentMetricDataResponse_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetCurrentMetricDataResponse' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:GetCurrentMetricDataResponse' :: GetCurrentMetricDataResponse -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: GetCurrentMetricDataResponse
s@GetCurrentMetricDataResponse' {} Maybe Text
a -> GetCurrentMetricDataResponse
s {$sel:nextToken:GetCurrentMetricDataResponse' :: Maybe Text
nextToken = Maybe Text
a} :: GetCurrentMetricDataResponse)

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

instance Prelude.NFData GetCurrentMetricDataResponse where
  rnf :: GetCurrentMetricDataResponse -> ()
rnf GetCurrentMetricDataResponse' {Int
Maybe Integer
Maybe [CurrentMetricResult]
Maybe Text
Maybe POSIX
httpStatus :: Int
nextToken :: Maybe Text
metricResults :: Maybe [CurrentMetricResult]
dataSnapshotTime :: Maybe POSIX
approximateTotalCount :: Maybe Integer
$sel:httpStatus:GetCurrentMetricDataResponse' :: GetCurrentMetricDataResponse -> Int
$sel:nextToken:GetCurrentMetricDataResponse' :: GetCurrentMetricDataResponse -> Maybe Text
$sel:metricResults:GetCurrentMetricDataResponse' :: GetCurrentMetricDataResponse -> Maybe [CurrentMetricResult]
$sel:dataSnapshotTime:GetCurrentMetricDataResponse' :: GetCurrentMetricDataResponse -> Maybe POSIX
$sel:approximateTotalCount:GetCurrentMetricDataResponse' :: GetCurrentMetricDataResponse -> Maybe Integer
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
approximateTotalCount
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
dataSnapshotTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [CurrentMetricResult]
metricResults
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus