freckle-app-1.5.0.0: library/Network/Wai/Middleware/Stats.hs
module Network.Wai.Middleware.Stats
( requestStats
) where
import Freckle.App.Prelude
import Control.Monad.Reader (runReaderT)
import Freckle.App.Stats (HasStatsClient)
import qualified Freckle.App.Stats as Stats
import Network.HTTP.Types.Status (Status(..))
import Network.Wai (Middleware, Request, requestMethod, responseStatus)
requestStats
:: HasStatsClient env => env -> (Request -> [(Text, Text)]) -> Middleware
requestStats env getTags app req respond = do
start <- getCurrentTime
app req $ \res -> do
let
tags =
getTags req
<> [ ("method", decodeUtf8 $ requestMethod req)
, ("status", pack $ show $ statusCode $ responseStatus res)
]
flip runReaderT env $ Stats.tagged tags $ do
Stats.increment "requests"
Stats.histogramSinceMs "response_time_ms" start
respond res