hello.js 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. var cluster = require('cluster')
  2. , numCPUs = require('os').cpus().length
  3. , http = require('http')
  4. , url = require('url');
  5. var h = require('./helper.js');
  6. //
  7. // Handlers, one for each db config
  8. //
  9. var MongodbRawHandler = require('./handlers/mongodb-raw');
  10. var MySQLRawHandler = require('./handlers/mysql-raw');
  11. // Mongoose is a popular Node/MongoDB driver
  12. var MongooseHandler = require('./handlers/mongoose');
  13. // Sequelize is a popular Node/SQL driver
  14. var SequelizeHandler = require('./handlers/sequelize');
  15. // Node's redis package uses the C bindings of the hiredis library
  16. var HiredisHandler = require('./handlers/redis');
  17. if (cluster.isMaster) {
  18. // Fork workers.
  19. for (var i = 0; i < numCPUs; i++) {
  20. cluster.fork();
  21. }
  22. cluster.on('exit', function (worker, code, signal) {
  23. console.log('worker ' + worker.pid + ' died');
  24. });
  25. } else {
  26. http.createServer(function (req, res) {
  27. var values = url.parse(req.url, true);
  28. var route = values.pathname;
  29. // Basic routes, no db required
  30. if (route === '/json') {
  31. return h.responses.jsonSerialization(req, res);
  32. } else if (route === '/plaintext') {
  33. return h.responses.plaintext(req, res);
  34. // No queries parameter required
  35. } else if (route === '/mongoose/db') {
  36. return MongooseHandler.SingleQuery(req, res);
  37. } else if (route === '/mongoose/fortunes') {
  38. return MongooseHandler.Fortunes(req, res);
  39. } else if (route === '/mongodb/db') {
  40. return MongodbRawHandler.SingleQuery(req, res);
  41. } else if (route === '/mongodb/fortunes') {
  42. return MongodbRawHandler.Fortunes(req, res);
  43. } else if (route === '/sequelize/db') {
  44. return SequelizeHandler.SingleQuery(req, res);
  45. } else if (route === '/sequelize/fortunes') {
  46. return SequelizeHandler.Fortunes(req, res);
  47. } else if (route === '/mysql/db') {
  48. return MySQLRawHandler.SingleQuery(req, res);
  49. } else if (route === '/mysql/fortunes') {
  50. return MySQLRawHandler.Fortunes(req, res);
  51. } else if (route === '/hiredis/db') {
  52. return HiredisHandler.SingleQuery(req, res);
  53. } else if (route === '/hiredis/fortunes') {
  54. return HiredisHandler.Fortunes(req, res);
  55. }
  56. else {
  57. var queries = isNaN(values.query.queries) ? 1 : parseInt(values.query.queries, 10);
  58. queries = Math.min(Math.max(queries, 1), 500);
  59. if (route === '/mongoose/queries') {
  60. return MongooseHandler.MultipleQueries(queries, req, res);
  61. } else if (route === '/mongoose/updates') {
  62. return MongooseHandler.Updates(queries, req, res);
  63. } else if (route === '/mongodb/queries') {
  64. return MongodbRawHandler.MultipleQueries(queries, req, res);
  65. } else if (route === '/mongodb/updates') {
  66. return MongodbRawHandler.Updates(queries, req, res);
  67. } else if (route === '/sequelize/queries') {
  68. return SequelizeHandler.MultipleQueries(queries, req, res);
  69. } else if (route === '/sequelize/updates') {
  70. return SequelizeHandler.Updates(queries, req, res);
  71. } else if (route === '/mysql/queries') {
  72. return MySQLRawHandler.MultipleQueries(queries, req, res);
  73. } else if (route === '/mysql/updates') {
  74. return MySQLRawHandler.Updates(queries, req, res);
  75. } else if (route === '/hiredis/queries') {
  76. return HiredisHandler.MultipleQueries(queries, req, res);
  77. } else if (route === '/hiredis/updates') {
  78. return HiredisHandler.Updates(queries, req, res);
  79. } else {
  80. return responses.routeNotImplemented(req, res);
  81. }
  82. }
  83. }).listen(8080, function() {
  84. console.log("NodeJS worker listening on port 8080");
  85. });
  86. }