/// var docopt = require('docopt'); var prettystream = require('bunyan-debug-stream'); import Promise = require('bluebird'); import bunyan = require('bunyan'); import path = require('path'); var Int64 = require('node-int64'); var fs : any = Promise.promisifyAll(require('fs')); var thrift = require('thrift'); var StreamingSequencerServiceTypes = require('../lib/StreamingSequencerService_types.js'); var CommonTypes = require('../lib/Common_types.js'); var StreamingSequencerService = require('../lib/StreamingSequencerService.js'); var invokedas : string = path.basename(process.argv[1]); var doc : string = `Usage: ${ invokedas } serve ${ invokedas } -h | --help | --version Options: -v Show verbose log messages. (-vv for trace level) -h --help Show this screen. --version Show version number. `; var log : bunyan.Logger; var opts = docopt.docopt(doc); var globalCounter = new Int64(0x0); initialize(opts).then(function () { return checkPrereqs(opts) .catch(function(e){ log.fatal("Prerequisite not met: " + e); throw("Failed to start due to unmet prerequisite."); }).then(function() { //figure out what to do based on arg if (opts['serve']) { serve(opts); } }); }) .catch(function(e) { log.fatal("Failed to initialize: ", e); }); function serve(opts: any) : void { log.info(`nodeJS streaming sequencer server starting on port ${opts['']}`); try { var server = thrift.createServer(StreamingSequencerService, { ping: function(result) { result(null, true); }, reset: function(result) { result(null); }, simulateFailure: function(enable: Boolean, result) { result(null); }, recover: function(lowbound, result) { globalCounter = lowbound; result(null); }, setAllocationSize: function(stream: String, result) { result(); }, nextstreampos: function(stream: String, result) { globalCounter = globalCounter + 1; result(null, globalCounter); }, nextpos: function(numTokens: Number, result) { globalCounter = globalCounter + numTokens; result(null, globalCounter); } }, { //no options }); server.listen(opts['']); } catch (e) { log.error("Error creating server", e.stack); } } function initialize(opts : any) : Promise { log = bunyan.createLogger({ name: 'corfudb-node-sequencer', streams: [{ level: opts['-v'][2] ? 'trace' : opts['-v'][1] ? 'debug' : 'info', stream: (process.stdout).isTTY ? prettystream({ basepath: __dirname, colors: { 'trace': 'white' } }) : process.stdout, type: (process.stdout).isTTY ? 'raw' : undefined, }] }) log.debug("Verbose logging enabled, options were:", opts); log.trace("Trace logging enabled (warning: this is very verbose!)"); return new Promise(function (fulfill, reject){ fulfill(null); }); } function checkPrereqs(opts: any) : Promise { return new Promise(function (fulfill, reject){ fulfill(null); }); }