module Network.AWS.Flow.Env
( flowEnv
) where
import Control.Applicative ( (<$>), (<*>) )
import Control.Lens ( (.~), (<&>) )
import Control.Monad ( mzero )
import Control.Monad.Except ( runExceptT )
import Control.Monad.Trans.AWS
import Data.Aeson
import Network.AWS.Flow
import Network.HTTP.Conduit ( conduitManagerSettings
, managerResponseTimeout
, newManager )
import System.Log.FastLogger ( defaultBufSize
, flushLogStr
, newStderrLoggerSet
, pushLogStr )
import System.IO ( stderr )
instance FromJSON Region where
parseJSON (String v)
| v == "eu-west-1" = return Ireland
| v == "eu-central-1" = return Frankfurt
| v == "ap-northeast-1" = return Tokyo
| v == "ap-southeast-1" = return Singapore
| v == "ap-southeast-2" = return Sydney
| v == "cn-north-1" = return Beijing
| v == "us-east-1" = return NorthVirginia
| v == "us-west-1" = return NorthCalifornia
| v == "us-west-2" = return Oregon
| v == "us-gov-west-1" = return GovCloud
| v == "fips-us-gov-west-1" = return GovCloudFIPS
| v == "sa-east-1" = return SaoPaulo
| otherwise = mzero
parseJSON _ = mzero
instance FromJSON Credentials where
parseJSON (Object v) =
FromEnv <$>
v .: "access-key-env-var" <*>
v .: "secret-key-env-var"
parseJSON _ = mzero
instance FromJSON FlowConfig where
parseJSON (Object v) =
FlowConfig <$>
v .: "region" <*>
v .: "credentials" <*>
v .: "timeout" <*>
v .: "poll-timeout" <*>
v .: "domain" <*>
v .: "bucket"
parseJSON _ = mzero
flowEnv :: FlowConfig -> IO FlowEnv
flowEnv FlowConfig{..} = do
loggerSet <- newStderrLoggerSet defaultBufSize
logger <- newLogger Info stderr
manager <- newManager (managerSettings fcTimeout)
pollManager <- newManager (managerSettings fcPollTimeout)
env <- newEnv' manager <&> envLogger .~ logger
pollEnv <- newEnv' pollManager <&> envLogger .~ logger
return $ FlowEnv (logStrLn loggerSet) env pollEnv fcDomain fcBucket where
managerSettings timeout =
conduitManagerSettings { managerResponseTimeout = Just timeout }
newEnv' m =
runExceptT (newEnv fcRegion fcCredentials m) >>= either error return
logStrLn ls s =
pushLogStr ls s >> flushLogStr ls