diff --git a/argo/argo.cabal b/argo/argo.cabal index aaf1522e0a78f87c458d19c5a067b8564ff5bb6a..413b0a343c831a46370008e9acddff454747df00 100644 --- a/argo/argo.cabal +++ b/argo/argo.cabal @@ -12,6 +12,6 @@ library exposed-Modules: Argo.Stack Argo.Utils Argo.Args - build-depends: base >=4 && <=8, turtle, data-default, managed, ansi-terminal, unix, system-filepath, async, process, text, optparse-applicative, extra, foldl, conduit,conduit-extra, bytestring, stm + build-depends: base >=4 && <=8, turtle, data-default, managed, ansi-terminal, unix, system-filepath, async, process, text, optparse-applicative, extra, foldl, conduit,conduit-extra, bytestring, stm, pretty-show hs-source-dirs: src default-language: Haskell2010 diff --git a/argo/src/Argo/Args.hs b/argo/src/Argo/Args.hs index 1559b979b189f5987498b394f825f3b5d7fc1ffc..1f98bb7f2ce15173df0207fd7b6f500656c2c506 100644 --- a/argo/src/Argo/Args.hs +++ b/argo/src/Argo/Args.hs @@ -16,7 +16,8 @@ import System.Process hiding ( shell ) data OutputFiles = OutputFiles FilePath FilePath data StackArgs = StackArgs - { app :: AppName + { verbosity :: Verbosity + , app :: AppName , args :: AppArgs , containerName :: ContainerName , workingDirectory :: WorkingDirectory @@ -29,6 +30,7 @@ data StackArgs = StackArgs , cmdlistenpower :: ProcessBehavior } +data Verbosity = Normal | Verbose deriving (Show,Read,Eq) newtype AppArgs = AppArgs [Text] deriving (Show, Read) newtype WorkingDirectory = WorkingDirectory FilePath deriving (IsString, Show) newtype AppName = AppName Text deriving (IsString, Show, Read) @@ -52,7 +54,8 @@ behaviorOption = option behavior instance Default StackArgs where def = StackArgs - { app = AppName "ls" + { verbosity = Verbose + , app = AppName "ls" , args = AppArgs [] , containerName = ContainerName "testContainer" , workingDirectory = WorkingDirectory "_output" @@ -67,6 +70,10 @@ instance Default StackArgs where parseExtendStackArgs :: StackArgs -> Parser StackArgs parseExtendStackArgs StackArgs {..} = do + verbosity <- flag + Normal + Verbose + (long "verbose" <> short 'v' <> help "Enable verbose mode") app <- strOption ( long "application" <> metavar "APP" diff --git a/argo/src/Argo/Stack.hs b/argo/src/Argo/Stack.hs index a57999657a1344ede965d99add86234c012825b6..a57a9f134dd5b7c64aa3efba6ad01b52e63c3153 100644 --- a/argo/src/Argo/Stack.hs +++ b/argo/src/Argo/Stack.hs @@ -44,6 +44,7 @@ import Data.ByteString.Char8 as C8 import Control.Exception.Base import Data.Maybe import Control.Foldl as Fold +import Text.Show.Pretty cleanLeftovers :: WorkingDirectory -> Shell () cleanLeftovers (WorkingDirectory wd) = do @@ -133,7 +134,7 @@ prepareDaemon (StdOutLog out) (StdErrLog err) test = do else printInfo "argo_nodeos_config successfully cleaned the container \ - \config." + \config.\n" cmdRunI :: AppName @@ -205,12 +206,30 @@ runStack a@StackArgs {..} = do ] ilist = catMaybes milist + if verbosity == Verbose + then do + printInfo "Starting the following processes:\n" + liftIO $ pPrint ilist + else liftIO $ pPrint (fmap fst ilist) + asyncs <- liftIO $ mapM tupleToAsync ilist liftIO $ kbInstallHandler $ CM.mapM_ cancel asyncs + + when (verbosity == Verbose) $ printInfo "Processes started.\n" + out <- liftIO $ waitAnyCancel asyncs + + printInfo + ( "Processes cancelled due to termination of: " + <> repr (fst $ snd out) + <> " with exit information: " + <> repr (snd $ snd out) + <> "\n" + ) + return $ case snd out of - (_ , Left PatternMatched ) -> FoundMessage - (stacki, Right (e, _, _) ) -> Died stacki e + (_ , Left PatternMatched) -> FoundMessage + (stacki, Right (e, _, _) ) -> Died stacki e where tupleToAsync :: (StackI, Instrumentation)