packages feed

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)