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 +42/−0
- wai-middleware-metrics.cabal +18/−2
+ 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