Guest User

Untitled

a guest
Jan 24th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. #!/usr/bin/env node
  2.  
  3. require('long-stack-traces');
  4.  
  5. var urlUtils = require('url')
  6. , util = require('util')
  7. , nopt = require('nopt')
  8. , EventEmitter = require('events').EventEmitter
  9. , _ = require('underscore')
  10. , socketio = require('socket.io-client');
  11.  
  12. var opts = {
  13. host: String
  14. , port: Number
  15. , concurrency: Number
  16. , time: Number
  17. , delay: Number
  18. , log: Boolean
  19. , verbose: Boolean
  20. }
  21. , shorts = {
  22. h: '--host'
  23. , p: '--port'
  24. , c: '--concurrency'
  25. , t: '--time'
  26. , d: '--delay'
  27. , l: '--log'
  28. , v: '--verbose'
  29. }
  30. , parsed = nopt(opts, shorts)
  31.  
  32.  
  33. var seeds = 0;
  34. function StressTest(url, opts) {
  35. this.clients = {};
  36. this.url = url;
  37. this.opts = _.extend({
  38. concurrency: 10 // clients
  39. , time: 10 // sec
  40. , delay: 10 // ms
  41. }, opts);
  42. }
  43. util.inherits(StressTest, EventEmitter);
  44. StressTest.prototype.start = function(callback) {
  45. for(var i = 0; i < this.opts.concurrency; i++) {
  46. this.addClient();
  47. }
  48.  
  49. var start = +new Date();
  50.  
  51. var send = function() {
  52. _.each(this.clients, function(client, id) {
  53. client.send({
  54. type: 'COLLABROOM'
  55. , component: 'pad'
  56. , data: {
  57. type: 'USER_CHANGES'
  58. , baseRev: 41
  59. , changeset: 'Z:1h>3|8=1g*0+3$adf'
  60. , apool: {
  61. numToAttrib: {}
  62. , nextNum: 1
  63. }
  64. }
  65. });
  66. });
  67. var lapsed = (new Date() - start) / 1000;
  68. if(lapsed < this.time) {
  69. this.setTimeout(send, delay);
  70. } else {
  71. callback && process.nextTick(callback);
  72. }
  73. }
  74. send();
  75. }
  76. StressTest.prototype.addClient = function(client) {
  77. var urlObj = urlUtils.parse(this.url);
  78. console.error(urlObj);
  79. client = client || socketio.connect(urlObj.protocol + '://' + urlObj.host, {
  80. resource: urlObj.pathname
  81. });
  82. client.id = seeds++;
  83. this.clients[client.id] = client;
  84.  
  85. var onError = function() {
  86. var args = Array.prototype.slice.call(arguments);
  87. args.unshift('error', client);
  88. this.emit.apply(this, args);
  89. }
  90. client.on('error', onError);
  91. }
  92.  
  93. var opts = {}
  94. , url = parsed.remain && parsed.remain[0] || '/socket.io'
  95. , urlObj = urlUtils.parse(url);
  96.  
  97. opts.host = parsed.host || urlObj.hostname || 'localhost';
  98.  
  99. urlObj.protocol = 'http:';
  100. urlObj.hostname = parsed.host || urlObj.hostname || 'localhost';
  101. urlObj.port = parsed.port || urlObj.port || 9001;
  102. url = urlUtils.format(urlObj);
  103.  
  104. var test = new StressTest(url, parsed);
  105. test.on('error', console.error)
  106. .start();
Add Comment
Please, Sign In to add comment