sequelize.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. const h = require('../helper');
  2. const Sequelize = require('sequelize');
  3. const sequelize = new Sequelize('hello_world', 'benchmarkdbuser', 'benchmarkdbpass', {
  4. host: 'tfb-database',
  5. dialect: 'mysql',
  6. logging: false,
  7. pool: {
  8. max: 50,
  9. min: 0,
  10. idle: 10000
  11. }
  12. });
  13. const Worlds = sequelize.define('World', {
  14. id: {
  15. type: 'Sequelize.INTEGER',
  16. primaryKey: true
  17. },
  18. randomNumber: { type: 'Sequelize.INTEGER' }
  19. }, {
  20. timestamps: false,
  21. freezeTableName: true
  22. });
  23. const Fortunes = sequelize.define('Fortune', {
  24. id: {
  25. type: 'Sequelize.INTEGER',
  26. primaryKey: true
  27. },
  28. message: { type: 'Sequelize.STRING' }
  29. }, {
  30. timestamps: false,
  31. freezeTableName: true
  32. });
  33. const randomWorldPromise = () => {
  34. return Worlds.findOne({
  35. where: { id: h.randomTfbNumber() }
  36. }).then((results) => {
  37. return results;
  38. }).catch((err) => {
  39. process.exit(1);
  40. });
  41. };
  42. module.exports = {
  43. SingleQuery: (req, res) => {
  44. randomWorldPromise().then((world) => {
  45. h.addTfbHeaders(res, 'json');
  46. res.end(JSON.stringify(world));
  47. });
  48. },
  49. MultipleQueries: (queries, req, res) => {
  50. const worldPromises = [];
  51. for (let i = 0; i < queries; i++) {
  52. worldPromises.push(randomWorldPromise());
  53. }
  54. Promise.all(worldPromises).then((worlds) => {
  55. h.addTfbHeaders(res, 'json');
  56. res.end(JSON.stringify(worlds));
  57. });
  58. },
  59. Fortunes: (req, res) => {
  60. Fortunes.findAll().then((fortunes) => {
  61. fortunes.push(h.additionalFortune());
  62. fortunes.sort((a, b) => {
  63. return a.message.localeCompare(b.message);
  64. });
  65. h.addTfbHeaders(res, 'html');
  66. res.end(h.fortunesTemplate({
  67. fortunes: fortunes
  68. }));
  69. }).catch((err) => {
  70. console.log(err.stack);
  71. process.exit(1);
  72. });
  73. },
  74. Updates: (queries, req, res) => {
  75. const worldPromises = [];
  76. for (let i = 0; i < queries; i++) {
  77. worldPromises.push(randomWorldPromise());
  78. }
  79. const worldUpdate = (world) => {
  80. world.randomNumber = h.randomTfbNumber();
  81. return Worlds.update({
  82. randomNumber: world.randomNumber
  83. },
  84. {
  85. where: { id: world.id }
  86. }).then((results) => {
  87. return world;
  88. }).catch((err) => {
  89. process.exit(1);
  90. });
  91. };
  92. Promise.all(worldPromises).then((worlds) => {
  93. const updates = worlds.map((e) => worldUpdate(e));
  94. Promise.all(updates).then((updated) => {
  95. h.addTfbHeaders(res, 'json');
  96. res.end(JSON.stringify(updated));
  97. });
  98. });
  99. }
  100. };