packages feed

om-legion-6.9.0.3: test/om-legion-test-inc.hs

{-# LANGUAGE NumericUnderscores #-}
{-# LANGUAGE OverloadedStrings #-}

{- |
  Description: a program that runs some operations against a legion
  test node.
-}
module Main (main) where

import Control.Concurrent.Async (mapConcurrently_)
import Control.Monad.Logger.CallStack (LoggingT(runLoggingT), logInfo)
import Data.String (IsString(fromString))
import OM.Logging (parseLevel, standardLogging)
import OM.Show (showj)
import System.Environment (getArgs, getEnv)
import Test.OM.Legion (Op(Inc), Request(OpReq), makeClientLocal, send)


main :: IO ()
main = do
  level <- parseLevel . fromString <$> getEnv "LOG_LEVEL" 
  [numIncrements, threads] <- getArgs
  let logging = standardLogging level
  mapConcurrently_ id . replicate (read threads) $ do
    flip runLoggingT logging $ do
      client <- makeClientLocal
      logInfo "Sending sequence."
      sequence_ . replicate (read numIncrements) $ do
        logInfo "Sending req"
        send client (OpReq Inc) >>= logInfo . ("Recieved: " <>) . showj
      logInfo "Sequence sent."