wolf 0.2.1 → 0.2.2
raw patch · 2 files changed
+38/−22 lines, 2 filesdep +http-types
Dependencies added: http-types
Files
- src/Network/AWS/Flow.hs +36/−21
- wolf.cabal +2/−1
src/Network/AWS/Flow.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE LambdaCase #-}+ module Network.AWS.Flow ( register , execute@@ -28,12 +30,13 @@ import Network.AWS.Flow.SWF import Network.AWS.Flow.Types import Network.AWS.Flow.Uid-import Network.AWS.Flow.Prelude hiding ( ByteString, Metadata )+import Network.AWS.Flow.Prelude hiding ( ByteString, Metadata, handle ) import Control.Monad.Catch import qualified Data.HashMap.Strict as Map import Formatting import Network.AWS.SWF+import Network.HTTP.Types import Safe -- Interface@@ -61,29 +64,41 @@ logInfo' $ sformat ("event=execute uid=" % stext) uid startWorkflowExecutionAction uid tskName tskVersion tskQueue input +serializeError :: MonadFlow m => Error -> m ()+serializeError = \case+ e@(SerializeError s) ->+ unless check $ throwM e where+ check =+ s ^. serializeStatus == ok200 &&+ s ^. serializeAbbrev == "SWF" &&+ s ^. serializeMessage == "key \"taskToken\" not present"+ e -> throwM e+ act :: MonadFlow m => Queue -> (Uid -> Metadata -> [Blob] -> m (Metadata, [Artifact])) -> m ()-act queue action = do- logInfo' "event=act"- (token, uid, input) <- pollForActivityTaskAction queue- logInfo' $ sformat ("event=act-begin uid=" % stext) uid- keys <- listObjectsAction uid- unless (null keys) $ logInfo' $ sformat ("event=list-blobs uid=" % stext) uid- blobs <- forM keys $ getObjectAction uid- unless (null blobs) $ logInfo' $ sformat ("event=blobs uid=" % stext) uid- (output, artifacts) <- action uid input blobs- logInfo' $ sformat ("event=act-finish uid=" % stext) uid- forM_ artifacts $ putObjectAction uid- unless (null artifacts) $ logInfo' $ sformat ("event=artifacts uid=" % stext) uid- respondActivityTaskCompletedAction token output+act queue action =+ handle serializeError $ do+ logInfo' "event=act"+ (token, uid, input) <- pollForActivityTaskAction queue+ logInfo' $ sformat ("event=act-begin uid=" % stext) uid+ keys <- listObjectsAction uid+ unless (null keys) $ logInfo' $ sformat ("event=list-blobs uid=" % stext) uid+ blobs <- forM keys $ getObjectAction uid+ unless (null blobs) $ logInfo' $ sformat ("event=blobs uid=" % stext) uid+ (output, artifacts) <- action uid input blobs+ logInfo' $ sformat ("event=act-finish uid=" % stext) uid+ forM_ artifacts $ putObjectAction uid+ unless (null artifacts) $ logInfo' $ sformat ("event=artifacts uid=" % stext) uid+ respondActivityTaskCompletedAction token output decide :: MonadFlow m => Plan -> m ()-decide plan@Plan{..} = do- logInfo' "event=decide"- (token', events) <- pollForDecisionTaskAction (tskQueue $ strtTask plnStart)- token <- maybeThrow (userError "No Token") token'- logger <- asks feLogger- decisions <- runDecide logger plan events select- respondDecisionTaskCompletedAction token decisions+decide plan@Plan{..} =+ handle serializeError $ do+ logInfo' "event=decide"+ (token', events) <- pollForDecisionTaskAction (tskQueue $ strtTask plnStart)+ token <- maybeThrow (userError "No Token") token'+ logger <- asks feLogger+ decisions <- runDecide logger plan events select+ respondDecisionTaskCompletedAction token decisions -- Decisions
wolf.cabal view
@@ -1,5 +1,5 @@ name: wolf-version: 0.2.1+version: 0.2.2 synopsis: Amazon Simple Workflow Service Wrapper. homepage: https://github.com/swift-nav/wolf license: MIT@@ -46,6 +46,7 @@ , fast-logger , formatting , http-conduit+ , http-types , lens , monad-control , monad-logger