|
|
|
@ -1,3 +1,4 @@ |
|
|
|
|
|
|
|
{-# LANGUAGE GeneralizedNewtypeDeriving #-} |
|
|
|
module Main where |
|
|
|
module Main where |
|
|
|
|
|
|
|
|
|
|
|
import Control.Concurrent hiding (newChan, readChan, |
|
|
|
import Control.Concurrent hiding (newChan, readChan, |
|
|
|
@ -7,6 +8,7 @@ import Control.Exception.Safe |
|
|
|
import Control.Monad |
|
|
|
import Control.Monad |
|
|
|
import Data.Aeson |
|
|
|
import Data.Aeson |
|
|
|
import qualified Data.HashMap.Strict as HM |
|
|
|
import qualified Data.HashMap.Strict as HM |
|
|
|
|
|
|
|
import Data.Monoid |
|
|
|
import qualified Data.Text as T |
|
|
|
import qualified Data.Text as T |
|
|
|
import qualified Data.Text.IO as TIO |
|
|
|
import qualified Data.Text.IO as TIO |
|
|
|
import Data.Time.Clock |
|
|
|
import Data.Time.Clock |
|
|
|
@ -17,7 +19,8 @@ import System.IO |
|
|
|
import System.Process |
|
|
|
import System.Process |
|
|
|
|
|
|
|
|
|
|
|
newtype ArgsMap = ArgsMap { unArgsMap :: HM.HashMap T.Text T.Text } |
|
|
|
newtype ArgsMap = ArgsMap { unArgsMap :: HM.HashMap T.Text T.Text } |
|
|
|
deriving (Show, Eq) |
|
|
|
deriving (Show, Eq, Semigroup) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data Config = Config |
|
|
|
data Config = Config |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -102,7 +105,7 @@ runWithConfig config = do |
|
|
|
globalLogger outChan |
|
|
|
globalLogger outChan |
|
|
|
|
|
|
|
|
|
|
|
where |
|
|
|
where |
|
|
|
makeArgs globalArgs localArgs = fmap makeArg (HM.toList . unArgsMap $ globalArgs) ++ fmap makeArg (HM.toList . unArgsMap $ localArgs) |
|
|
|
makeArgs globalArgs localArgs = fmap makeArg (HM.toList . unArgsMap $ localArgs <> globalArgs) |
|
|
|
makeArg (k, v) = T.unpack $ if v /= "" then "--" <> k <> "=" <> v else "--" <> k |
|
|
|
makeArg (k, v) = T.unpack $ if v /= "" then "--" <> k <> "=" <> v else "--" <> k |
|
|
|
globalLogger chan = withFile (cGlobalLog config) AppendMode $ \log -> forever $ do |
|
|
|
globalLogger chan = withFile (cGlobalLog config) AppendMode $ \log -> forever $ do |
|
|
|
line <- readChan chan |
|
|
|
line <- readChan chan |
|
|
|
|