nakadi-client-0.6.0.0: src/Network/Nakadi/Subscriptions/Stats.hs
{-|
Module : Network.Nakadi.Subscriptions.Stats
Description : Implementation of Nakadi Subscription Stats API
Copyright : (c) Moritz Clasmeier 2017, 2018
License : BSD3
Maintainer : mtesseract@silverratio.net
Stability : experimental
Portability : POSIX
This module implements the @\/subscriptions\/SUBSCRIPTIONS\/stats@
API.
-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RecordWildCards #-}
module Network.Nakadi.Subscriptions.Stats
( subscriptionStats'
, subscriptionStats
)
where
import Network.Nakadi.Internal.Prelude
import Control.Lens
import Data.Aeson
import qualified Data.Map.Strict as Map
import Network.Nakadi.Internal.Conversions
import Network.Nakadi.Internal.Http
import qualified Network.Nakadi.Internal.Lenses
as L
import Network.Nakadi.Internal.Util
path :: SubscriptionId -> ByteString
path subscriptionId =
"/subscriptions/" <> subscriptionIdToByteString subscriptionId <> "/stats"
-- | @GET@ to @\/subscriptions\/SUBSCRIPTION\/stats@. Low level
-- interface for Subscriptions Statistics retrieval.
subscriptionStats'
:: MonadNakadi b m
=> SubscriptionId -- ^ Subscription ID
-> Bool -- ^ Whether to show time lag.
-> m SubscriptionStats -- ^ Subscription Statistics
subscriptionStats' subscriptionId showTimeLag = httpJsonBody
ok200
[(status404, errorSubscriptionNotFound)]
( setRequestMethod "GET"
. setRequestPath (path subscriptionId)
. setRequestQueryParameters queryParameters
)
where queryParameters = [("show_time_lag", encodeStrict (Bool showTimeLag))]
-- | @GET@ to @\/subscriptions\/SUBSCRIPTION\/stats@. High level
-- interface for Subscription Statistics retrieval.
subscriptionStats
:: MonadNakadi b m
=> SubscriptionId -- ^ Subscription ID
-> m (Map EventTypeName [PartitionStat]) -- ^ Subscription
-- Statistics as a 'Map'.
subscriptionStats subscriptionId = do
subscriptionStatsConf <- nakadiAsk <&> (^. L.subscriptionStats)
items <- subscriptionStats' subscriptionId (showTimeLag subscriptionStatsConf) <&> view L.items
return
. Map.fromList
. map (\SubscriptionEventTypeStats {..} -> (_eventType, _partitions))
$ items
where
showTimeLag :: Maybe SubscriptionStatsConf -> Bool
showTimeLag Nothing = False
showTimeLag (Just conf) = conf ^. L.showTimeLag