Browse Source

Add MySQL-Sequelize fortunes

Zane Kansil 10 years ago
parent
commit
c6e5da0510

+ 1 - 0
frameworks/JavaScript/nodejs/benchmark_config.json

@@ -65,6 +65,7 @@
       "db_url": "/mysql-orm/db",
       "query_url": "/mysql-orm/queries?queries=",
       "update_url": "/mysql-orm/updates?queries=",
+      "fortune_url": "/mysql-orm/fortunes",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",

+ 56 - 15
frameworks/JavaScript/nodejs/hello.js

@@ -7,7 +7,8 @@ var cluster = require('cluster')
   , async = require('async')
   , mongoose = require('mongoose')
   , conn = mongoose.connect('mongodb://127.0.0.1/hello_world')
-  , MongoClient = require('mongodb').MongoClient;
+  , MongoClient = require('mongodb').MongoClient
+  , Handlebars = require('handlebars');
 
 // MongoDB Raw Setup
 var collection = null;
@@ -52,19 +53,39 @@ var World = sequelize.define('World', {
   freezeTableName: true
 });
 
-// No additional work on fortunes has been done
-//
-// var Fortune = sequelize.define('Fortune', {
-//   id: {
-//     type: 'Sequelize.INTEGER'
-//   },
-//   message: {
-//     type: 'Sequelize.STRING'
-//   }
-// }, {
-//   timestamps: false,
-//   freezeTableName: true
-// });
+var Fortune = sequelize.define('Fortune', {
+  id: {
+    type: 'Sequelize.INTEGER'
+  },
+  message: {
+    type: 'Sequelize.STRING'
+  }
+}, {
+  timestamps: false,
+  freezeTableName: true
+});
+
+// Fortunes template via handlebars setup
+var FORTUNES_TEMPLATE = [
+  "<!DOCTYPE html>",
+  "<html>",
+  "<head><title>Fortunes</title></head>",
+  "<body>",
+  "<table>",
+    "<tr>",
+      "<th>id</th>",
+      "<th>message</th>",
+    "</tr>",
+    "{{#fortunes}}",
+    "<tr>",
+      "<td>{{id}}</td>",
+      "<td>{{message}}</td>",
+    "</tr>",
+    "{{/fortunes}}",
+  "</table>",
+  "</body>",
+  "</html>"
+].join('');
 
 // Helper functions
 function getRandomNumber() {
@@ -89,7 +110,7 @@ function addTfbHeaders(res, headerType) {
   } else if (headerType === 'json') {
     headers['Content-Type'] = 'application/json';
   } else if (headerType === 'html') {
-    headers['Content-Type'] = 'text/plain';
+    headers['Content-Type'] = 'text/html; cherset=UTF-8';
   }
 
   res.writeHead(200, headers);
@@ -163,6 +184,10 @@ function mysqlUpdateQuery(callback) {
 
 var GREETING = "Hello, World!";
 var HELLO_OBJ = { message: GREETING };
+var ADDITIONAL_FORTUNE = {
+  id: 0,
+  message: 'Additional fortune added at request time.'
+};
 
 var responses = {
 
@@ -269,6 +294,20 @@ var responses = {
     });
   },
 
+  sequelizeFortunes: function (req, res) {
+    Fortune.findAll().complete(function (err, fortunes) {
+      fortunes.push(ADDITIONAL_FORTUNE);
+      fortunes.sort(function (a, b) {
+        return a.message.localeCompare(b.message);
+      });
+      addTfbHeaders(res, 'html');
+      var template = Handlebars.compile(FORTUNES_TEMPLATE);
+      res.end(template({
+        fortunes: fortunes
+      }));
+    });
+  },
+
   sequelizeUpdates: function (queries, req, res) {
     var selectFunctions = fillArray(sequelizeQuery, queries);
 
@@ -355,6 +394,8 @@ if (cluster.isMaster) {
       return responses.mongodbSingleQuery(req, res);
     } else if (route === '/mysql-orm/db') {
       return responses.sequelizeSingleQuery(req, res);
+    } else if (route === '/mysql-orm/fortunes') {
+      return responses.sequelizeFortunes(req, res);
     } else if (route === '/mysql/db') {
       return responses.mysqlSingleQuery(req, res);
     }

+ 12 - 11
frameworks/JavaScript/nodejs/package.json

@@ -1,13 +1,14 @@
 {
-    "name": "application-name"
-  , "version": "0.0.1"
-  , "private": true
-  , "dependencies": {
-      "mongoose": "4.0.1" 
-    , "async": "0.9.0"
-    , "mongodb": "2.0.27"
-    , "sequelize": "2.0.6"
-    , "mysql": "2.6.2"
-  }
-  , "main": "hello.js"
+  "name": "application-name",
+  "version": "0.0.1",
+  "private": true,
+  "dependencies": {
+    "async": "0.9.0",
+    "handlebars": "^3.0.3",
+    "mongodb": "2.0.27",
+    "mongoose": "4.0.1",
+    "mysql": "2.6.2",
+    "sequelize": "2.0.6"
+  },
+  "main": "hello.js"
 }