app.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /**
  2. * Module dependencies.
  3. */
  4. var cluster = require('cluster'),
  5. numCPUs = require('os').cpus().length,
  6. windows = require('os').platform() == 'win32',
  7. Hapi = require('hapi'),
  8. mongoose = require('mongoose'),
  9. async = require('async'),
  10. conn = mongoose.connect('mongodb://localhost/hello_world'),
  11. connMap = { user: 'benchmarkdbuser', password: 'benchmarkdbpass', database: 'hello_world', host: 'localhost' };
  12. var WorldSchema = new mongoose.Schema({
  13. id : Number,
  14. randomNumber: Number
  15. }, {
  16. collection: 'world'
  17. }),
  18. MWorld = conn.model('World', WorldSchema);
  19. if (!windows) {
  20. var Mapper = require('mapper');
  21. Mapper.connect(connMap, {verbose: false, strict: false});
  22. var World = Mapper.map('World', 'id', 'randomNumber');
  23. var Fortune = Mapper.map('Fortune', 'id', 'message');
  24. }
  25. if (cluster.isMaster) {
  26. // Fork workers.
  27. for (var i = 0; i < numCPUs; i++) {
  28. cluster.fork();
  29. }
  30. cluster.on('exit', function(worker, code, signal) {
  31. console.log('worker ' + worker.pid + ' died');
  32. });
  33. } else {
  34. var server = module.exports = Hapi.createServer(null, 8080);
  35. server.route({
  36. method: 'GET',
  37. path: '/json',
  38. handler: function(req) {
  39. req.reply({ message: 'Hello World!' })
  40. }
  41. });
  42. server.route({
  43. method: 'GET',
  44. path: '/mongoose/{queries?}',
  45. handler: function(req){
  46. var queries = req.params.queries || 1,
  47. queryFunctions = [];
  48. queries = Math.min(Math.max(queries, 1), 500);
  49. for (var i = 1; i <= queries; i++) {
  50. queryFunctions.push(function(callback){
  51. MWorld.findOne({ id: (Math.floor(Math.random() * 10000) + 1) }).exec(callback);
  52. });
  53. }
  54. async.parallel(queryFunctions, function(err, results){
  55. req.reply(results).header('Server', 'hapi');
  56. });
  57. }
  58. });
  59. server.route({
  60. method: 'GET',
  61. path: '/mysql-orm/{queries?}',
  62. handler: function(req){
  63. if (windows) return req.reply(Hapi.error.internal('Not supported on windows'));
  64. var queries = req.params.queries || 1,
  65. queryFunctions = [];
  66. queries = Math.min(Math.max(queries, 1), 500);
  67. for (var i = 1; i <= queries; i++) {
  68. queryFunctions.push(function(callback){
  69. World.findById(Math.floor(Math.random() * 10000) + 1, callback);
  70. });
  71. }
  72. async.parallel(queryFunctions, function(err, results){
  73. req.reply(results).header('Server', 'hapi');
  74. });
  75. }
  76. });
  77. server.start();
  78. }