time-warp-1.1.1.0: bench/Network/Sender/SenderOptions.hs
{-# LANGUAGE ScopedTypeVariables #-}
-- | Command line options of pos-node.
module SenderOptions
( Args (..)
, argsParser
) where
import Control.TimeWarp.Rpc (NetworkAddress)
import Data.Int (Int64)
import Data.Monoid ((<>))
import Data.String (fromString)
import Options.Applicative.Simple (Parser, auto, help, long, metavar, option,
optional, short, showDefault, some,
strOption, value)
import Serokell.Util.OptParse (fromParsec)
import Serokell.Util.Parse (connection)
data Args = Args
{ logConfig :: !(Maybe FilePath)
, logsPrefix :: !(Maybe FilePath)
, recipients :: ![NetworkAddress]
, threadNum :: !Int
, msgNum :: !Int
, msgRate :: !(Maybe Int)
, duration :: !Int
, payloadBound :: !Int64
}
deriving Show
--TODO introduce subcommands
argsParser :: Parser Args
argsParser =
Args <$>
optional
(strOption
(long "log-config"
<> metavar "FILEPATH" <>
help "Path to logger configuration")
)
<*>
optional
(strOption $
long "logs-prefix" <> metavar "FILEPATH" <> help "Prefix to logger output path")
<*>
some
(option (fromParsec recipient) $
long "peer" <> metavar "HOST:PORT" <> help "Recipient's ip:port")
<*>
option
auto
(short 't'
<> long "thread-num"
<> metavar "INTEGER"
<> value 5
<> showDefault <>
help "Number of threads to use")
<*>
option
auto
(short 'm'
<> long "msg-num"
<> metavar "INTEGER"
<> value 1000
<> showDefault <>
help "Number of messages to send")
<*>
optional
(option
auto
(short 'r'
<> long "msg-rate"
<> metavar "INTEGER" <>
help "Number of messages to send per second")
)
<*>
option
auto
(short 'd'
<> long "duration"
<> metavar "INTEGER"
<> value 10
<> showDefault <>
help "Time to run before stopping, seconds")
<*>
option
auto
(short 'p'
<> long "payload"
<> metavar "INTEGER"
<> value 0
<> showDefault <>
help "Defines upper bound on sent message size")
where
recipient = connection >>= \(h, mp) ->
case mp of
Just p -> return (fromString h, p)
_ -> fail $ "No port specified for host " <> h