csv2rackspace
Version:
NodeJS tool to create multiple rackspace mailboxes from a flat csv file
90 lines (70 loc) • 2.35 kB
JavaScript
;
const
program = require('commander'),
chalk = require('chalk'),
rackspace = require('./lib/rackspace.js'),
parser = require('./lib/csv-parser.js'),
config = require('./lib/config.js'),
async = require('async'),
sleep = require('sleep'),
http = require('http'),
ProgressBar = require('progress');
program
.version('1.0.0')
.description('NodeJS tool to create multiple rackspace mailboxes from a flat csv file');
let mainFunction = (accountNumber, domain, filename, options) => {
// Args checkin
if (typeof options.userkey === 'undefined' | typeof options.secretkey === 'undefined') {
console.error(chalk.bold.red('You must specify --userkey and --secretkey options !'));
program.outputHelp();
process.exit(1);
}
// Set Config
config.verbose == options.verbose;
// Preambule
rackspace.setKeys(options.userkey, options.secretkey);
rackspace.setAccount(accountNumber, domain);
//rackspace.getStats(accountNumber, domain);
var entries = parser.getProcessedData(filename);
var bar = new ProgressBar(' Processing :current/:total [:bar] :percent Eta: :etas', {
complete: '=',
incomplete: ' ',
width: 20,
total: entries.length
});
async.everyLimit(entries, 1, (item, callback) => {
if(config.verbose)
console.log('Processing entry %s', item.Username);
rackspace.getMailbox(item.Username, (mailbox) => {
if(mailbox.itemNotFoundFault) {
// Mailbox does not exist
rackspace.createMailbox(item, () => {
callback(null, mailbox)
});
} else {
//Mailbox already exists and we don't overwrite
if(config.verbose)
console.log(chalk.gray(' Mailbox %s already exists (not overwriting)'), item.Username);
mailbox.result = 'ignored';
callback(null, mailbox);
}
});
//FIXME: found a graceful way to throttle requests
sleep.sleep(1);
bar.tick();
}, (err, result) => {
//console.log(result);
});
}
program
.arguments('<accountNumber>', 'Customer account number')
.arguments('<domain>', 'Domain')
.arguments('<filename>', 'Csv source file')
.option('-u, --userkey <userkey>', 'User Key')
.option('-s, --secretkey <secretkey>', 'Secret Key')
.option('-v, --verbose', 'Verbose mode')
.action(mainFunction)
.parse(process.argv);
if (!program.args || program.args.length === 0)
program.help();