UNPKG

nibi

Version:

Extremely easy management of queues with RabbitMQ and/or AmazonSQS

106 lines (82 loc) 2.22 kB
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 }