{-# 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"
subscriptionStats'
:: MonadNakadi b m
=> SubscriptionId
-> Bool
-> m SubscriptionStats
subscriptionStats' subscriptionId showTimeLag = httpJsonBody
ok200
[(status404, errorSubscriptionNotFound)]
( setRequestMethod "GET"
. setRequestPath (path subscriptionId)
. setRequestQueryParameters queryParameters
)
where queryParameters = [("show_time_lag", encodeStrict (Bool showTimeLag))]
subscriptionStats
:: MonadNakadi b m
=> SubscriptionId
-> m (Map EventTypeName [PartitionStat])
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