antiope-sqs 4.0.1 → 5.0.0
raw patch · 3 files changed
+22/−108 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Antiope.SQS.Classy: DeleteMessageBatchError :: SQSError
- Antiope.SQS.Classy: QueueUrl :: Text -> QueueUrl
- Antiope.SQS.Classy: ackMessage :: MonadAWS m => QueueUrl -> Message -> m (Either SQSError ())
- Antiope.SQS.Classy: ackMessages :: MonadAWS m => QueueUrl -> [Message] -> m (Either SQSError ())
- Antiope.SQS.Classy: data SQSError
- Antiope.SQS.Classy: drainQueue :: MonadAWS m => QueueUrl -> m [Message]
- Antiope.SQS.Classy: messageInBody :: Text -> Maybe Text
- Antiope.SQS.Classy: messageToS3Uri :: Message -> Maybe S3Uri
- Antiope.SQS.Classy: messageToS3Uri' :: Text -> Maybe S3Uri
- Antiope.SQS.Classy: newtype QueueUrl
- Antiope.SQS.Classy: readQueue :: MonadAWS m => QueueUrl -> m [Message]
- Antiope.SQS: ackMessage :: (HasEnv e, MonadUnliftIO m) => e -> QueueUrl -> Message -> m (Either SQSError ())
+ Antiope.SQS: ackMessage :: MonadAWS m => QueueUrl -> Message -> m (Either SQSError ())
- Antiope.SQS: ackMessages :: (HasEnv e, MonadUnliftIO m) => e -> QueueUrl -> [Message] -> m (Either SQSError ())
+ Antiope.SQS: ackMessages :: MonadAWS m => QueueUrl -> [Message] -> m (Either SQSError ())
- Antiope.SQS: drainQueue :: (HasEnv e, MonadUnliftIO m) => e -> QueueUrl -> m [Message]
+ Antiope.SQS: drainQueue :: MonadAWS m => QueueUrl -> m [Message]
- Antiope.SQS: readQueue :: (HasEnv e, MonadUnliftIO m) => e -> QueueUrl -> m [Message]
+ Antiope.SQS: readQueue :: MonadAWS m => QueueUrl -> m [Message]
Files
- antiope-sqs.cabal +2/−3
- src/Antiope/SQS.hs +20/−25
- src/Antiope/SQS/Classy.hs +0/−80
antiope-sqs.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: b55dc8e9a043c5df30c6232c86d8ec02c368e68348eb16ab5682893826456042+-- hash: 0f6f3d2eecda5e123fe534587a05489e19cbdc7b7bf00a03996401b70989f8f2 name: antiope-sqs-version: 4.0.1+version: 5.0.0 description: Please see the README on Github at <https://github.com/arbor/antiope#readme> category: Services homepage: https://github.com/arbor/antiope#readme@@ -47,7 +47,6 @@ , unliftio-core exposed-modules: Antiope.SQS- Antiope.SQS.Classy Antiope.SQS.Types other-modules: Paths_antiope_sqs
src/Antiope/SQS.hs view
@@ -10,52 +10,47 @@ , messageToS3Uri' ) where -import Antiope.S3 (S3Uri (..))-import Antiope.SQS.Types (QueueUrl (QueueUrl), SQSError (DeleteMessageBatchError))+import Antiope.S3 (S3Uri (..))+import Antiope.SQS.Types (QueueUrl (QueueUrl), SQSError (DeleteMessageBatchError)) import Control.Lens-import Control.Monad (join)-import Control.Monad.IO.Unlift (MonadUnliftIO)-import Control.Monad.Loops (unfoldWhileM)+import Control.Monad (join)+import Control.Monad.Loops (unfoldWhileM) import Data.Aeson.Lens-import Data.Maybe (catMaybes)-import Data.Text (Text, pack, unpack)-import Network.AWS (HasEnv)-import Network.AWS.S3 (BucketName (..), ObjectKey (..))+import Data.Maybe (catMaybes)+import Data.Text (Text, pack, unpack)+import Network.AWS (MonadAWS)+import Network.AWS.S3 (BucketName (BucketName), ObjectKey (ObjectKey)) import Network.AWS.SQS import qualified Network.AWS as AWS import qualified Network.URI as URI -- | Reads the specified SQS queue once returning a bath of messages-readQueue :: (HasEnv e, MonadUnliftIO m)- => e- -> QueueUrl+readQueue :: MonadAWS m+ => QueueUrl -> m [Message]-readQueue e (QueueUrl queueUrl) = AWS.runResourceT . AWS.runAWS e $ do+readQueue (QueueUrl queueUrl) = do -- max wait time allowed by aws is 20sec, max number messages to recieve is 10 resp <- AWS.send $ receiveMessage queueUrl & rmWaitTimeSeconds ?~ 10 & rmMaxNumberOfMessages ?~ 10 return $ resp ^. rmrsMessages -- | Reads the specified SQS queue until it is empty and returns a list of messages-drainQueue :: (HasEnv e, MonadUnliftIO m)- => e- -> QueueUrl+drainQueue :: MonadAWS m+ => QueueUrl -> m [Message]-drainQueue e queueUrl = join <$> unfoldWhileM (not . null) (readQueue e queueUrl)+drainQueue queueUrl = join <$> unfoldWhileM (not . null) (readQueue queueUrl) -ackMessage :: (HasEnv e, MonadUnliftIO m)- => e- -> QueueUrl+ackMessage :: MonadAWS m+ => QueueUrl -> Message -> m (Either SQSError ())-ackMessage e q msg = ackMessages e q [msg]+ackMessage q msg = ackMessages q [msg] -ackMessages :: (HasEnv e, MonadUnliftIO m)- => e- -> QueueUrl+ackMessages :: MonadAWS m+ => QueueUrl -> [Message] -> m (Either SQSError ())-ackMessages e (QueueUrl queueUrl) msgs = AWS.runResourceT . AWS.runAWS e $ do+ackMessages (QueueUrl queueUrl) msgs = do let receipts = catMaybes $ msgs ^.. each . mReceiptHandle -- each dmbr needs an ID. just use the list index. let dmbres = (\(r, i) -> deleteMessageBatchRequestEntry (pack (show i)) r) <$> zip receipts ([0..] :: [Int])
− src/Antiope/SQS/Classy.hs
@@ -1,80 +0,0 @@-module Antiope.SQS.Classy-( QueueUrl(..)-, SQSError(..)-, readQueue-, drainQueue-, ackMessage-, ackMessages-, messageInBody-, messageToS3Uri-, messageToS3Uri'-) where--import Antiope.S3 (S3Uri (..))-import Antiope.SQS.Types (QueueUrl (QueueUrl), SQSError (DeleteMessageBatchError))-import Control.Lens-import Control.Monad (join)-import Control.Monad.Loops (unfoldWhileM)-import Data.Aeson.Lens-import Data.Maybe (catMaybes)-import Data.Text (Text, pack, unpack)-import Network.AWS (MonadAWS)-import Network.AWS.S3 (BucketName (BucketName), ObjectKey (ObjectKey))-import Network.AWS.SQS--import qualified Network.AWS as AWS-import qualified Network.URI as URI---- | Reads the specified SQS queue once returning a bath of messages-readQueue :: MonadAWS m- => QueueUrl- -> m [Message]-readQueue (QueueUrl queueUrl) = do- -- max wait time allowed by aws is 20sec, max number messages to recieve is 10- resp <- AWS.send $ receiveMessage queueUrl & rmWaitTimeSeconds ?~ 10 & rmMaxNumberOfMessages ?~ 10- return $ resp ^. rmrsMessages---- | Reads the specified SQS queue until it is empty and returns a list of messages-drainQueue :: MonadAWS m- => QueueUrl- -> m [Message]-drainQueue queueUrl = join <$> unfoldWhileM (not . null) (readQueue queueUrl)--ackMessage :: MonadAWS m- => QueueUrl- -> Message- -> m (Either SQSError ())-ackMessage q msg = ackMessages q [msg]--ackMessages :: MonadAWS m- => QueueUrl- -> [Message]- -> m (Either SQSError ())-ackMessages (QueueUrl queueUrl) msgs = do- let receipts = catMaybes $ msgs ^.. each . mReceiptHandle- -- each dmbr needs an ID. just use the list index.- let dmbres = (\(r, i) -> deleteMessageBatchRequestEntry (pack (show i)) r) <$> zip receipts ([0..] :: [Int])- resp <- AWS.send $ deleteMessageBatch queueUrl & dmbEntries .~ dmbres- -- only acceptable if no errors.- if resp ^. dmbrsResponseStatus == 200- then case resp ^. dmbrsFailed of- [] -> return $ Right ()- _ -> return $ Left DeleteMessageBatchError- else return $ Left DeleteMessageBatchError---- Extract the "Message" content in the body if have-messageInBody :: Text -> Maybe Text-messageInBody body = body ^? key "Message" . _String--messageToS3Uri :: Message -> Maybe S3Uri-messageToS3Uri msg = join $ messageToS3Uri' <$> msg ^. mBody--messageToS3Uri' :: Text -> Maybe S3Uri-messageToS3Uri' msg = do- s3m <- messageInBody msg ^? _Just . key "Records" . nth 0 . key "s3"- b <- s3m ^? key "bucket" . key "name" . _String- k <- s3m ^? key "object" . key "key" . _String- pure $ S3Uri (BucketName b) (ObjectKey $ uriDecode k)--uriDecode :: Text -> Text-uriDecode = pack . URI.unEscapeString . unpack