groot-0.0.1.0: src/Groot/AWS.hs
{-# LANGUAGE OverloadedStrings #-}
module Groot.AWS
(
module Groot.AWS.Cluster
, module Groot.AWS.Instance
, module Groot.AWS.Service
, module Groot.AWS.Task
, module Groot.AWS.TaskDef
-- Error handlers
, handleHttpException
, handleServiceError
) where
import Control.Lens
import Data.Semigroup ((<>))
import qualified Data.Text as T
import Network.AWS
import Network.HTTP.Conduit
import Network.HTTP.Types.Status
import Groot.AWS.Cluster
import Groot.AWS.Instance
import Groot.AWS.Service
import Groot.AWS.Task
import Groot.AWS.TaskDef
import Groot.Console
import Groot.Data.Text
-- AWS Error handlers
handleHttpException :: MonadConsole m => HttpException -> m ()
handleHttpException (InvalidUrlException url reason) =
putError $ "Url " <> (styled yellowStyle $ toText url) <> " is invalid due to: " <> (styled redStyle $ toText reason)
handleHttpException (HttpExceptionRequest req _) =
putError $ "Could not communicate with " <> (styled yellowStyle $ toText . host $ req) <> "."
handleServiceError :: MonadConsole m => ServiceError -> m ()
handleServiceError err =
let servName = toText $ err ^. serviceAbbrev
statusMsg = toText . statusMessage $ err ^. serviceStatus
message = maybe "" toText $ err ^. serviceMessage
styledSt = styled yellowStyle (T.concat [servName, " ", statusMsg])
in putError $ styledSt <+> (styleless message)