UNPKG

multimq

Version:

Wrapper for using different message queue systems, such as: zeromq, axon and hypermq.

96 lines (78 loc) 2.36 kB
var util = require('util'); var multimq = require('..') , program = require('commander') , humanize = require('humanize-number'); program .option('-s, --size <n>', 'message size in bytes [200]', parseInt) .option('-d, --duration <n>', 'duration of test [5000]', parseInt) .parse(process.argv) var service = multimq.service(); var options = { service: 'myService', mq: 'hypermq', pattern: 'sub', socket: 'connect', hostname: '127.0.0.1', port: 3443, secure: false, key: __dirname + '/keys/test-key.pem', cert: __dirname + '/keys/test-cert.pem', apikey: 'za91j2bk72f483ap62x', protocol: 'amp' }; var myService = new service(options); var n = 0; var ops = program.duration || 5000; var bytes = program.size || 200; var prev = start = Date.now(); var results = []; var eventsX = 0; var msgBatchesID = 0; myService.on('message', function(msg){ //console.log('msg> ' + util.inspect(msg[0], true, 99, true)); if (n++ % ops == 0) { var ms = Date.now() - prev; var sec = ms / 1000; var persec = ops / sec | 0; results.push(persec); process.stdout.write('\r [' + persec + ' ops/s] [' + n + ']'); prev = Date.now(); } eventsX += msg[0].events.length; msgBatchesID = msg[0].id; }); function sum(arr) { return arr.reduce(function(sum, n){ return sum + n; }); } function min(arr) { return arr.reduce(function(min, n){ return n < min ? n : min; }); } function median(arr) { arr = arr.sort(); return arr[arr.length / 2 | 0]; } function done(){ var ms = Date.now() - start; var avg = n / (ms / 1000); console.log('\n'); console.log(' min: %s ops/s', humanize(min(results))); console.log(' mean: %s ops/s', humanize(avg | 0)); console.log(' median: %s ops/s', humanize(median(results))); console.log(' total: %s ops in %ds', humanize(n), ms / 1000); console.log(' through: %d mb/s', ((avg * bytes) / 1024 / 1024).toFixed(2)); console.log(); console.log('------------------------------'); console.log(' events: ' + humanize(eventsX) ); console.log(' id: ' + humanize(msgBatchesID)); console.log(' *** mean: ' + humanize(Math.round( eventsX / (ms / 1000) )) + ' ops/s.'); console.log('------------------------------'); process.exit(); } process.on('SIGINT', done); setTimeout(done, program.duration || 5000);