packages feed

iron-mq-0.1.0.0: README.md

Haskell language binding for IronMQ. [IronMQ](http://www.iron.io/products/mq) is an elastic message queue for managing data and event flow within cloud applications and between systems. [See How It Works](http://www.iron.io/products/mq/how)

# Getting Started

## Get credentials

To start using iron_mq_python, you need to sign up and get an OAuth2 token.

1. Go to http://iron.io/ and sign up.
2. Get an OAuth2 Token at http://hud.iron.io/tokens

## Install iron_mq_haskell

```sh
cabal install iron-mq
```
## Configure

Create a client which stores your authentication information and server settings/

```haskell
client = Client {
    server = "mq-aws-us-east-1.iron.io",
    porjectID = "500f7b....b0f302e9",
    token = "Et1En7.....0LuW39Q",
    api_version="1"
}
```

## The Basics

### Listing queues

```haskell
queues :: Client -> QueueSummary
queues client
```
returns list of queue names available to the client.

we get a specific queue by name:

```haskell
getQueue :: Client -> QueueName -> IO Queue
myQueue = getQueue client "test_queue"
```

### Push messages on the queue

We can change the default options of a message like so:

```haskell
postMessages :: Client -> QueueName -> [Message] -> IO IronResponse
postMessages client "queueName" [message {body = "message1"}, message {body = "message2"}]
```

We can change the default settings for a message like so:

```haskell
unorthoDoxMessage = message {
    body = "axxon body",
    timeout = 120 -- Timeout, in seconds. After timeout, item will be placed back on queue. Defaults to 60.
    delay = 5 -- The item will not be available on the queue until this many seconds have passed. Defaults to 0.
    expiresIn = 2*24*3600 -- How long, in seconds, to keep the item on the queue before it is deleted.
}

main = postMessage "queueName" [unorthodoxMessage]
```

### Pop messages off the queue

```haskell
getMessages :: Client -> QueueName -> IO MessageList
getMessages client "queneName"
{- 
MessageList 
    {
        messages = [Message {mId = Just "...", mBody = "Word up!", mTimeout = Just 60, mReservedCount = Just 1}]
    }
-}
```

Set max to the number of messages to return, 1 by default. A `timeout` parameter can be used to specify a per-message timeout, or the timeout the message was posted with will be used.

When you pop/get a message from the queue, it will NOT be deleted.
It will eventually go back onto the queue after a timeout if you don't delete it (default timeout is 60 seconds).

### Get message by id
```haskell
getMessageByID :: Client -> QueueName -> ID -> IO Message
main = getMessageById client "test_queue" "1234567789abcdef"
{-
    Message {mId = Just "...", mBody = "Hey yo!", mTimeout = Just 60, mReservedCount = Just 1}
-}
```

### Delete messages from the queue

```haskell
deleteMessages :: Client -> QueueName -> [ID] -> IO IronResponse
deleteMessages client "test_queue" ["123456789abcdef", "fedcba987654321"]
```

### Clear a queue

```haskell
clear :: Client -> QueueName -> IO IronResponse
clear client "test_queue"
```

### Get queue ***size***, ***id***, ***total_messages*** and whole ***info***
```haskell
main = do
-- | getQueue client queueName
myQueue <-  getQueue client queueName
{-
Queue {
    qId = Just "541451a958a847405bfa6316",
    qProjectId = "53f691bd45d4960005000082",
    qName = "test_queue",
    qSize = Just 1,
    qTotalMessages = Just 8,
    qSubscribers = Nothing,
    qRetries = Nothing,
    qPushType = Nothing,
    qRetriesDelay = Nothing
}
-}

-- | qSize queue
qSize myQueue -- Just 1

-- | qName queue
qName myQueue -- "test_queue"

-- | qTotalMessages queue
qTotalMessages -- Just 8

-- | qID queue
qID myQueue -- "541451a958a847405bfa6316"
```

### Peek at messages

To view messages without reserving them, use peek:

```haskell
peek :: Client -> QueueName -> Int -> IO MessageList
peek client "test_queue" 10
{-
    MessageList {messages = [Message {mId = Just "...", mBody = "Word up!", mTimeout = Just 60, mReservedCount = Just 1}]}
-}
```

The third parameter is an integer specifying the maximum number of messages to retrieve.

### Touch a message

To extend the reservation on a reserved message, use touch. The message reservation will be extended by the message's `timeout`.

```haskell
touch :: Client -> QueueName -> ID -> IO IronResponse
touch client "test_queue" messageID
```

### Release a reserved message

To release a message that is currently reserved, use release:

```haskell
release :: Client -> QueueName -> ID -> Int -> IO IronResponse
release client "test_queue" "123456789abcdef" 120 -- message will be released after delay seconds
```

The last parameter is the delay time before the message is released.

### Delete a queue

To delete a queue, use `deleteQueue`:

```haskell
-- | deleteQueue client queueName
deleteQueue client "test_queue"
```

## Push Queues

### Update Queue Information

To update the queue's push type and subscribers, use update:

```haskell
update :: Client -> QueueName -> [Subscriber] -> String -> IO Response
update client "test_queue" [subscriber {url = "http://endpoint1.com"}, subscriber {url = "https://end.point.com/2"}] "unicast"
```

The last parameter is the broadcast type (either "unicast" or "multicast")

### Add subscribers to a push queue

```haskell
addSubscribers :: Client -> QueueName -> [Subscriber] -> IO IRonResponse
addSubscribers client test_queue [subscriber {url = "http://endpoint1.com"}, subscriber {url = "https://end.point.com/2"}])
```

### Remove subscribers from a push queue

```haskell
removeSubscribers :: Client -> QueueName -> [Subscriber]
main = removeSubscribers client "test_queue" [subscriber {url = "http://endpoint1.com"}, subscriber {url ="https://end.point.com/2"})
```

### Get the push statuses of a message

```haskell
getMessagePushStatuses :: Client -> QueueName -> ID -> IO SubscriberList
getMessagePushStatuses client "test_queue" "123456789abcdef"
{-
    subscriberList {
    subscribers = [Subscriber {retriesDelay = Just 60, retriesRemaining" = Just 2, statusCode = Just 200, status = Just "deleted", "url": "http://endpoint1.com", "id": "52.."}, ...]}
-}
```

### Delete a pushed message

If you respond with a 202 status code, the pushed message will be reserved, not deleted, and should be manually deleted. You can get the message ID and subscriber ID from the push message's headers.

```haskell
deleteMessagePushStatus :: Client -> QueueName -> MessageID -> [SuscriberID] -> IO IronResponse
main = deleteMessagePushStatus client "test_queue" "123456789abcdef" "987654321fedcba"
```

## Pull queues

### Add alerts to a queue

```haskell
fixed_desc_alert = alert {type = "fixed", direction = "desc", trigger = 1000}
progressive_asc_alert = alert {type = "progressive", direction = "asc", trigger= 10000}
addAlerts :: Client -> QueueName -> [Alert] -> IO IronResponse
addAlerts client "test_queue" ([fixed_desc_alert, progressive_asc_alert])
```

### Update alerts in a queue

```haskell
progressive_asc_alert = alert {type = "progressive", direction = "asc", trigger = 5000, queue = "q"}
updateAlerts :: Client -> QueueName -> [Alert] -> IO IronResponse
updateAlerts client "test_queue" ([progressive_asc_alert])
```

### Remove alerts from a queue

```haskell
removeAlerts :: Client -> QueueName -> [AlertID] -> IO IronResponse
main = removeAlerts client "test_queue" (['5305d3b5a3e920763013c796', '513015d32b5a3e763013c796'])
```

# Full Documentation

You can find more documentation here:

* http://iron.io
* http://dev.iron.io