packages feed

wrecker-1.0.0: app/Main.hs

import Control.Exception
import Control.Monad (void)
import Data.Monoid
import Network.HTTP.Client
import Network.HTTP.Client.TLS (tlsManagerSettings)
import Options.Applicative
import Wrecker
import Wrecker.Options

parser :: Parser (PartialOptions, String)
parser = (,) <$> pPartialOptions <*> strArgument mempty

runParser' :: IO (Options, String)
runParser' = do
    let opts =
            info
                (helper <*> parser)
                (fullDesc <> progDesc "Welcome to wrecker" <>
                 header "wrecker - HTTP stress tester and benchmarker")
    (partialOptions, url) <- execParser opts
    options <-
        case completeOptions partialOptions of
            Nothing -> throwIO $ userError ""
            Just x -> return x
    return (options, url)

main :: IO ()
main = do
    (options, url) <- runParser'
    man <-
        newManager
            tlsManagerSettings
            { managerConnCount = concurrency options
            , managerIdleConnectionCount = concurrency options
            }
    req <- parseRequest url
    void $ run options $ [(url, \env -> void $ record (recorder env) url $ httpLbs req man)]