nibi
Version:
Extremely easy management of queues with RabbitMQ and/or AmazonSQS
106 lines (82 loc) • 2.22 kB
JavaScript
var AWS = require('aws-sdk')
var when = require('when')
var sqs = {}
var config = require('./config')
module.exports = listQueues = function (queueName) {
var deferred = when.defer()
if (config.service === 'aws') {
AWS.config.update(config.awsConfigFile)
sqs = new AWS.SQS()
return listSQSQueues(queueName)
}
return listRabbitQueues(queueName)
}
var listSQSQueues = function (queueName) {
var deferred = when.defer()
sqs.listQueues(function (err, res) {
var queueFinder = false
if(res.QueueUrls){
for(var i in res.QueueUrls){
if(res.QueueUrls[i].split('/').pop() === queueName){
queueFinder = true }
}
}
if(queueFinder){
getQueue(queueName).then(function (queueUrl) {
deferred.resolve(queueUrl)
})
}else{
createQueue(queueName).then(function () {
getQueue(queueName).then(function (queueUrl) {
deferred.resolve(queueUrl)
})
})
}
})
return deferred.promise
}
var listRabbitQueues = function (queueName) {
var deferred = when.defer()
deferred.resolve(queueName)
return deferred.promise
}
var listQueues = function (_queueName) {
var deferred = when.defer()
sqs.listQueues(function (err, res) {
var queueFinder = false
if(res.QueueUrls)
for(var i in res.QueueUrls)
if(res.QueueUrls[i].split('/').pop() === _queueName)
queueFinder = true
if(queueFinder){
getQueue(_queueName).then(function (queueUrl) {
deferred.resolve(queueUrl)
})
} else {
createQueue(_queueName).then(function () {
getQueue(_queueName).then(function (queueUrl) {
deferred.resolve(queueUrl)
})
})
}
})
return deferred.promise
}
var getQueue = function (_queueName) {
var deferred = when.defer()
sqs.getQueueUrl({QueueName: _queueName}, function (err, data) {
deferred.resolve(data.QueueUrl)
})
return deferred.promise
}
var createQueue = function(_queueName) {
var deferred = when.defer()
var cqParams = {
QueueName: _queueName,
Attributes: {}
}
sqs.createQueue(cqParams, function (err, res) {
deferred.resolve()
})
return deferred.promise
}