om-legion-6.9.0.3: test/om-legion-test-run.hs
{-# LANGUAGE NumericUnderscores #-}
{- |
Description: a program that runs some operations against a legion
test node.
-}
module Main (main) where
import Control.Monad.Logger.CallStack (LoggingT(runLoggingT))
import Data.Maybe (maybeToList)
import Data.String (IsString(fromString))
import Numeric.Natural (Natural)
import OM.Logging (parseLevel, standardLogging)
import OM.Show (showj)
import Safe (readMay)
import System.Environment (getArgs, getEnv)
import Test.OM.Legion (Request, makeClient, send)
main :: IO ()
main = do
namespace <- fromString <$> getEnv "NAMESPACE"
level <- parseLevel . fromString <$> getEnv "LOG_LEVEL"
(ord, reqs) <- parseArgs =<< getArgs
let logging = standardLogging level
client <- flip runLoggingT logging $ makeClient namespace ord
sequence_
[ send client req >>= putStrLn . showj
| req <- reqs
]
parseArgs :: (MonadFail m) => [String] -> m (Natural, [Request])
parseArgs args =
case args of
[] -> fail "Needs some arguments."
n:ops ->
case readMay n of
Nothing -> fail "Bad first argment."
Just ord ->
pure $ (ord, readMay <$> ops >>= maybeToList)