Преглед на файлове

Add postgres testing to sailsjs

Zane Kansil преди 10 години
родител
ревизия
b1de0e148b

+ 154 - 0
frameworks/JavaScript/sailsjs/api/controllers/SequelizePostgresController.js

@@ -0,0 +1,154 @@
+/**
+ * SequelizePostgresController
+ *
+ * @description :: Server-side logic for managing Database Queries
+ */
+
+var h = require('../services/helper')
+var Promise = require('bluebird')
+
+var Sequelize = require('sequelize')
+var sequelize = new Sequelize(
+  'hello_world', 'benchmarkdbuser', 'benchmarkdbpass',
+  {
+    host: '127.0.0.1',
+    dialect: 'postgres',
+    pool: {
+      max: 5000,
+      min: 0,
+      idle: 5000
+    },
+    // hide the SQL queries being run
+    logging: false
+  })
+
+
+var Worlds = sequelize.define('World', {
+  id: Sequelize.INTEGER,
+  randomnumber: Sequelize.INTEGER
+},
+{
+  // prevents sequelize from assuming the table is called 'Worlds'
+  freezeTableName: true,
+  timestamps: false
+})
+
+
+var Fortunes = sequelize.define('Fortune', {
+  id: Sequelize.INTEGER,
+  message: Sequelize.STRING
+},
+{
+  // prevents sequelize from assuming the table is called 'Fortunes'
+  freezeTableName: true,
+  timestamps: false
+})
+
+
+var randomWorldPromise = function() {
+  var promise = Worlds
+    .findOne({
+      where: { id: h.randomTfbNumber() }
+    })
+    .then(function (world) {
+      return world
+    })
+    .catch(function (err) {
+      process.exit(1)
+    })
+  return promise
+}
+
+var updateWorld = function(world) {
+  var promise = Worlds
+    .update(
+      { randomNumber: world.randomNumber },
+      { where: { id: world.id } }
+    )
+    .then(function (results) {
+      return world
+    })
+    .catch(function (err) {
+      process.exit(1)
+    })
+  return promise
+}
+
+
+module.exports = {
+
+  /**
+   * Test 2: Single Database Query
+   */
+  Single: function(req, res) {
+    randomWorldPromise()
+      .then(function (world) {
+        res.json(world)
+      })
+  },
+
+
+  /**
+   * Test 3: Multiple Database Query
+   */
+  Multiple: function(req, res) {
+    var queries = h.getQueries(req)
+    var toRun = []
+
+    for (var i = 0; i < queries; i++) {
+      toRun.push(randomWorldPromise())
+    }
+
+    Promise
+      .all(toRun)
+      .then(function (worlds) {
+        res.json(worlds)
+      })
+  },
+
+
+  /**
+   * Test 4: Fortunes
+   */
+  Fortunes: function(req, res) {
+    Fortunes
+      .findAll()
+      .then(function (fortunes) {
+        fortunes.push(h.ADDITIONAL_FORTUNE)
+        fortunes.sort(function (a, b) {
+          return a.message.localeCompare(b.message)
+        })
+        res.render('fortunes', { 'fortunes': fortunes })
+      })
+      .catch(function (err) {
+        process.exit(1)
+      })
+  },
+
+
+  /**
+   * Test 5: Database Updates
+   */
+  Updates: function(req, res) {
+    var queries = h.getQueries(req)
+    var worldPromises = []
+
+    for (var i = 0; i < queries; i++) {
+      worldPromises.push(randomWorldPromise())
+    }
+
+    Promise
+      .all(worldPromises)
+      .map(function (world) {
+        return updateWorld(world)
+      })
+      .then(function (updated) {
+        res.json(updated)
+      })
+      .catch(function (err) {
+        process.exit(1)
+      })
+  }
+
+}
+

+ 21 - 0
frameworks/JavaScript/sailsjs/benchmark_config.json

@@ -23,6 +23,27 @@
       "display_name": "Sails.js",
       "notes": "",
       "versus": "node"
+    },
+    "postgres": {
+      "setup_file": "setup",
+      "db_url": "/postgres/db",
+      "query_url": "/postgres/queries?queries=",
+      "fortune_url": "/postgres/fortunes",
+      "update_url": "/postgres/updates?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "Postgres",
+      "framework": "sailsjs",
+      "language": "JavaScript",
+      "orm": "Full",
+      "platform": "nodejs",
+      "webserver": "None",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "Sails.js",
+      "notes": "",
+      "versus": "node"
     }
   }]
 }

+ 11 - 6
frameworks/JavaScript/sailsjs/config/routes.js

@@ -48,12 +48,17 @@ module.exports.routes = {
 
   // TFB routes here
 
-  'get /json':      'StaticTestController.json',
-  'get /plaintext': 'StaticTestController.plaintext',
+  'get /json':              'StaticTestController.json',
+  'get /plaintext':         'StaticTestController.plaintext',
 
-  'get /mysql/db':        'SequelizeMySQLController.single',
-  'get /mysql/queries':   'SequelizeMySQLController.multiple',
-  'get /mysql/fortunes':  'SequelizeMySQLController.fortunes',
-  'get /mysql/updates':   'SequelizeMySQLController.updates'
+  'get /mysql/db':          'SequelizeMySQLController.single',
+  'get /mysql/queries':     'SequelizeMySQLController.multiple',
+  'get /mysql/fortunes':    'SequelizeMySQLController.fortunes',
+  'get /mysql/updates':     'SequelizeMySQLController.updates',
+
+  'get /postgres/db':       'SequelizePostgresController.single',
+  'get /postgres/queries':  'SequelizePostgresController.multiple',
+  'get /postgres/fortunes': 'SequelizePostgresController.fortunes',
+  'get /postgres/updates':  'SequelizePostgresController.updates'
 
 };