UNPKG

wait-for-redis

Version:
89 lines (79 loc) 3.35 kB
// Generated by CoffeeScript 1.9.3 (function() { var Q, Redis, durations, program, runScript, waitForRedis; Q = require('q'); Redis = require('ioredis'); program = require('commander'); durations = require('durations'); waitForRedis = function(config) { var attempts, connectTimeout, connectWatch, connected, deferred, options, quiet, redis, ref, ref1, ref2, totalTimeout, watch, wrapup; deferred = Q.defer(); connectTimeout = config.connectTimeout; totalTimeout = config.totalTimeout; quiet = config.quiet; attempts = 1; watch = durations.stopwatch().start(); connectWatch = durations.stopwatch(); wrapup = function(code) { if (connected) { redis.disconnect(); } return deferred.resolve(code); }; options = { port: (ref = program.port) != null ? ref : 6379, host: (ref1 = program.host) != null ? ref1 : 'localhost', password: (ref2 = program.password) != null ? ref2 : null, lazyConnect: true, connectTimeout: connectTimeout, retryStrategy: function(times) { attempts = times + 1; if (!quiet) { console.log("Attempt " + times + " timed out. Time elapsed: " + watch); } if (watch.duration().millis() > totalTimeout) { console.log("Could not connect to Redis."); wrapUp(1); } return Math.min(connectTimeout, Math.max(0, totalTimeout - watch.duration().millis())); } }; redis = new Redis(options); connected = false; redis.info('server').then(function(result) { connected = true; watch.stop(); if (!quiet) { console.log("Connected. " + attempts + " attempt(s) over " + watch); } return wrapup(0); })["catch"](function(error) { console.log("Error:", error, "\nStack:\n", error.stack); return wrapup(1); }); return deferred.promise; }; runScript = function() { var config, ref, ref1, ref2, ref3, ref4, ref5, ref6; program.option('-D, --database <db_number>', 'Redis database (default is 0)').option('-h, --host <hostname>', 'Redis host (default is localhost)').option('-p, --port <port>', 'Redis port (default is 6379)', parseInt).option('-P, --password <password>', 'Redis auth password (default is empty)').option('-q, --quiet', 'Silence non-error output (default is false)').option('-t, --connect-timeout <milliseconds>', 'Individual connection attempt timeout (default is 250)', parseInt).option('-T, --total-timeout <milliseconds>', 'Total timeout across all connect attempts (dfault is 15000)', parseInt).parse(process.argv); config = { host: (ref = program.host) != null ? ref : 'localhost', port: (ref1 = program.port) != null ? ref1 : 6379, password: (ref2 = program.password) != null ? ref2 : null, database: (ref3 = program.database) != null ? ref3 : 0, connectTimeout: (ref4 = program.connectTimeout) != null ? ref4 : 250, totalTimeout: (ref5 = program.totalTimeout) != null ? ref5 : 15000, quiet: (ref6 = program.quiet) != null ? ref6 : false }; return waitForRedis(config).then(function(code) { return process.exit(code); }); }; module.exports = { await: waitForRedis, run: runScript }; if (require.main === module) { runScript(); } }).call(this);