{-| 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