packages feed

wai-middleware-metrics 0.2.1 → 0.2.2

raw patch · 3 files changed

+34/−15 lines, 3 filesdep ~QuickCheckPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: QuickCheck

API changes (from Hackage documentation)

- Network.Wai.Metrics: serverErrorCounter :: WaiMetrics -> Counter
+ Network.Wai.Metrics: statusCode100Counter :: WaiMetrics -> Counter
+ Network.Wai.Metrics: statusCode200Counter :: WaiMetrics -> Counter
+ Network.Wai.Metrics: statusCode300Counter :: WaiMetrics -> Counter
+ Network.Wai.Metrics: statusCode400Counter :: WaiMetrics -> Counter
+ Network.Wai.Metrics: statusCode500Counter :: WaiMetrics -> Counter
- Network.Wai.Metrics: WaiMetrics :: Counter -> Counter -> Distribution -> WaiMetrics
+ Network.Wai.Metrics: WaiMetrics :: Counter -> Distribution -> Counter -> Counter -> Counter -> Counter -> Counter -> WaiMetrics

Files

Network/Wai/Metrics.hs view
@@ -7,7 +7,7 @@ A <http://hackage.haskell.org/package/wai WAI> middleware to collect the following <https://ocharles.org.uk/blog/posts/2012-12-11-24-day-of-hackage-ekg.html EKG> metrics from compatible web servers:  * number of requests (counter @wai.request_count@)-* number of server errors (counter @wai.server_error_count@)+* number of response by status code, broken down class (count @wai.response_status_xxx@) * latency distribution (distribution @wai.latency_distribution@)  @@ -46,34 +46,46 @@  import Network.Wai import System.Metrics-import Control.Monad (when)+import Control.Applicative import Data.Time.Clock import qualified System.Metrics.Counter as Counter import qualified System.Metrics.Distribution as Distribution-import Network.HTTP.Types.Status (statusIsServerError)+import Network.HTTP.Types.Status (statusCode)  {-| The metrics to feed in WAI and register in EKG. -} data WaiMetrics = WaiMetrics {   requestCounter :: Counter.Counter- ,serverErrorCounter :: Counter.Counter  ,latencyDistribution :: Distribution.Distribution+ ,statusCode100Counter :: Counter.Counter+ ,statusCode200Counter :: Counter.Counter+ ,statusCode300Counter :: Counter.Counter+ ,statusCode400Counter :: Counter.Counter+ ,statusCode500Counter :: Counter.Counter }  {-| Register in EKG a number of metrics related to web server activity.  * @wai.request_count@-* @wai.server_error_count@+* @wai.response_status_1xx@+* @wai.response_status_2xx@+* @wai.response_status_3xx@+* @wai.response_status_4xx@+* @wai.response_status_5xx@ * @wai.latency_distribution@ -} registerWaiMetrics :: Store -> IO WaiMetrics-registerWaiMetrics store = do-  req <- createCounter "wai.request_count" store-  err <- createCounter "wai.server_error_count" store-  tim <- createDistribution "wai.latency_distribution" store-  return $ WaiMetrics req err tim+registerWaiMetrics store =+  WaiMetrics+    <$> createCounter "wai.request_count" store+    <*> createDistribution "wai.latency_distribution" store+    <*> createCounter "wai.response_status_1xx" store+    <*> createCounter "wai.response_status_2xx" store+    <*> createCounter "wai.response_status_3xx" store+    <*> createCounter "wai.response_status_4xx" store+    <*> createCounter "wai.response_status_5xx" store  {-| Create a middleware to be added to a WAI-based webserver.@@ -85,7 +97,12 @@   app req (respond' start)     where respond' :: UTCTime -> Response -> IO ResponseReceived           respond' start res = do-            when (statusIsServerError $ responseStatus res) (Counter.inc (serverErrorCounter waiMetrics))+            Counter.inc $ case statusCode $ responseStatus res of+              s | s >= 500  -> statusCode500Counter waiMetrics+                | s >= 400  -> statusCode400Counter waiMetrics+                | s >= 300  -> statusCode300Counter waiMetrics+                | s >= 200  -> statusCode200Counter waiMetrics+                | otherwise -> statusCode100Counter waiMetrics             end <- getCurrentTime             Distribution.add (latencyDistribution waiMetrics) (realToFrac $ diffUTCTime end start)             respond res
tests.hs view
@@ -58,7 +58,7 @@ readErrorCounter :: (Application -> IO a) -> Int -> IO Int64 readErrorCounter action times = do   waiMetrics <- testServer action times-  Counter.read (serverErrorCounter waiMetrics)+  Counter.read (statusCode500Counter waiMetrics)  -- Return the response time distribution after running n times -- an action over a fresh scotty server
wai-middleware-metrics.cabal view
@@ -1,7 +1,7 @@ name:                wai-middleware-metrics-version:             0.2.1+version:             0.2.2 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.+description:         This WAI middleware counts the number of requests, the number of responses by status code and keeps a latency distribution.                      .                      It can be added to any WAI-based webserver, such as Yesod, Scotty, Spock and Servant.                      .@@ -34,7 +34,7 @@                      , tasty >= 0.10.1                      , tasty-hunit >= 0.8                      , tasty-quickcheck >= 0.8.2-                     , QuickCheck == 2.7+                     , QuickCheck >= 2.7                      , scotty >= 0.8.0                      , transformers >= 0.3                      , bytestring >= 0.10.0.2@@ -44,6 +44,7 @@   type:                exitcode-stdio-1.0   main-is:             tests.hs   default-language:    Haskell2010+  other-modules:       Network.Wai.Metrics  benchmark metrics-bench   build-depends:       base@@ -60,6 +61,7 @@   main-is:             Benchmark.hs   default-language:    Haskell2010   ghc-options:         -Wall -O2+  other-modules:       Network.Wai.Metrics  source-repository head   type:     git