Ver código fonte

JavaScript tests & mongodb for docker (#3303)

* JavaScript/node and mongodb for docker

* express and hapi

* fix hapi & express fortune

* add koa

* koa mysql

* sailsjs

* travis for sails

* sails postgres

* ringo work

* ringojs

* ringo
Nate 7 anos atrás
pai
commit
dbe92ab505
71 arquivos alterados com 328 adições e 675 exclusões
  1. 6 6
      .travis.yml
  2. 0 2
      deployment/vagrant/core.rb
  3. 0 2
      frameworks/JavaScript/express/.gitignore
  4. 0 3
      frameworks/JavaScript/express/benchmark_config.json
  5. 9 0
      frameworks/JavaScript/express/express-mongodb.dockerfile
  6. 9 0
      frameworks/JavaScript/express/express-mysql.dockerfile
  7. 9 0
      frameworks/JavaScript/express/express.dockerfile
  8. 3 5
      frameworks/JavaScript/express/mongodb-app.js
  9. 1 1
      frameworks/JavaScript/express/package.json
  10. 0 8
      frameworks/JavaScript/express/setup-mongodb.sh
  11. 0 8
      frameworks/JavaScript/express/setup-mysql.sh
  12. 0 8
      frameworks/JavaScript/express/setup.sh
  13. 12 15
      frameworks/JavaScript/hapi/benchmark_config.json
  14. 5 17
      frameworks/JavaScript/hapi/create-server.js
  15. 5 7
      frameworks/JavaScript/hapi/handlers/mongoose.js
  16. 1 1
      frameworks/JavaScript/hapi/handlers/sequelize-postgres.js
  17. 9 0
      frameworks/JavaScript/hapi/hapi-mysql.dockerfile
  18. 9 0
      frameworks/JavaScript/hapi/hapi-postgres.dockerfile
  19. 9 0
      frameworks/JavaScript/hapi/hapi.dockerfile
  20. 1 1
      frameworks/JavaScript/hapi/package.json
  21. 0 6
      frameworks/JavaScript/hapi/setup.sh
  22. 12 15
      frameworks/JavaScript/koa/benchmark_config.json
  23. 5 19
      frameworks/JavaScript/koa/create-server.js
  24. 1 1
      frameworks/JavaScript/koa/handlers/sequelize-postgres.js
  25. 10 0
      frameworks/JavaScript/koa/koa-mysql.dockerfile
  26. 10 0
      frameworks/JavaScript/koa/koa-postgres.dockerfile
  27. 10 0
      frameworks/JavaScript/koa/koa.dockerfile
  28. 0 6
      frameworks/JavaScript/koa/setup.sh
  29. 39 49
      frameworks/JavaScript/nodejs/benchmark_config.json
  30. 1 3
      frameworks/JavaScript/nodejs/handlers/sequelize-postgres.js
  31. 11 0
      frameworks/JavaScript/nodejs/mitol.dockerfile
  32. 5 0
      frameworks/JavaScript/nodejs/nodejs-default-mitol.dockerfile
  33. 5 0
      frameworks/JavaScript/nodejs/nodejs-mongodb-mitol.dockerfile
  34. 5 0
      frameworks/JavaScript/nodejs/nodejs-mongodb-raw-mitol.dockerfile
  35. 9 0
      frameworks/JavaScript/nodejs/nodejs-mongodb-raw.dockerfile
  36. 9 0
      frameworks/JavaScript/nodejs/nodejs-mongodb.dockerfile
  37. 5 0
      frameworks/JavaScript/nodejs/nodejs-mysql-mitol.dockerfile
  38. 9 0
      frameworks/JavaScript/nodejs/nodejs-mysql.dockerfile
  39. 5 0
      frameworks/JavaScript/nodejs/nodejs-postgres-mitol.dockerfile
  40. 9 0
      frameworks/JavaScript/nodejs/nodejs-postgres.dockerfile
  41. 9 0
      frameworks/JavaScript/nodejs/nodejs.dockerfile
  42. 6 35
      frameworks/JavaScript/nodejs/routing.js
  43. 0 15
      frameworks/JavaScript/nodejs/setup-mitol.sh
  44. 0 6
      frameworks/JavaScript/nodejs/setup.sh
  45. 0 2
      frameworks/JavaScript/ringojs/benchmark_config.json
  46. 11 0
      frameworks/JavaScript/ringojs/ringo-base.dockerfile
  47. 8 0
      frameworks/JavaScript/ringojs/ringojs-convenient.dockerfile
  48. 4 4
      frameworks/JavaScript/ringojs/ringojs.dockerfile
  49. 0 12
      frameworks/JavaScript/ringojs/setup-convenient.sh
  50. 0 10
      frameworks/JavaScript/ringojs/setup.sh
  51. 0 118
      frameworks/JavaScript/sailsjs/.gitignore
  52. 0 0
      frameworks/JavaScript/sailsjs/api/controllers/.gitkeep
  53. 0 136
      frameworks/JavaScript/sailsjs/api/controllers/RedisController.js
  54. 1 1
      frameworks/JavaScript/sailsjs/api/controllers/SequelizeMySQLController.js
  55. 2 2
      frameworks/JavaScript/sailsjs/api/controllers/SequelizePostgresController.js
  56. 0 0
      frameworks/JavaScript/sailsjs/api/services/.gitkeep
  57. 0 2
      frameworks/JavaScript/sailsjs/benchmark_config.json
  58. 0 2
      frameworks/JavaScript/sailsjs/package.json
  59. 8 0
      frameworks/JavaScript/sailsjs/sailsjs-postgres.dockerfile
  60. 8 0
      frameworks/JavaScript/sailsjs/sailsjs.dockerfile
  61. 0 5
      frameworks/JavaScript/sailsjs/setup-mysql.sh
  62. 0 5
      frameworks/JavaScript/sailsjs/setup-postgresql.sh
  63. 0 14
      frameworks/JavaScript/sailsjs/setup.sh
  64. 2 1
      toolset/benchmark/benchmarker.py
  65. 0 21
      toolset/setup/linux/databases/databases.sh
  66. 0 24
      toolset/setup/linux/databases/mongodb/mongodb.conf
  67. 0 62
      toolset/setup/linux/databases/mongodb/mongodb.sh
  68. 0 0
      toolset/setup/linux/docker/databases/mongodb/create.js
  69. 15 0
      toolset/setup/linux/docker/databases/mongodb/mongodb.dockerfile
  70. 6 0
      toolset/setup/linux/docker/webservers/nodejs8.dockerfile
  71. 0 15
      toolset/setup/linux/frameworks/ringojs.sh

+ 6 - 6
.travis.yml

@@ -112,12 +112,12 @@ env:
     # - "TESTDIR=Java/vertx-web"
     # - "TESTDIR=Java/wicket"
     # - "TESTDIR=Java/wildfly-ee7"
-    # - "TESTDIR=JavaScript/express"
-    # - "TESTDIR=JavaScript/hapi"
-    # - "TESTDIR=JavaScript/koa"
-    # - "TESTDIR=JavaScript/nodejs"
-    # - "TESTDIR=JavaScript/ringojs"
-    # - "TESTDIR=JavaScript/sailsjs"
+     - "TESTDIR=JavaScript/express"
+     - "TESTDIR=JavaScript/hapi"
+     - "TESTDIR=JavaScript/koa"
+     - "TESTDIR=JavaScript/nodejs"
+     - "TESTDIR=JavaScript/ringojs"
+     - "TESTDIR=JavaScript/sailsjs"
     # - "TESTDIR=Kotlin/hexagon"
     # - "TESTDIR=Kotlin/ktor"
     # - "TESTDIR=Kotlin/pronghorn"

+ 0 - 2
deployment/vagrant/core.rb

@@ -11,7 +11,6 @@ end
 
 def provider_libvirt(config)
   config.vm.provider :libvirt do |virt, override|
-    virt.name = "TechEmpower Framework Benchmarks"
     override.vm.hostname = "TFB-all"
     override.vm.box = "RX14/trusty64"
 
@@ -30,7 +29,6 @@ end
 
 def provider_virtualbox(config)
   config.vm.provider :virtualbox do |vb, override|
-    vb.name = "TechEmpower Framework Benchmarks"
     override.vm.hostname = "TFB-all"
     override.vm.box = "ubuntu/trusty64"
 

+ 0 - 2
frameworks/JavaScript/express/.gitignore

@@ -1,2 +0,0 @@
-package-lock.json
-node_modules

+ 0 - 3
frameworks/JavaScript/express/benchmark_config.json

@@ -2,7 +2,6 @@
   "framework": "express",
   "tests": [{
     "default": {
-      "setup_file": "setup",
       "json_url": "/json",
       "plaintext_url": "/plaintext",
       "port": 8080,
@@ -22,7 +21,6 @@
       "versus": "nodejs"
     },
     "mongodb": {
-      "setup_file": "setup-mongodb",
       "db_url": "/mongoose",
       "query_url": "/mongoose?queries=",
       "update_url": "/mongoose-update?queries=",
@@ -44,7 +42,6 @@
       "versus": "nodejs"
     },
     "mysql": {
-      "setup_file": "setup-mysql",
       "db_url": "/mysql-orm",
       "query_url": "/mysql-orm?queries=",
       "fortune_url": "/mysql-orm-fortune",

+ 9 - 0
frameworks/JavaScript/express/express-mongodb.dockerfile

@@ -0,0 +1,9 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_ENV production
+
+CMD ["node", "mongodb-app.js"]

+ 9 - 0
frameworks/JavaScript/express/express-mysql.dockerfile

@@ -0,0 +1,9 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_ENV production
+
+CMD ["node", "mysql-app.js"]

+ 9 - 0
frameworks/JavaScript/express/express.dockerfile

@@ -0,0 +1,9 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_ENV production
+
+CMD ["node", "app.js"]

+ 3 - 5
frameworks/JavaScript/express/mongodb-app.js

@@ -7,9 +7,7 @@ const cluster = require('cluster'),
   numCPUs = require('os').cpus().length,
   express = require('express'),
   mongoose = require('mongoose'),
-  conn = mongoose.connect('mongodb://TFB-database/hello_world', {
-    useMongoClient: true
-  });
+  conn = mongoose.connect('mongodb://TFB-database/hello_world');
 
 // Middleware
 const bodyParser = require('body-parser');
@@ -23,7 +21,7 @@ const WorldSchema = new mongoose.Schema({
   }, {
     collection: 'world'
   }),
-  MWorld = conn.model('world', WorldSchema);
+  MWorld = mongoose.model('world', WorldSchema);
 
 const FortuneSchema = new mongoose.Schema({
     id          : Number,
@@ -31,7 +29,7 @@ const FortuneSchema = new mongoose.Schema({
   }, {
     collection: 'fortune'
   }),
-  MFortune = conn.model('fortune', FortuneSchema);
+  MFortune = mongoose.model('fortune', FortuneSchema);
 
 if (cluster.isMaster) {
   // Fork workers.

+ 1 - 1
frameworks/JavaScript/express/package.json

@@ -8,6 +8,6 @@
     "pug": "2.0.0-rc.4",
     "sequelize": "3.30.0",
     "mysql": "2.15.0",
-    "mongoose": "4.12.4"
+    "mongoose": "5.0.6"
   }
 }

+ 0 - 8
frameworks/JavaScript/express/setup-mongodb.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-fw_depends nodejs mongodb
-
-# install dependencies
-npm install --no-bin-links
-# run app
-NODE_ENV=production node mongodb-app &

+ 0 - 8
frameworks/JavaScript/express/setup-mysql.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-fw_depends nodejs mysql
-
-# install dependencies
-npm install --no-bin-links
-# run app
-NODE_ENV=production node mysql-app &

+ 0 - 8
frameworks/JavaScript/express/setup.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-fw_depends nodejs
-
-# install dependencies
-npm install --no-bin-links
-# run app
-NODE_ENV=production node app &

+ 12 - 15
frameworks/JavaScript/hapi/benchmark_config.json

@@ -2,13 +2,12 @@
   "framework": "hapi",
   "tests": [{
     "default": {
-      "setup_file": "setup",
       "json_url": "/json",
       "plaintext_url": "/plaintext",
-      "db_url": "/mongoose/db",
-      "query_url": "/mongoose/queries?queries=",
-      "fortune_url": "/mongoose/fortunes",
-      "update_url": "/mongoose/updates?queries=",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Micro",
@@ -26,11 +25,10 @@
       "versus": "nodejs"
     },
     "mysql": {
-      "setup_file": "setup",
-      "db_url": "/sequelize/db",
-      "query_url": "/sequelize/queries?queries=",
-      "fortune_url": "/sequelize/fortunes",
-      "update_url": "/sequelize/updates?queries=",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Micro",
@@ -48,11 +46,10 @@
       "versus": "nodejs"
     },
     "postgres": {
-      "setup_file": "setup",
-      "db_url": "/sequelize-pg/db",
-      "query_url": "/sequelize-pg/queries?queries=",
-      "fortune_url": "/sequelize-pg/fortunes",
-      "update_url": "/sequelize-pg/updates?queries=",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Micro",

+ 5 - 17
frameworks/JavaScript/hapi/create-server.js

@@ -26,9 +26,7 @@ server.register(Vision, (err) => {
     });
 });
 
-const MongooseHandler = require('./handlers/mongoose');
-const SequelizeHandler = require('./handlers/sequelize');
-const SequelizePgHandler = require('./handlers/sequelize-postgres');
+const Handler = require(`./handlers/${process.env.NODE_HANDLER}`);
 
 // Makes routing simpler as tfb routes are all GET's
 // We also don't use the nifty route features that Hapi has
@@ -48,20 +46,10 @@ const Plaintext = (req, reply) =>
 Route('/json', JsonSerialization);
 Route('/plaintext', Plaintext);
 
-Route('/mongoose/db', MongooseHandler.SingleQuery);
-Route('/mongoose/queries', MongooseHandler.MultipleQueries);
-Route('/mongoose/fortunes', MongooseHandler.Fortunes);
-Route('/mongoose/updates', MongooseHandler.Updates);
-
-Route('/sequelize/db', SequelizeHandler.SingleQuery);
-Route('/sequelize/queries', SequelizeHandler.MultipleQueries);
-Route('/sequelize/fortunes', SequelizeHandler.Fortunes);
-Route('/sequelize/updates', SequelizeHandler.Updates);
-
-Route('/sequelize-pg/db', SequelizePgHandler.SingleQuery);
-Route('/sequelize-pg/queries', SequelizePgHandler.MultipleQueries);
-Route('/sequelize-pg/fortunes', SequelizePgHandler.Fortunes);
-Route('/sequelize-pg/updates', SequelizePgHandler.Updates);
+Route('/db', Handler.SingleQuery);
+Route('/queries', Handler.MultipleQueries);
+Route('/fortunes', Handler.Fortunes);
+Route('/updates', Handler.Updates);
 
 server.start((err) =>
   console.log('Hapi worker started and listening on ' + server.info.uri + " "

+ 5 - 7
frameworks/JavaScript/hapi/handlers/mongoose.js

@@ -3,10 +3,7 @@
 
 const h = require('../helper');
 const Mongoose = require('mongoose');
-const connection = Mongoose.connect(
-  'mongodb://TFB-database/hello_world',
-  { useMongoClient: true }
-);
+Mongoose.connect('mongodb://TFB-database/hello_world');
 
 const WorldSchema = new Mongoose.Schema({
     id :          Number,
@@ -14,6 +11,7 @@ const WorldSchema = new Mongoose.Schema({
   }, {
     collection: 'world'
   });
+
 const FortuneSchema = new Mongoose.Schema({
     id:      Number,
     message: String
@@ -21,8 +19,8 @@ const FortuneSchema = new Mongoose.Schema({
     collection: 'fortune'
   });
 
-const Worlds = connection.model('World', WorldSchema);
-const Fortunes = connection.model('Fortune', FortuneSchema);
+const Worlds = Mongoose.model('world', WorldSchema);
+const Fortunes = Mongoose.model('fortune', FortuneSchema);
 
 const randomWorld = async () =>
   await Worlds.findOne({ id: h.randomTfbNumber() });
@@ -47,7 +45,7 @@ module.exports = {
   },
 
   Fortunes: async (req, reply) => {
-    const fortunes = await Fortunes.find({});
+    const fortunes = await Fortunes.find();
     fortunes.push(h.additionalFortune());
     fortunes.sort((a, b) => a.message.localeCompare(b.message));
 

+ 1 - 1
frameworks/JavaScript/hapi/handlers/sequelize-postgres.js

@@ -21,7 +21,7 @@ const Worlds = sequelize.define('World', {
   freezeTableName: true
 });
 
-const Fortunes = sequelize.define('Fortune', {
+const Fortunes = sequelize.define('fortune', {
   id: {
     type: 'Sequelize.INTEGER',
     primaryKey: true

+ 9 - 0
frameworks/JavaScript/hapi/hapi-mysql.dockerfile

@@ -0,0 +1,9 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_HANDLER sequelize
+
+CMD ["node", "app.js"]

+ 9 - 0
frameworks/JavaScript/hapi/hapi-postgres.dockerfile

@@ -0,0 +1,9 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_HANDLER sequelize-postgres
+
+CMD ["node", "app.js"]

+ 9 - 0
frameworks/JavaScript/hapi/hapi.dockerfile

@@ -0,0 +1,9 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_HANDLER mongoose
+
+CMD ["node", "app.js"]

+ 1 - 1
frameworks/JavaScript/hapi/package.json

@@ -8,7 +8,7 @@
     "handlebars": "4.0.6",
     "hapi": "16.1.0",
     "vision": "4.1.0",
-    "mongoose": "4.12.4",
+    "mongoose": "5.0.6",
     "mysql": "2.13.0",
     "pg": "6.1.2",
     "pg-hstore": "2.3.2",

+ 0 - 6
frameworks/JavaScript/hapi/setup.sh

@@ -1,6 +0,0 @@
-#!/bin/bash
-
-fw_depends mongodb postgresql mysql nodejs
-
-npm install --no-bin-links
-node app &

+ 12 - 15
frameworks/JavaScript/koa/benchmark_config.json

@@ -2,13 +2,12 @@
   "framework": "koa",
   "tests": [{
     "default": {
-      "setup_file": "setup",
       "json_url": "/json",
       "plaintext_url": "/plaintext",
-      "db_url": "/mongoose/db",
-      "query_url": "/mongoose/queries?queries=",
-      "fortune_url": "/mongoose/fortunes",
-      "update_url": "/mongoose/updates?queries=",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Micro",
@@ -26,11 +25,10 @@
       "versus": "nodejs"
     },
     "mysql": {
-      "setup_file": "setup",
-      "db_url": "/sequelize/db",
-      "query_url": "/sequelize/queries?queries=",
-      "fortune_url": "/sequelize/fortunes",
-      "update_url": "/sequelize/updates?queries=",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Micro",
@@ -48,11 +46,10 @@
       "versus": "nodejs"
     },
     "postgres": {
-      "setup_file": "setup",
-      "db_url": "/sequelize-pg/db",
-      "query_url": "/sequelize-pg/queries?queries=",
-      "fortune_url": "/sequelize-pg/fortunes",
-      "update_url": "/sequelize-pg/updates?queries=",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Micro",

+ 5 - 19
frameworks/JavaScript/koa/create-server.js

@@ -4,10 +4,7 @@ const hbs = require('koa-hbs');
 const bodyParser = require('koa-bodyparser');
 const handlebars = require('handlebars');
 
-const MongooseHandler = require('./handlers/mongoose');
-const SequelizeHandler = require('./handlers/sequelize');
-const SequelizePgHandler = require('./handlers/sequelize-postgres');
-
+const Handler = require(`./handlers/${process.env.NODE_HANDLER}`);
 
 const app = new Koa();
 const router = new Router();
@@ -33,23 +30,12 @@ function Plaintext(ctx, next) {
 
 router.get('/json', JsonSerialization);
 router.get('/plaintext', Plaintext);
+router.get('/db', Handler.SingleQuery);
+router.get('/queries', Handler.MultipleQueries);
+router.get('/fortunes', Handler.Fortunes);
+router.get('/updates', Handler.Updates);
 
 
-router.get('/mongoose/db', MongooseHandler.SingleQuery);
-router.get('/mongoose/queries', MongooseHandler.MultipleQueries);
-router.get('/mongoose/fortunes', MongooseHandler.Fortunes);
-router.get('/mongoose/updates', MongooseHandler.Updates);
-
-router.get('/sequelize/db', SequelizeHandler.SingleQuery);
-router.get('/sequelize/queries', SequelizeHandler.MultipleQueries);
-router.get('/sequelize/fortunes', SequelizeHandler.Fortunes);
-router.get('/sequelize/updates', SequelizeHandler.Updates);
-
-router.get('/sequelize-pg/db', SequelizePgHandler.SingleQuery);
-router.get('/sequelize-pg/queries', SequelizePgHandler.MultipleQueries);
-router.get('/sequelize-pg/fortunes', SequelizePgHandler.Fortunes);
-router.get('/sequelize-pg/updates', SequelizePgHandler.Updates);
-
 app.use(router.routes());
 const server = app.listen(8080);
 console.log('Worker started and listening on http://0.0.0.0:8080 ' 

+ 1 - 1
frameworks/JavaScript/koa/handlers/sequelize-postgres.js

@@ -21,7 +21,7 @@ const Worlds = sequelize.define('world', {
   freezeTableName: true
 });
 
-const Fortunes = sequelize.define('Fortune', {
+const Fortunes = sequelize.define('fortune', {
   id: {
     type: 'Sequelize.INTEGER',
     primaryKey: true

+ 10 - 0
frameworks/JavaScript/koa/koa-mysql.dockerfile

@@ -0,0 +1,10 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_ENV production
+ENV NODE_HANDLER sequelize
+
+CMD ["node", "app.js"]

+ 10 - 0
frameworks/JavaScript/koa/koa-postgres.dockerfile

@@ -0,0 +1,10 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_ENV production
+ENV NODE_HANDLER sequelize-postgres
+
+CMD ["node", "app.js"]

+ 10 - 0
frameworks/JavaScript/koa/koa.dockerfile

@@ -0,0 +1,10 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_ENV production
+ENV NODE_HANDLER mongoose
+
+CMD ["node", "app.js"]

+ 0 - 6
frameworks/JavaScript/koa/setup.sh

@@ -1,6 +0,0 @@
-#!/bin/bash
-
-fw_depends mongodb postgresql mysql nodejs
-
-npm install --no-bin-links
-node app &

+ 39 - 49
frameworks/JavaScript/nodejs/benchmark_config.json

@@ -2,14 +2,13 @@
   "framework": "nodejs",
   "tests": [{
     "default": {
-      "setup_file": "setup",
       "json_url": "/json",
       "plaintext_url": "/plaintext",
-      "db_url": "/mysql/db",
-      "query_url": "/mysql/queries?queries=",
-      "cached_query_url": "/mysql/cached?queries=",
-      "update_url": "/mysql/updates?queries=",
-      "fortune_url": "/mysql/fortunes",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "cached_query_url": "/cached?queries=",
+      "update_url": "/updates?queries=",
+      "fortune_url": "/fortunes",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -27,10 +26,9 @@
       "versus": "nodejs"
     },
     "mongodb": {
-      "setup_file": "setup",
-      "db_url": "/mongoose/db",
-      "query_url": "/mongoose/queries?queries=",
-      "update_url": "/mongoose/updates?queries=",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "update_url": "/updates?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -48,11 +46,10 @@
       "versus": "nodejs"
     },
     "mongodb-raw": {
-      "setup_file": "setup",
-      "db_url": "/mongodb/db",
-      "query_url": "/mongodb/queries?queries=",
-      "update_url": "/mongodb/updates?queries=",
-      "fortune_url": "/mongodb/fortunes",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "update_url": "/updates?queries=",
+      "fortune_url": "/fortunes",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -70,11 +67,10 @@
       "versus": "nodejs"
     },
     "mysql": {
-      "setup_file": "setup",
-      "db_url": "/sequelize/db",
-      "query_url": "/sequelize/queries?queries=",
-      "update_url": "/sequelize/updates?queries=",
-      "fortune_url": "/sequelize/fortunes",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "update_url": "/updates?queries=",
+      "fortune_url": "/fortunes",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -92,11 +88,10 @@
       "versus": "nodejs"
     },
     "postgres": {
-      "setup_file": "setup",
-      "db_url": "/sequelize-pg/db",
-      "query_url": "/sequelize-pg/queries?queries=",
-      "update_url": "/sequelize-pg/updates?queries=",
-      "fortune_url": "/sequelize-pg/fortunes",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "update_url": "/updates?queries=",
+      "fortune_url": "/fortunes",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -114,13 +109,12 @@
       "versus": "nodejs"
     },
     "default-mitol": {
-      "setup_file": "setup-mitol",
       "json_url": "/json",
       "plaintext_url": "/plaintext",
-      "db_url": "/mysql/db",
-      "query_url": "/mysql/queries?queries=",
-      "update_url": "/mysql/updates?queries=",
-      "fortune_url": "/mysql/fortunes",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "update_url": "/updates?queries=",
+      "fortune_url": "/fortunes",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -138,10 +132,9 @@
       "versus": "nodejs"
     },
     "mongodb-mitol": {
-      "setup_file": "setup-mitol",
-      "db_url": "/mongoose/db",
-      "query_url": "/mongoose/queries?queries=",
-      "update_url": "/mongoose/updates?queries=",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "update_url": "/updates?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -159,11 +152,10 @@
       "versus": "nodejs"
     },
     "mongodb-raw-mitol": {
-      "setup_file": "setup-mitol",
-      "db_url": "/mongodb/db",
-      "query_url": "/mongodb/queries?queries=",
-      "update_url": "/mongodb/updates?queries=",
-      "fortune_url": "/mongodb/fortunes",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "update_url": "/updates?queries=",
+      "fortune_url": "/fortunes",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -181,11 +173,10 @@
       "versus": "nodejs"
     },
     "mysql-mitol": {
-      "setup_file": "setup-mitol",
-      "db_url": "/sequelize/db",
-      "query_url": "/sequelize/queries?queries=",
-      "update_url": "/sequelize/updates?queries=",
-      "fortune_url": "/sequelize/fortunes",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "update_url": "/updates?queries=",
+      "fortune_url": "/fortunes",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -203,11 +194,10 @@
       "versus": "nodejs"
     },
     "postgres-mitol": {
-      "setup_file": "setup-mitol",
-      "db_url": "/sequelize-pg/db",
-      "query_url": "/sequelize-pg/queries?queries=",
-      "update_url": "/sequelize-pg/updates?queries=",
-      "fortune_url": "/sequelize-pg/fortunes",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "update_url": "/updates?queries=",
+      "fortune_url": "/fortunes",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",

+ 1 - 3
frameworks/JavaScript/nodejs/handlers/sequelize-postgres.js

@@ -18,7 +18,7 @@ const Worlds = sequelize.define('world', {
   freezeTableName: true
 });
 
-const Fortunes = sequelize.define('Fortune', {
+const Fortunes = sequelize.define('fortune', {
   id: {
     type: 'Sequelize.INTEGER',
     primaryKey: true
@@ -82,8 +82,6 @@ module.exports = {
     const worldUpdate = (world) => {
       world.randomnumber = h.randomTfbNumber();
 
-      console.log('RANDOM NUMBER: ', world.randomnumber);
-
       return Worlds.update({
           randomnumber: world.randomnumber
         },

+ 11 - 0
frameworks/JavaScript/nodejs/mitol.dockerfile

@@ -0,0 +1,11 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN apt install -y wget
+RUN npm install
+RUN mkdir -p node_modules/mns & mkdir -p tmp
+RUN wget https://github.com/Helidium/Mitol/archive/v0.0.1.tar.gz -P tmp
+RUN tar -xzvf tmp/v0.0.1.tar.gz -C tmp
+RUN make -C tmp/Mitol-0.0.1/node
+RUN cp tmp/Mitol-0.0.1/node/dist/* node_modules/mns

+ 5 - 0
frameworks/JavaScript/nodejs/nodejs-default-mitol.dockerfile

@@ -0,0 +1,5 @@
+FROM mitol:latest
+
+ENV NODE_HANDLER mysql-raw
+
+CMD ["node", "app-mitol.js"]

+ 5 - 0
frameworks/JavaScript/nodejs/nodejs-mongodb-mitol.dockerfile

@@ -0,0 +1,5 @@
+FROM mitol:latest
+
+ENV NODE_HANDLER mongoose
+
+CMD ["node", "app-mitol.js"]

+ 5 - 0
frameworks/JavaScript/nodejs/nodejs-mongodb-raw-mitol.dockerfile

@@ -0,0 +1,5 @@
+FROM mitol:latest
+
+ENV NODE_HANDLER mongoose
+
+CMD ["node", "app-mitol.js"]

+ 9 - 0
frameworks/JavaScript/nodejs/nodejs-mongodb-raw.dockerfile

@@ -0,0 +1,9 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_HANDLER mongodb-raw
+
+CMD ["node", "app.js"]

+ 9 - 0
frameworks/JavaScript/nodejs/nodejs-mongodb.dockerfile

@@ -0,0 +1,9 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_HANDLER mongoose
+
+CMD ["node", "app.js"]

+ 5 - 0
frameworks/JavaScript/nodejs/nodejs-mysql-mitol.dockerfile

@@ -0,0 +1,5 @@
+FROM mitol:latest
+
+ENV NODE_HANDLER sequelize
+
+CMD ["node", "app-mitol.js"]

+ 9 - 0
frameworks/JavaScript/nodejs/nodejs-mysql.dockerfile

@@ -0,0 +1,9 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_HANDLER mysql-raw
+
+CMD ["node", "app.js"]

+ 5 - 0
frameworks/JavaScript/nodejs/nodejs-postgres-mitol.dockerfile

@@ -0,0 +1,5 @@
+FROM mitol:latest
+
+ENV NODE_HANDLER sequelize-postgres
+
+CMD ["node", "app-mitol.js"]

+ 9 - 0
frameworks/JavaScript/nodejs/nodejs-postgres.dockerfile

@@ -0,0 +1,9 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_HANDLER sequelize-postgres
+
+CMD ["node", "app.js"]

+ 9 - 0
frameworks/JavaScript/nodejs/nodejs.dockerfile

@@ -0,0 +1,9 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install
+
+ENV NODE_HANDLER mysql-raw
+
+CMD ["node", "app.js"]

+ 6 - 35
frameworks/JavaScript/nodejs/routing.js

@@ -1,12 +1,8 @@
 // Intialized database connections, one for each db config
 // * Mongoose is a popular Node/MongoDB driver
 // * Sequelize is a popular Node/SQL driver
-const MongodbRawHandler = require('./handlers/mongodb-raw');
-const MySQLRawHandler = require('./handlers/mysql-raw');
-const MongooseHandler = require('./handlers/mongoose');
-const SequelizeHandler = require('./handlers/sequelize');
-const SequelizePgHandler = require('./handlers/sequelize-postgres');
 
+const Handler = require(`./handlers/${process.env.NODE_HANDLER}`);
 const h = require('./helper');
 
 module.exports.BasicHandler = ((() => {
@@ -15,21 +11,8 @@ module.exports.BasicHandler = ((() => {
   self.routes = {
     '/json':               h.responses.jsonSerialization,
     '/plaintext':          h.responses.plaintext,
-
-    '/mongoose/db':        MongooseHandler.SingleQuery,
-    '/mongoose/fortunes':  MongooseHandler.Fortunes,
-
-    '/mongodb/db':         MongodbRawHandler.SingleQuery,
-    '/mongodb/fortunes':   MongodbRawHandler.Fortunes,
-
-    '/sequelize/db':       SequelizeHandler.SingleQuery,
-    '/sequelize/fortunes': SequelizeHandler.Fortunes,
-
-    '/mysql/db':           MySQLRawHandler.SingleQuery,
-    '/mysql/fortunes':     MySQLRawHandler.Fortunes,
-
-    '/sequelize-pg/db':       SequelizePgHandler.SingleQuery,
-    '/sequelize-pg/fortunes': SequelizePgHandler.Fortunes
+    '/db':        Handler.SingleQuery,
+    '/fortunes':  Handler.Fortunes,
   };
 
   self.has = (path) => self.routes[path];
@@ -43,21 +26,9 @@ module.exports.QueryHandler = ((() => {
   const self = {};
 
   self.routes = {
-    '/mongoose/queries':  MongooseHandler.MultipleQueries,
-    '/mongoose/updates':  MongooseHandler.Updates,
-
-    '/mongodb/queries':   MongodbRawHandler.MultipleQueries,
-    '/mongodb/updates':   MongodbRawHandler.Updates,
-
-    '/sequelize/queries': SequelizeHandler.MultipleQueries,
-    '/sequelize/updates': SequelizeHandler.Updates,
-
-    '/mysql/queries':     MySQLRawHandler.MultipleQueries,
-    '/mysql/updates':     MySQLRawHandler.Updates,
-    '/mysql/cached' :     MySQLRawHandler.CachedQueries,
-
-    '/sequelize-pg/queries': SequelizePgHandler.MultipleQueries,
-    '/sequelize-pg/updates': SequelizePgHandler.Updates
+    '/queries':     Handler.MultipleQueries,
+    '/updates':     Handler.Updates,
+    '/cached' :     Handler.CachedQueries,
   };
 
   self.has = (path) => self.routes[path];

+ 0 - 15
frameworks/JavaScript/nodejs/setup-mitol.sh

@@ -1,15 +0,0 @@
-#!/bin/bash
-
-fw_depends mongodb mysql postgresql nodejs
-
-npm install --no-bin-links
-
-# Mitol installation
-mkdir -p node_modules/mns & mkdir -p tmp
-wget https://github.com/Helidium/Mitol/archive/v0.0.1.tar.gz -P tmp
-tar -xzvf tmp/v0.0.1.tar.gz -C tmp
-make -C tmp/Mitol-0.0.1/node
-cp tmp/Mitol-0.0.1/node/dist/* node_modules/mns
-rm -R tmp
-
-node app-mitol.js &

+ 0 - 6
frameworks/JavaScript/nodejs/setup.sh

@@ -1,6 +0,0 @@
-#!/bin/bash
-
-fw_depends mongodb mysql postgresql nodejs
-
-npm install --no-bin-links
-node app.js &

+ 0 - 2
frameworks/JavaScript/ringojs/benchmark_config.json

@@ -2,7 +2,6 @@
   "framework": "ringojs",
   "tests": [{
     "default": {
-      "setup_file": "setup",
       "json_url": "/json",
       "db_url": "/db",
       "query_url": "/db?queries=",
@@ -25,7 +24,6 @@
       "versus": ""
     },
     "convenient": {
-      "setup_file": "setup-convenient",
       "json_url": "/json",
       "db_url": "/db",
       "query_url": "/db/",

+ 11 - 0
frameworks/JavaScript/ringojs/ringo-base.dockerfile

@@ -0,0 +1,11 @@
+FROM java:latest
+
+COPY ./ ./
+
+ENV RINGOJS_VERSION="1.1.0"
+ENV RINGOJS_HOME=/ringojs-$RINGOJS_VERSION
+
+RUN wget https://github.com/ringo/ringojs/releases/download/v$RINGOJS_VERSION/ringojs-$RINGOJS_VERSION.tar.gz && \
+    tar xvf ringojs-$RINGOJS_VERSION.tar.gz
+
+ENV PATH=${RINGOJS_HOME}/bin:${PATH}

+ 8 - 0
frameworks/JavaScript/ringojs/ringojs-convenient.dockerfile

@@ -0,0 +1,8 @@
+FROM ringo-base:latest
+
+RUN ringo-admin install grob/ringo-sqlstore && \
+    ringo-admin install ringo/stick && \
+    ringo-admin install orfon/reinhardt && \
+    (cd $RINGOJS_HOME/packages/ringo-sqlstore/jars && curl -s -O https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar)
+
+CMD ["ringo", "--production", "-J-server", "-J-Xmx1g", "-J-Xms1g", "ringo-convenient-main.js", "--host", "0.0.0.0"]

+ 4 - 4
frameworks/JavaScript/ringojs/ringojs.dockerfile

@@ -1,7 +1,7 @@
 FROM ringo-base:latest
 
-RUN ringo-admin install oberhamsi/sql-ringojs-client
-RUN ringo-admin install orfon/reinhardt
-RUN (cd ringo-${RINGO_VEFRSION}/packages/sql-ringojs-client/jars && curl -s -o mysql.jar https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar)
+RUN ringo-admin install oberhamsi/sql-ringojs-client && \
+    ringo-admin install orfon/reinhardt && \
+    (cd $RINGOJS_HOME/packages/sql-ringojs-client/jars && curl -s -o mysql.jar https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar)
 
-CMD ["ringo", "--production", "-J-server", "-J-Xmx1g", "-J-Xms1g", "ringo-main.js", "--host 0.0.0.0"]
+CMD ["ringo", "--production", "-J-server", "-J-Xmx1g", "-J-Xms1g", "ringo-main.js", "--host", "0.0.0.0"]

+ 0 - 12
frameworks/JavaScript/ringojs/setup-convenient.sh

@@ -1,12 +0,0 @@
-#!/bin/bash
-
-fw_depends mysql java8 ringojs
-
-rm -rf $RINGOJS_HOME/packages/*
-ringo-admin install grob/ringo-sqlstore
-ringo-admin install ringo/stick
-ringo-admin install orfon/reinhardt
-
-(cd $RINGOJS_HOME/packages/ringo-sqlstore/jars && curl -s -O https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar)
-
-ringo --production -J-server -J-Xmx1g -J-Xms1g ringo-convenient-main.js --host 0.0.0.0

+ 0 - 10
frameworks/JavaScript/ringojs/setup.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-fw_depends mysql java8 ringojs
-
-rm -rf $RINGOJS_HOME/packages/*
-ringo-admin install oberhamsi/sql-ringojs-client
-ringo-admin install orfon/reinhardt
-(cd $RINGOJS_HOME/packages/sql-ringojs-client/jars && curl -s -o mysql.jar https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar)
-
-ringo --production -J-server -J-Xmx1g -J-Xms1g ringo-main.js --host 0.0.0.0

+ 0 - 118
frameworks/JavaScript/sailsjs/.gitignore

@@ -1,118 +0,0 @@
-################################################
-###############  .gitignore   ##################
-################################################
-#
-# This file is only relevant if you are using git.
-#
-# Files which match the splat patterns below will
-# be ignored by git.  This keeps random crap and
-# and sensitive credentials from being uploaded to 
-# your repository.  It allows you to configure your
-# app for your machine without accidentally
-# committing settings which will smash the local 
-# settings of  other developers on your team. 
-#
-# Some reasonable defaults are included below,
-# but, of course, you should modify/extend/prune
-# to fit your needs!
-################################################
-
-
-
-
-################################################
-# Local Configuration
-#
-# Explicitly ignore files which contain:
-#
-# 1. Sensitive information you'd rather not push to
-#    your git repository.
-#    e.g., your personal API keys or passwords.
-#
-# 2. Environment-specific configuration
-#    Basically, anything that would be annoying
-#    to have to change every time you do a 
-#    `git pull`
-#    e.g., your local development database, or
-#    the S3 bucket you're using for file uploads
-#    development.
-# 
-################################################
-
-config/local.js
-
-
-
-
-
-################################################
-# Dependencies
-#
-# When releasing a production app, you may 
-# consider including your node_modules and
-# bower_components directory in your git repo,
-# but during development, its best to exclude it,
-# since different developers may be working on
-# different kernels, where dependencies would
-# need to be recompiled anyway.
-#
-# More on that here about node_modules dir:
-# http://www.futurealoof.com/posts/nodemodules-in-git.html
-# (credit Mikeal Rogers, @mikeal)
-#
-# About bower_components dir, you can see this:
-# http://addyosmani.com/blog/checking-in-front-end-dependencies/
-# (credit Addy Osmani, @addyosmani)
-# 
-################################################
-
-node_modules
-bower_components
-
-
-
-
-################################################
-# Sails.js / Waterline / Grunt
-#
-# Files generated by Sails and Grunt, or related
-# tasks and adapters.
-################################################
-.tmp
-dump.rdb
-
-
-
-
-
-################################################
-# Node.js / NPM
-#
-# Common files generated by Node, NPM, and the
-# related ecosystem.
-################################################
-lib-cov
-*.seed
-*.log
-*.out
-*.pid
-npm-debug.log
-
-
-
-
-
-################################################
-# Miscellaneous
-#
-# Common files generated by text editors,
-# operating systems, file systems, etc.
-################################################
-
-*~
-*#
-.DS_STORE
-.netbeans
-nbproject
-.idea
-.node_history

+ 0 - 0
frameworks/JavaScript/sailsjs/api/controllers/.gitkeep


+ 0 - 136
frameworks/JavaScript/sailsjs/api/controllers/RedisController.js

@@ -1,136 +0,0 @@
-/**
- * RedisController
- *
- * @description :: Connects to Redis using the node_redis and hiredis drivers
- *   Handles redis routes
- *   "If hiredis [pure C library] is installed, node_redis will use it by default.
- *   Otherwise, a pure JavaScript parser will be used."
- *   >> hiredis is installed for these tests
- */
-
-var h = require('../services/helper')
-var Promise = require('bluebird')
-// Can treat redis library as one that supports Promises
-// these methods will then have "-Async" appended to them.
-var redis = Promise.promisifyAll(require('redis'))
-var client = redis.createClient(6379, '127.0.0.1', {})
-
-client.on('error', function (err) {
-  console.log('Redis Error: ' + err)
-  // Do nothing further if Redis errors/is unavailable
-});
-
-function redisWorldId(id) {
-  return 'world:' + id
-}
-
-function randomWorldPromise() {
-  var id = h.randomTfbNumber()
-  var redisId = redisWorldId(id)
-
-  var promise = client.getAsync(redisId)
-    .then(function (worldValue) {
-      return {
-        id: id,
-        randomNumber: worldValue
-      }
-    })
-    .catch(function (err) {
-      console.log(err.stack)
-    })
-  return promise
-}
-
-function redisSetWorld(world) {
-  var redisId = redisWorldId(world.id)
-  var promise = client
-    .setAsync(redisId, world.randomNumber)
-    .then(function (result) {
-      return world
-    })
-    .catch(function (err) {
-      console.log(err.stack)
-    })
-  return promise
-}
-
-function redisGetAllFortunes() {
-  var promise = client
-    .lrangeAsync('fortunes', 0, -1)
-    .then(function (fortuneMessages) {
-      var fortunes = fortuneMessages.map(function (e, i) {
-        return { id: i + 1, message: e }
-      })
-      return fortunes;
-    })
-    .catch(function (err) {
-      console.log(err.stack)
-    })
-  return promise
-}
-
-
-module.exports = {
-  
-  Single: function(req, res) {
-    randomWorldPromise()
-      .then(function (world) {
-        res.json(world)
-      })
-      .catch(function (err) {
-        console.log(err.stack)
-      })
-  },
-
-  Multiple: function(req, res) {
-    var queries = h.getQueries(req)
-    var worldPromises = []
-
-    for (var i = 0; i < queries; i++) {
-      worldPromises.push(randomWorldPromise())
-    }
-
-    Promise
-      .all(worldPromises)
-      .then(function (worlds) {
-         res.json(worlds)
-      });
-  },
-
-  Fortunes: function(req, res) {
-    redisGetAllFortunes()
-      .then(function (fortunes) {
-        fortunes.push(h.additionalFortune())
-        fortunes.sort(function (a, b) {
-          return a.message.localeCompare(b.message)
-        })
-        res.render('fortunes', { fortunes: fortunes })
-      })
-      .catch(function (err) {
-        console.log(err.stack)
-      })
-  },
-
-  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) {
-        world.randomNumber = h.randomTfbNumber()
-        return redisSetWorld(world)
-      })
-      .then(function (updated) {
-        res.json(updated)
-      })
-      .catch(function (err) {
-        console.log(err.stack)
-      })
-  }
-
-};

+ 1 - 1
frameworks/JavaScript/sailsjs/api/controllers/SequelizeMySQLController.js

@@ -11,7 +11,7 @@ var Sequelize = require('sequelize')
 var sequelize = new Sequelize(
   'hello_world', 'benchmarkdbuser', 'benchmarkdbpass',
   {
-    host: '127.0.0.1',
+    host: 'TFB-database',
     dialect: 'mysql',
     pool: {
       max: 5000,

+ 2 - 2
frameworks/JavaScript/sailsjs/api/controllers/SequelizePostgresController.js

@@ -11,7 +11,7 @@ var Sequelize = require('sequelize')
 var sequelize = new Sequelize(
   'hello_world', 'benchmarkdbuser', 'benchmarkdbpass',
   {
-    host: '127.0.0.1',
+    host: 'TFB-database',
     dialect: 'postgres',
     pool: {
       max: 5000,
@@ -40,7 +40,7 @@ var Worlds = sequelize.define('world', {
 })
 
 
-var Fortunes = sequelize.define('Fortune', {
+var Fortunes = sequelize.define('fortune', {
   id: {
        type: Sequelize.INTEGER,
        primaryKey: true

+ 0 - 0
frameworks/JavaScript/sailsjs/api/services/.gitkeep


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

@@ -2,7 +2,6 @@
   "framework": "sailsjs",
   "tests": [{
     "default": {
-      "setup_file": "setup-mysql",
       "json_url": "/json",
       "db_url": "/mysql/db",
       "query_url": "/mysql/queries?queries=",
@@ -26,7 +25,6 @@
       "versus": "nodejs"
     },
     "postgres": {
-      "setup_file": "setup-postgresql",
       "db_url": "/postgres/db",
       "query_url": "/postgres/queries?queries=",
       "update_url": "/postgres/updates?queries=",

+ 0 - 2
frameworks/JavaScript/sailsjs/package.json

@@ -9,12 +9,10 @@
     "bluebird": "3.4.1",
     "ejs": "2.5.7",
     "handlebars": "4.0.5",
-    "hiredis": "0.5.0",
     "mysql": "2.11.0",
     "pg": "6.0.2",
     "pg-hstore": "2.3.2",
     "rc": "1.1.6",
-    "redis": "2.6.2",
     "sails": "0.12.3",
     "sails-disk": "0.10.10",
     "sequelize": "3.23.4"

+ 8 - 0
frameworks/JavaScript/sailsjs/sailsjs-postgres.dockerfile

@@ -0,0 +1,8 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install -g sails
+RUN npm install
+
+CMD ["sails", "lift", "--port", "8080"]

+ 8 - 0
frameworks/JavaScript/sailsjs/sailsjs.dockerfile

@@ -0,0 +1,8 @@
+FROM nodejs8:latest
+
+COPY ./ ./
+
+RUN npm install -g sails
+RUN npm install
+
+CMD ["sails", "lift", "--port", "8080"]

+ 0 - 5
frameworks/JavaScript/sailsjs/setup-mysql.sh

@@ -1,5 +0,0 @@
-#!/bin/bash
-
-fw_depends mysql
-
-source ./setup.sh

+ 0 - 5
frameworks/JavaScript/sailsjs/setup-postgresql.sh

@@ -1,5 +0,0 @@
-#!/bin/bash
-
-fw_depends postgresql
-
-source ./setup.sh

+ 0 - 14
frameworks/JavaScript/sailsjs/setup.sh

@@ -1,14 +0,0 @@
-#!/bin/bash
-
-fw_depends nodejs
-
-sed -i 's|127.0.0.1|'"${DBHOST}"'|g' api/controllers/RedisController.js
-sed -i 's|127.0.0.1|'"${DBHOST}"'|g' api/controllers/SequelizeMySQLController.js
-sed -i 's|127.0.0.1|'"${DBHOST}"'|g' api/controllers/SequelizePostgresController.js
-
-# let us run sails directly
-npm install -g sails
-
-# reset cache & run app
-npm install
-sails lift --port 8080 &

+ 2 - 1
toolset/benchmark/benchmarker.py

@@ -612,7 +612,8 @@ class Benchmarker:
                     # TODO: this is horrible... how should we really do it?
                     ports = {
                         "mysql": 3306,
-                        "postgres": 5432
+                        "postgres": 5432,
+                        "mongodb": 27017
                     }
                     database_container_id = self.__setup_database_container(test.database.lower(), ports[test.database.lower()])
                     if not database_container_id:

+ 0 - 21
toolset/setup/linux/databases/databases.sh

@@ -1,21 +0,0 @@
-#!/bin/bash
-
-RETCODE=$(fw_exists ${IROOT}/databases.installed)
-[ ! "$RETCODE" == 0 ] || { \
-  source $IROOT/databases.installed
-  return 0; }
-
-# Create a user-owned directory for our databases
-ssh $DBHOST 'bash' <<EOF
-sudo apt-get -y update
-sudo apt-get -y install -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' build-essential libev-dev libpq-dev libreadline6-dev lsb-core
-sudo mkdir -p /ssd
-sudo mkdir -p /ssd/log
-sudo chown -R $(whoami):$(whoami) /ssd
-
-id -u benchmarkdbuser &> /dev/null || sudo useradd benchmarkdbuser -p benchmarkdbpass
-EOF
-
-echo -e "" > $IROOT/databases.installed
-
-source $IROOT/databases.installed

+ 0 - 24
toolset/setup/linux/databases/mongodb/mongodb.conf

@@ -1,24 +0,0 @@
-# mongod.conf
-
-# for documentation of all options, see:
-#   http://docs.mongodb.org/manual/reference/configuration-options/
-
-# Where and how to store data.
-storage:
-  dbPath: "/ssd/mongodb"
-  journal:
-    enabled: true
-#  engine:
-#  mmapv1:
-#  wiredTiger:
-
-# where to write logging data.
-systemLog:
-  destination: file
-  logAppend: true
-  path: "/ssd/log/mongodb/mongod.log"
-
-# network interfaces
-net:
-  port: 27017
-  bindIpAll: true

+ 0 - 62
toolset/setup/linux/databases/mongodb/mongodb.sh

@@ -1,62 +0,0 @@
-#!/bin/bash
-
-fw_depends databases
-
-fw_installed mongodb && return 0
-
-# send over the required files
-scp $FWROOT/toolset/setup/linux/databases/mongodb/mongodb.conf $DBHOST:~/
-scp $FWROOT/toolset/setup/linux/databases/mongodb/create.js $DBHOST:~/
-
-# install mongo on database machine
-ssh $DBHOST 'bash' <<"EOF"
-echo "Setting up MongoDB database"
-
-if service --status-all | grep -Fq 'mongod'; then
-  sudo service mongod stop
-fi
-sudo apt-get -y remove --purge mongodb-org
-sudo apt-get -y autoremove
-sudo find /etc/apt/sources.list.d -type f -name 'mongodb-org-*.list' -delete -maxdepth 1
-sudo find /etc -type f -name 'mongo*.conf*' -delete -maxdepth 1
-sudo rm -rf /var/lib/mongodb
-sudo rm -rf /var/log/mongodb
-
-sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
-echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
-sudo apt-get -y update
-sudo apt-get -y install mongodb-org
-
-sudo service mongod stop
-sudo mv mongodb.conf /etc/mongod.conf
-sudo rm -rf /ssd/mongodb
-sudo rm -rf /ssd/log/mongodb
-sudo mkdir -p /ssd/mongodb
-sudo mkdir -p /ssd/log/mongodb
-sudo chown -R mongodb:mongodb /ssd/mongodb
-sudo chown -R mongodb:mongodb /ssd/log/mongodb
-sudo service mongod start
-
-for i in {1..15}; do
-  nc -z localhost 27017 && break || sleep 1;
-  echo "Waiting for MongoDB ($i/15)"
-done
-nc -z localhost 27017
-if [ $? -eq 0 ]; then
-  mongo < create.js
-  mongod --version
-else
-  >&2 echo "MongoDB did not start, skipping"
-fi
-EOF
-
-echo -e "ssh \$DBHOST 'bash' <<\"EOF\"" > $IROOT/mongodb.installed
-echo -e "sudo service mongod start || echo 'mongod service already started'" >> $IROOT/mongodb.installed
-echo -e "for i in {1..15}; do" >> $IROOT/mongodb.installed
-echo -e "  nc -z localhost 27017 && break || sleep 1;" >> $IROOT/mongodb.installed
-echo -e "  echo \"Waiting for MongoDB (\$i/15)\"" >> $IROOT/mongodb.installed
-echo -e "done" >> $IROOT/mongodb.installed
-echo -e "mongo < create.js" >> $IROOT/mongodb.installed
-echo -e "EOF" >> $IROOT/mongodb.installed
-
-source $IROOT/mongodb.installed

+ 0 - 0
toolset/setup/linux/databases/mongodb/create.js → toolset/setup/linux/docker/databases/mongodb/create.js


+ 15 - 0
toolset/setup/linux/docker/databases/mongodb/mongodb.dockerfile

@@ -0,0 +1,15 @@
+FROM ubuntu:16.04
+
+COPY ./ ./
+
+RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
+RUN echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.6.list
+RUN apt-get -y update
+RUN apt-get -y install mongodb-org
+
+RUN mkdir -p /data/db
+RUN chmod 777 /data/db
+
+RUN mongod --fork --logpath /var/log/mongodb.log --bind_ip_all && sleep 10 && mongo < create.js && sleep 10
+
+CMD ["mongod", "--bind_ip_all"]

+ 6 - 0
toolset/setup/linux/docker/webservers/nodejs8.dockerfile

@@ -0,0 +1,6 @@
+FROM tfb:latest
+
+ENV NODE_ENV=production
+
+RUN curl -sL https://deb.nodesource.com/setup_8.x | bash -
+RUN apt install -y nodejs

+ 0 - 15
toolset/setup/linux/frameworks/ringojs.sh

@@ -1,15 +0,0 @@
-#!/bin/bash
-
-fw_installed ringojs && return 0
-
-VERSION="1.1.0"
-RINGOJS=$IROOT/ringojs_$VERSION
-RINGOJS_HOME=$IROOT/ringojs-$VERSION
-
-fw_get -O https://github.com/ringo/ringojs/releases/download/v$VERSION/ringojs-$VERSION.tar.gz
-fw_untar ringojs-$VERSION.tar.gz
-
-echo "export RINGOJS_HOME=${RINGOJS_HOME}" > $IROOT/ringojs.installed
-echo -e "export PATH=\$RINGOJS_HOME/bin:\$PATH" >> $IROOT/ringojs.installed
-
-source $IROOT/ringojs.installed