wrecker-0.1.3.3: An HTTP Performance Benchmarker

Safe HaskellNone
LanguageHaskell2010

Wrecker

Contents

Description

wrecker is a library and executable for creating HTTP benchmarks. It is designed for benchmarking a series of dependent requests.

wrecker includes a wrapped version of the wreq Session API, mainly through Network.Wreq.Wrecker.

import Wrecker to write clients and Wrecker to run the them with either defaultMain or run.

See https://github.com/skedgeme/wrecker#readme for more information.

Synopsis

Entry Points

defaultMain :: [(String, Environment -> IO ())] -> IO () Source #

defaultMain is typically the main entry point for wrecker benchmarks. defaultMain will parse all command line arguments and then call run with the correct Options.

import Wrecker
import Your.Performance.Scripts (landingPage, purchase)

main :: IO ()
main = defaultMain
 [ ("loginReshare", loginReshare)
 , ("purchase"    , purchase    )
 ]

To see the options defaultMain can parse call `--help`

$ wrecker-based-app --help

wrecker - HTTP stress tester and benchmarker

Usage: example [--concurrency ARG] [--bin-count ARG] ([--run-count ARG] |
               [--run-timed ARG]) [--timeout-time ARG] [--display-mode ARG]
               [--log-level ARG] [--match ARG] [--request-name-size ARG]
               [--output-path ARG] [--silent]
 Welcome to wrecker

Available options:
 -h,--help                Show this help text
 --concurrency ARG        Number of threads for concurrent requests
 --bin-count ARG          Number of bins for latency histogram
 --run-count ARG          number of times to repeat
 --run-timed ARG          number of seconds to repeat
 --timeout-time ARG       How long to wait for all requests to finish
 --display-mode ARG       Display results interactively
 --log-level ARG          Display results interactively
 --match ARG              Only run tests that match the glob
 --request-name-size ARG  Request name size for the terminal display
 --output-path ARG        Save a JSON file of the the statistics to given path
 --silent                 Disable all output

run :: Options -> [(String, Environment -> IO ())] -> IO (HashMap String AllStats) Source #

run is the a lower level entry point, compared to defaultMain. Unlike defaultMain no command line argument parsing is performed. Instead, Options are directly passed in. defaultOptions can be used as a default argument for run.

Like defaultMain, run creates a Recorder and passes it each benchmark.

runOne :: Options -> (Environment -> IO ()) -> IO AllStats Source #

Run a single benchmark

Wrecker State

data Environment Source #

The Environment holds state necessary to make and record HTTP calls.

Constructors

Environment 

Fields

  • recorder :: Recorder

    The Recorder can be used with the record function to ... record times.

  • context :: ConnectionContext

    Provided as a convience, this is a shared TLS context to reuse for better performance.

Recorder

data Recorder Source #

An opaque type for recording actions for profiling. To obtain a Recorder use either run, defaultMain, runOne or newStandaloneRecorder.

record :: forall a. Recorder -> String -> IO a -> IO a Source #

record is a low level function for collecting timing information. Wrap each action of interest in a call to record.

record recorder $ threadDelay 1000000

record measures the elapsed time of the call, and catches HttpException in the case of failure. This means failures must be thrown if they are to be properly recorded.

Options

data Options Source #

Constructors

Options 

Fields

data RunType Source #

There are two typical ways to invoke wrecker. RunCount will execute each a script n times on each thread. So a run count of 100 and a concurrency of 10 will run the script a total of 1000 times. Alternatively, wrecker can run for specified number of seconds with RunTimed.

Constructors

RunCount Int 
RunTimed Int 

data DisplayMode Source #

DisplayMode controls how results are displayed in the console. The default is NonInterative which returns the final results at the end of the program. Interactive will show partial results as the program updates.

defaultOptions :: Options Source #

defaultOptions provides sensible default for the Options types

data AllStats Source #

AllStats has all of the ... stats. This type stores all of the information wrecker uses to display metrics to the user.

Constructors

AllStats 

Fields

Instances

Eq AllStats Source # 
Show AllStats Source # 
ToJSON AllStats Source # 

Methods

toJSON :: AllStats -> Value

toEncoding :: AllStats -> Encoding

toJSONList :: [AllStats] -> Value

toEncodingList :: [AllStats] -> Encoding