index.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. var child = require('child_process');
  2. var fs = require('fs');
  3. function hrToStr(diff) {
  4. var ldateDiff = ( diff[0] * 1000000 + diff[1] / 1000 ) / 1000;
  5. var ldateDiffStr = "";
  6. if(ldateDiff > 1000)
  7. ldateDiffStr = (ldateDiff / 1000).toFixed(2) + "s";
  8. else {
  9. ldateDiffStr = ldateDiff.toFixed(2) +"ms";
  10. }
  11. return ldateDiffStr;
  12. }
  13. module.exports.bundleActivator = {
  14. // Couple of tests
  15. start(context) {
  16. context.manager.load(__dirname + "/http-test");
  17. this.context = context;
  18. context.events
  19. .channel('core-shell').channel('cmd')
  20. .on('test',(req,res,e) => {
  21. var cmds = ["events","cpu","mem","ping","siege"];
  22. var [subcmd,...args] = req.args;
  23. if(cmds.indexOf(subcmd) == -1) {
  24. res.write("Wrong\n");
  25. res.write("Available tests:" + cmds + "\n");
  26. return;
  27. };
  28. this[subcmd](req,res,e);
  29. });
  30. var lastPing;
  31. var lchannel = context.events.channel('stress-test');
  32. lchannel
  33. .on('ping',(e) => {
  34. lastPing = process.hrtime();
  35. lchannel.emit('pong')
  36. })
  37. .on('pong',(e) => {
  38. var now = hrToStr(process.hrtime(lastPing));
  39. console.log("Time taken to poing: " + now);
  40. });
  41. },
  42. ping(req,res,e) {
  43. this.context.channel(this.context.name).emit('ping',e);
  44. },
  45. events(req,res,e) {
  46. res.write("Adding 1 million listeners\n");
  47. var count = 1000000;
  48. for(;count;count--) {
  49. this.context.channel('stress-test').on('stress-test:'+Math.random().toString(36).substring(7) + ':test:event',() => { var arr = new Array(5); });
  50. }
  51. },
  52. mem(req,res,e) {
  53. var context = this.context;
  54. var ntime = 1000; // 1 second
  55. var mark = new Date();
  56. var now;
  57. this.count=0;
  58. do {
  59. this.context.manager.load(__dirname + "/memory-test-unit");
  60. this.context.manager.unregister("memory-test-unit");
  61. this.count++;
  62. now = new Date();
  63. } while((now - mark)< ntime); // 500 ms
  64. res.write("Operations: " + this.count + "\n");
  65. // Loop with tick
  66. //
  67. var toggle = false;
  68. this.ci = context.setInterval(() => {
  69. res.write("Toggling module\n");
  70. if(toggle) {
  71. this.context.manager.load(__dirname + "/memory-test-unit");
  72. }else {
  73. this.context.manager.unregister("memory-test-unit");
  74. }
  75. toggle = !toggle;
  76. },5000);
  77. },
  78. siege(req,res,e) {
  79. e.wait();
  80. res.write("Doing 10s test!\n");
  81. var proc = child.exec('siege -t10s http://127.0.0.1:3500/test');
  82. res.write("\n");
  83. //proc.stdout.pipe(res);
  84. proc.stderr.pipe(process.stderr);
  85. proc.on('close',() => {
  86. res.write("cmd done\n");
  87. e.done();
  88. });
  89. }
  90. }