packages feed

wrecker-0.1.2.0: app/Main.hs

import Wrecker
import Wrecker.Options
import Network.HTTP.Client
import Options.Applicative.Builder
import Options.Applicative
import Data.Monoid
import Control.Exception
import Control.Monad (void)
import qualified Network.Wreq as Wreq
import Control.Lens

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 defaultManagerSettings { managerConnCount = concurrency options }
  void $ runOne options $ \env -> do
    void $ record (recorder env) url
         $ Wreq.getWith (Wreq.defaults & Wreq.manager .~ Right man) url