packages feed

wai-middleware-metrics 0.2.0 → 0.2.1

raw patch · 2 files changed

+60/−2 lines, 2 filesdep +criteriondep ~basedep ~waiPVP ok

version bump matches the API change (PVP)

Dependencies added: criterion

Dependency ranges changed: base, wai

API changes (from Hackage documentation)

Files

+ Benchmark.hs view
@@ -0,0 +1,42 @@+{-# LANGUAGE OverloadedStrings #-}++import Criterion.Main+import System.Metrics (newStore)+import Network.Wai.Metrics+import Web.Scotty (scottyApp, middleware, get, html)+import Network.Wai (Application)+import Control.Monad (replicateM_, when)+import Data.Int (Int64)+import qualified System.Metrics.Counter as Counter+import qualified Network.Wai.Test as WT+import qualified Data.ByteString as BS++testServer :: Bool -> (Application -> IO a) -> Int -> IO WaiMetrics+testServer measure action times = do+  store <- newStore+  waiMetrics <- registerWaiMetrics store+  app <- scottyApp $ do+    when (measure) (middleware (metrics waiMetrics))+    get "/" $ html "Ping"+  replicateM_ times (action app)+  return waiMetrics++readRequestCounter :: Bool -> (Application -> IO a) -> Int -> IO Int64+readRequestCounter measure action times = do+  waiMetrics <- testServer measure action times+  Counter.read (requestCounter waiMetrics)++-- Send a GET request to a WAI Application+httpGet :: BS.ByteString -> Application -> IO WT.SResponse+httpGet path =  WT.runSession (WT.srequest (WT.SRequest req ""))+  where req = WT.setRawPathInfo WT.defaultRequest path++-- As to version 0.2.1, the middleware costs 0.7 microseconds per request+-- Most of this time is spent with the latency measure+main :: IO()+main = defaultMain [+  bgroup "fib" [+                 bench "with metrics"    $ nfIO (readRequestCounter True  (httpGet "") 10000)+               , bench "without metrics" $ nfIO (readRequestCounter False (httpGet "") 10000)+               ]+  ]
wai-middleware-metrics.cabal view
@@ -1,5 +1,5 @@ name:                wai-middleware-metrics-version:             0.2.0+version:             0.2.1 synopsis:            A WAI middleware to collect EKG request metrics description:         This WAI middleware counts the number of requests, the number of server errors (http status >= 500) and keeps a latency distribution.                      .@@ -26,7 +26,7 @@   default-language:    Haskell2010   ghc-options:        -Wall -test-suite unit+test-suite metrics-test   build-depends:       base >=4.6 && < 5                      , wai >= 3.0                      , ekg-core >= 0.1@@ -44,6 +44,22 @@   type:                exitcode-stdio-1.0   main-is:             tests.hs   default-language:    Haskell2010++benchmark metrics-bench+  build-depends:       base+                     , criterion+                     , wai >= 3.0+                     , wai-middleware-metrics+                     , wai-extra >= 3.0.0+                     , scotty >= 0.8.0+                     , bytestring >= 0.10.0.2+                     , ekg-core >= 0.1+                     , http-types >= 0.8+                     , time >= 1.4+  type:                exitcode-stdio-1.0+  main-is:             Benchmark.hs+  default-language:    Haskell2010+  ghc-options:         -Wall -O2  source-repository head   type:     git