nakadi-client-0.5.0.0: src/Network/Nakadi/Subscriptions/Stats.hs
{-|
Module : Network.Nakadi.Subscriptions.Stats
Description : Implementation of Nakadi Subscription Stats API
Copyright : (c) Moritz Schulte 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 qualified Data.Map.Strict as Map
import Network.Nakadi.Internal.Conversions
import Network.Nakadi.Internal.Http
import qualified Network.Nakadi.Internal.Lenses as L
path :: SubscriptionId -> ByteString
path subscriptionId =
"/subscriptions/"
<> subscriptionIdToByteString subscriptionId
<> "/cursors"
-- | @GET@ to @\/subscriptions\/SUBSCRIPTION\/cursors@. Low level
-- interface for Subscriptions Statistics retrieval.
subscriptionStats' ::
MonadNakadi b m
=> SubscriptionId -- ^ Subscription ID
-> m SubscriptionEventTypeStatsResult -- ^ Subscription Statistics
subscriptionStats' subscriptionId =
httpJsonBody ok200 [(status404, errorSubscriptionNotFound)]
(setRequestMethod "GET" . setRequestPath (path subscriptionId))
-- | @GET@ to @\/subscriptions\/SUBSCRIPTION\/cursors@. 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
items <- subscriptionStats' subscriptionId <&> view L.items
return . Map.fromList . map (\SubscriptionEventTypeStats { .. } -> (_eventType, _partitions)) $ items