DatabaseQueryController.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /**
  2. * DatabaseQueryController
  3. *
  4. * @description :: Server-side logic for managing Database Queries
  5. */
  6. var Sequelize = require('sequelize')
  7. var sequelize = new Sequelize(
  8. 'hello_world', 'benchmarkdbuser', 'benchmarkdbpass',
  9. {
  10. host: '127.0.0.1',
  11. dialect: 'mysql',
  12. pool: {
  13. max: 5000,
  14. min: 0,
  15. idle: 5000
  16. },
  17. // hide the SQL queries being run
  18. logging: false
  19. });
  20. var World = sequelize.define('World', {
  21. id: Sequelize.INTEGER,
  22. randomNumber: Sequelize.INTEGER
  23. },
  24. {
  25. // prevents sequelize from assuming the table is called 'Worlds'
  26. freezeTableName: true,
  27. timestamps: false
  28. })
  29. var Fortune = sequelize.define('Fortune', {
  30. id: Sequelize.INTEGER,
  31. message: Sequelize.STRING
  32. },
  33. {
  34. // prevents sequelize from assuming the table is called 'Worlds'
  35. freezeTableName: true,
  36. timestamps: false
  37. })
  38. var randomTFBnumber = function() {
  39. return Math.floor(Math.random() * 10000) + 1;
  40. }
  41. var worldQuery = function(callback) {
  42. World.findOne({
  43. where: { id: randomTFBnumber() }
  44. }).complete(callback);
  45. }
  46. var worldUpdate = function(world, callback) {
  47. World.update({
  48. randomNumber: world.randomNumber
  49. },
  50. {
  51. where: {
  52. id: world.id
  53. }
  54. }
  55. ).complete(callback);
  56. }
  57. module.exports = {
  58. /**
  59. * Test 2: Single Database Query
  60. */
  61. single: function (req, res) {
  62. World.findOne({
  63. where: { id: randomTFBnumber() }
  64. }).then(function(results) {
  65. return res.json(results.get());
  66. })
  67. },
  68. /**
  69. * Test 3: Multiple Database Query
  70. */
  71. multiple: function (req, res) {
  72. var queries = req.param('queries');
  73. var toRun = [];
  74. queries = Math.min(Math.max(queries, 1), 500) || 1;
  75. for (var i = 0; i < queries; i++) {
  76. toRun.push(worldQuery);
  77. }
  78. async.parallel(toRun, function(err, results) {
  79. if (!err) {
  80. res.json(results);
  81. } else {
  82. res.badRequest('Unexpected failure to fetch multiple records.');
  83. }
  84. });
  85. },
  86. /**
  87. * Test 4: Fortunes
  88. */
  89. fortunes: function(req, res) {
  90. Fortune.findAll().then(function (fortunes) {
  91. fortunes.push({
  92. id: 0,
  93. message: "Additional fortune added at request time."
  94. });
  95. fortunes.sort(function (a, b) {
  96. return a.message.localeCompare(b.message);
  97. });
  98. return res.render('fortunes', { 'fortunes': fortunes });
  99. })
  100. },
  101. /**
  102. * Test 5: Database Updates
  103. */
  104. updates: function(req, res) {
  105. var queries = req.param('queries');
  106. var worlds = [];
  107. queries = Math.min(Math.max(queries, 1), 500) || 1;
  108. for (var i = 0; i < queries; i++) {
  109. worlds.push({
  110. id: randomTFBnumber(),
  111. randomNumber: randomTFBnumber()
  112. });
  113. }
  114. async.map(worlds, worldUpdate, function(err, results) {
  115. if (!err) {
  116. res.json(worlds);
  117. } else {
  118. res.badRequest('Unexpected failure to update records.');
  119. }
  120. });
  121. }
  122. };