UNPKG

wait-for-cassandra

Version:
96 lines (86 loc) 3.66 kB
// Generated by CoffeeScript 1.10.0 (function() { var Q, cassandra, durations, program, runScript, waitForCassandra; Q = require('q'); cassandra = require('cassandra-driver'); program = require('commander'); durations = require('durations'); waitForCassandra = function(config, totalTimeout, quiet) { var attempts, connectTimeout, connectWatch, deferred, ref, ref1, testConnection, watch; if (totalTimeout == null) { totalTimeout = 30000; } if (quiet == null) { quiet = false; } deferred = Q.defer(); watch = durations.stopwatch().start(); connectWatch = durations.stopwatch(); connectTimeout = (ref = config != null ? (ref1 = config.socketOptions) != null ? ref1.connectTimeout : void 0 : void 0) != null ? ref : 1000; attempts = 0; testConnection = function() { var client; attempts += 1; connectWatch.reset().start(); client = new cassandra.Client(config); return client.connect(function(error) { var connectDelay, totalRemaining; if (error != null) { if (!quiet) { console.log("[" + error + "] Attempt " + attempts + " timed out. Time elapsed: " + watch); } if (watch.duration().millis() > totalTimeout) { if (!quiet) { console.log("Could not connect to Cassandra."); } client.shutdown(); return deferred.resolve(false); } else { client.shutdown(); totalRemaining = Math.min(connectTimeout, Math.max(0, totalTimeout - watch.duration().millis())); connectDelay = Math.min(totalRemaining, Math.max(0, connectTimeout - connectWatch.duration().millis())); return setTimeout(testConnection, connectDelay); } } else { watch.stop(); if (!quiet) { console.log("Connected. " + attempts + " attempts over " + watch); } client.shutdown(); return deferred.resolve(true); } }); }; testConnection(); return deferred.promise; }; runScript = function() { var config, connectTimeout, quiet, ref, ref1, ref2, ref3, ref4, ref5, totalTimeout; program.option('-k, --keyspace <keyspace_name>', 'Cassandra keyspace to use (default is "system")').option('-h, --host <hostname>', 'Cassandra host (default is localhost)').option('-p, --port <port>', 'Cassandra port (default is 9042)', parseInt).option('-q, --quiet', 'Silence non-error output (default is false)').option('-t, --connect-timeout <milliseconds>', 'Individual connection attempt timeout (default is 1000)', parseInt).option('-T, --total-timeout <milliseconds>', 'Total timeout across all connect attempts (default is 30000)', parseInt).parse(process.argv); connectTimeout = (ref = program.connectTimeout) != null ? ref : 1000; totalTimeout = (ref1 = program.totalTimeout) != null ? ref1 : 30000; quiet = (ref2 = program.quiet) != null ? ref2 : false; config = { contactPoints: [(ref3 = program.host) != null ? ref3 : 'localhost'], keyspace: (ref4 = program.keyspace) != null ? ref4 : 'system', protocolOptions: { port: (ref5 = program.port) != null ? ref5 : 9042 }, socketOptions: { connectTimeout: connectTimeout } }; return waitForCassandra(config, totalTimeout, quiet).then(function(connected) { var code; code = connected ? 0 : 1; return process.exit(code); }); }; module.exports = { await: waitForCassandra, run: runScript }; if (require.main === module) { runScript(); } }).call(this);