Browse Source

add mongodb query tests

Simon Oberhammer 12 years ago
parent
commit
1660b523d9
4 changed files with 32 additions and 6 deletions
  1. 7 6
      installer.py
  2. 7 0
      ringojs/benchmark_config
  3. 17 0
      ringojs/ringo-main.js
  4. 1 0
      ringojs/setup.py

+ 7 - 6
installer.py

@@ -8,7 +8,7 @@ class Installer:
   ############################################################
   def install_software(self):
     if self.benchmarker.install == 'all' or self.benchmarker.install == 'server':
-        self.__install_server_software()    
+        self.__install_server_software()
 
     if self.benchmarker.install == 'all' or self.benchmarker.install == 'client':
         self.__install_client_software()
@@ -24,7 +24,7 @@ class Installer:
     # Prerequisites
     #######################################
     self.__run_command("sudo apt-get update", True)
-    self.__run_command("sudo apt-get upgrade", True)    
+    self.__run_command("sudo apt-get upgrade", True)
     self.__run_command("sudo apt-get install build-essential libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev python-software-properties unzip git-core libcurl4-openssl-dev libbz2-dev libmysqlclient-dev mongodb-clients libreadline6-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev libgdbm-dev ncurses-dev automake libffi-dev htop libtool bison libevent-dev libgstreamer-plugins-base0.10-0 libgstreamer0.10-0 liborc-0.4-0 libwxbase2.8-0 libwxgtk2.8-0 libgnutls-dev libjson0-dev libmcrypt-dev libicu-dev cmake gettext", True)
 
     self.__run_command("cp ../config/benchmark_profile ../../.bash_profile")
@@ -94,7 +94,7 @@ class Installer:
     #
     # go
     #
-    
+
     self.__run_command("curl http://go.googlecode.com/files/go1.1rc1.linux-amd64.tar.gz | tar xvz")
 
     #
@@ -142,7 +142,8 @@ class Installer:
     self.__run_command("sudo ringo-admin install ringo/stick")
     self.__run_command("sudo ringo-admin install oberhamsi/reinhardt")
     self.__run_command("sudo ringo-admin install grob/ringo-sqlstore")
-    
+    self.__run_command("sudo ringo-admin install amigrave/ringo-mongodb")
+
     #
     # Mono
     #
@@ -360,14 +361,14 @@ class Installer:
 
     # Insert data
     mysql -uroot -psecret < create.sql
-    
+
     ##############################
     # Postgres
     ##############################
     sudo useradd benchmarkdbuser -p benchmarkdbpass
     sudo -u postgres psql template1 < create-postgres-database.sql
     sudo -u benchmarkdbuser psql hello_world < create-postgres.sql
-    
+
     sudo mv postgresql.conf /etc/postgresql/9.1/main/postgresql.conf
     sudo mv pg_hba.conf /etc/postgresql/9.1/main/pg_hba.conf
     sudo -u postgres -H /etc/init.d/postgresql restart

+ 7 - 0
ringojs/benchmark_config

@@ -13,6 +13,13 @@
       "query_url": "/db?queries=",
       "fortune_url": "/fortune",
       "port": 8080,
+      "sort": 73
+    },
+    "mongodb": {
+      "setup_file": "setup",
+      "db_url": "/mongodb",
+      "query_url": "/mongodb?queries=",
+      "port": 8080,
       "sort": 74
     }
   }]

+ 17 - 0
ringojs/ringo-main.js

@@ -1,9 +1,11 @@
 var sql = require('sql-ringojs-client');
 var mustache = require('ringo/mustache');
+var mongodb = require('ringo-mongodb');
 
 // DO NOT TOUCH THE FOLLOWING LINE.
 // THIS VARIABLE IS REGEX REPLACED BY setup.py
 var dbHost = 'localhost';
+var mongodbUri = 'mongodb://localhost/hello_world';
 
 var sortFortunes = function(a, b) {
  return (a.message < b.message) ? -1 : (a.message > b.message) ? 1 : 0;
@@ -78,6 +80,21 @@ exports.app = function(req) {
             connection.close();
          }
       }
+   } else if (path === '/mongodb') {
+      var queryCount = req.env.servletRequest.getParameter('queries') | 1;
+      var col = mongodb.connect(mongodbUri).getCollection('world');
+      var body = [];
+      var randId, world;
+      for (var i = 0; i < queryCount; i++) {
+         randId = ((Math.random() * 10000) | 0) + 1;
+         world = col.findOne(randId);
+         body.push(world ? world.data : "Record not found for id#" + randId);
+      }
+      return {
+         status: 200,
+         headers: {"Content-Type": "application/json; charset=UTF-8"},
+         body: [mongodb.JSON.to(body)]
+      };
    }
 };
 

+ 1 - 0
ringojs/setup.py

@@ -6,6 +6,7 @@ import os
 
 def start(args):
   setup_util.replace_text("ringojs/ringo-main.js", "dbHost = '.*';", "dbHost = '" + args.database_host + "';")
+  setup_util.replace_text("ringojs/ringo-main.js", "mongodb:\/\/.*\/hello_world", "mongodb://" + args.database_host + "/hello_world")
 
   try:
     subprocess.Popen("ringo --production ringo-main.js", shell=True, cwd="ringojs")