Browse Source

use stick

Simon Oberhammer 12 years ago
parent
commit
55cdf0e4c2

+ 17 - 16
installer.py

@@ -2,7 +2,7 @@ import subprocess
 import os
 
 class Installer:
-  
+
   ############################################################
   # install_software
   ############################################################
@@ -21,7 +21,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", True)
 
     self.__run_command("cp ../config/benchmark_profile ../../.bash_profile")
@@ -38,7 +38,7 @@ class Installer:
     self.__run_command("wget -O - http://binaries.erlang-solutions.com/debian/erlang_solutions.asc | sudo apt-key add -")
     self.__run_command("sudo apt-get update")
     self.__run_command("sudo apt-get install esl-erlang", True)
-    
+
     #
     # Python
     #
@@ -62,10 +62,10 @@ class Installer:
     #
     # Java
     #
-    
+
     self.__run_command("sudo apt-get install openjdk-7-jdk", True)
     self.__run_command("sudo apt-get remove --purge openjdk-6-jre openjdk-6-jre-headless", True)
-    
+
     #
     # Ruby/JRuby
     #
@@ -76,7 +76,7 @@ class Installer:
     subprocess.call(["bash", "-c", "source ~/.rvm/scripts/'rvm' && rvm 2.0.0-p0 do gem install bundler"])
     subprocess.call(["bash", "-c", "source ~/.rvm/scripts/'rvm' && rvm install jruby-1.7.3"])
     subprocess.call(["bash", "-c", "source ~/.rvm/scripts/'rvm' && rvm jruby-1.7.3 do gem install bundler"])
-    
+
     # We need a newer version of jruby-rack
     self.__run_command("git clone git://github.com/jruby/jruby-rack.git")
     subprocess.call(["bash", "-c", "cd installs/jruby-rack && source ~/.rvm/scripts/'rvm' && rvm jruby-1.7.3 do bundle install"])
@@ -124,6 +124,7 @@ class Installer:
     self.__run_command("sudo dpkg -i ringojs_0.9-1_all.deb")
     self.__run_command("rm ringojs_0.9-1_all.deb")
     self.__run_command("sudo ringo-admin install oberhamsi/sql-ringojs-client")
+    self.__run_command("sudo ringo-admin install ringo/stick")
 
     #######################################
     # Webservers
@@ -139,7 +140,7 @@ class Installer:
     self.__run_command("sudo mv /etc/apache2/ports.conf /etc/apache2/ports.conf.orig")
     self.__run_command("sudo sh -c \"cat ../config/ports.conf > /etc/apache2/ports.conf\"")
     self.__run_command("sudo /etc/init.d/apache2 stop")
-    
+
     #
     # Nginx
     #
@@ -147,7 +148,7 @@ class Installer:
     self.__run_command("./configure", cwd="nginx-1.2.7")
     self.__run_command("make", cwd="nginx-1.2.7")
     self.__run_command("sudo make install", cwd="nginx-1.2.7")
-    
+
     #
     # Openresty (nginx with openresty stuff)
     #
@@ -155,7 +156,7 @@ class Installer:
     self.__run_command("./configure --with-luajit", cwd="ngx_openresty-1.2.7.5")
     self.__run_command("make", cwd="ngx_openresty-1.2.7.5")
     self.__run_command("sudo make install", cwd="ngx_openresty-1.2.7.5")
-    
+
     #
     # Gunicorn
     #
@@ -233,7 +234,7 @@ class Installer:
     self.__run_command("wget http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/grails-2.1.1.zip")
     self.__run_command("unzip -o grails-2.1.1.zip")
     self.__run_command("rm grails-2.1.1.zip")
-    
+
 
     ##############################
     # Flask
@@ -246,7 +247,7 @@ class Installer:
     self.__run_command("wget http://downloads.typesafe.com/play/2.1.1/play-2.1.1.zip")
     self.__run_command("unzip -o play-2.1.1.zip")
     self.__run_command("rm play-2.1.1.zip")
-    
+
     ##############################
     # Play 1
     ##############################
@@ -254,7 +255,7 @@ class Installer:
     self.__run_command("unzip -o play-1.2.5.zip")
     self.__run_command("rm play-1.2.5.zip")
     self.__run_command("mv play-1.2.5/play play-1.2.5/play1")
-    
+
     # siena
     self.__run_command("play-1.2.5/play1 install siena", send_yes=True)
 
@@ -332,7 +333,7 @@ class Installer:
     ./waf build
     sudo ./waf install
     cd ~
-    
+
     ##############################
     # wrk
     ##############################
@@ -348,16 +349,16 @@ class Installer:
     ##############################
     sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
     sudo cp 10gen.list /etc/apt/sources.list.d/10gen.list
-    sudo apt-get update 
+    sudo apt-get update
     yes | sudo apt-get install mongodb-10gen
-    
+
     sudo mv /etc/mongodb.conf /etc/mongodb.conf.orig
     sudo mv mongodb.conf /etc/mongodb.conf
     sudo restart mongodb
     """
     p = subprocess.Popen(self.benchmarker.ssh_string.split(" "), stdin=subprocess.PIPE)
     p.communicate(remote_script)
-    
+
   ############################################################
   # End __parse_results
   ############################################################

+ 34 - 0
ringojs-stick/README.md

@@ -0,0 +1,34 @@
+# RingoJs Benchmarking Test
+
+This is the Ringojs with the Stick framework portion of the [benchmarking test suite](../) comparing a variety of web development platforms.
+
+### JSON Encoding Test
+
+* [JSON test controller/view](ringo-main.js)
+
+### Data-Store/Database Mapping Test
+
+* [DB test controller/model](ringo-main.js)
+
+## Infrastructure Software Versions
+
+The tests were run with:
+
+* [RingoJs v0.9](http://ringojs.org/)
+* [MySQL 5.5.29](https://dev.mysql.com/)
+
+## Test URLs
+### JSON Encoding Test
+
+http://localhost:8080/json
+
+### Data-Store/Database Mapping Test
+
+MySQL:
+
+http://localhost:8080/db
+
+### Variable Query Test
+
+MySQL:
+http://localhost:8080/db?queries=2

+ 0 - 0
ringojs-stick/__init__.py


+ 18 - 0
ringojs-stick/benchmark_config

@@ -0,0 +1,18 @@
+{
+  "framework": "ringojs-stick",
+  "tests": [{
+    "default": {
+      "setup_file": "setup",
+      "json_url": "/json",
+      "port": 8080,
+      "sort": 76
+    },
+    "raw": {
+      "setup_file": "setup",
+      "db_url": "/db",
+      "query_url": "/db?queries=",
+      "port": 8080,
+      "sort": 77
+    }
+  }]
+}

+ 9 - 0
ringojs-stick/ringo-main.js

@@ -0,0 +1,9 @@
+var {Application} = require("stick");
+
+var app = exports.app = Application();
+app.configure("mount");
+app.mount("/", require("./views"));
+
+if (require.main == module) {
+    require("ringo/httpserver").main(module.id);
+}

+ 25 - 0
ringojs-stick/setup.py

@@ -0,0 +1,25 @@
+
+import subprocess
+import sys
+import setup_util
+import os
+
+def start(args):
+  setup_util.replace_text("ringojs/view.js", "dbHost = '.*';", "dbHost = '" + args.database_host + "';")
+
+  try:
+    subprocess.check_call("ringo --production ringo-main.js", shell=True, cwd="ringojs")
+    return 0
+  except subprocess.CalledProcessError:
+    return 1
+def stop():
+  p = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE)
+  out, err = p.communicate()
+  for line in out.splitlines():
+    if 'ringo-main.js' in line:
+      pid = int(line.split(None, 2)[1])
+      try:
+        os.kill(pid, 9)
+      except OSError:
+        pass
+  return 0

+ 63 - 0
ringojs-stick/views.js

@@ -0,0 +1,63 @@
+var sql = require('sql-ringojs-client');
+var {Application} = require("stick");
+
+// DO NOT TOUCH THE FOLLOWING LINE.
+// THIS VARIABLE IS REGEX REPLACED BY setup.py
+var dbHost = 'localhost';
+
+var datasource = module.singleton('pooling-datasource', function() {
+  return sql.connect("jdbc:mysql://" + dbHost + "/hello_world", 'benchmarkdbuser', 'benchmarkdbpass');
+});
+
+var app = exports.app = Application();
+app.configure("params", "route");
+
+app.get('/json', function() {
+	var helloObject = {message: "Hello, world"};
+	// JSON Response Test
+	return {
+      status: 200,
+      headers: {"Content-Type": "application/json; charset=UTF-8"},
+      body: [JSON.stringify(helloObject)]
+	}
+});
+
+app.get('/db', function(request) {
+   var queryCount = req.params.queries;
+   try {
+      var connection = datasource.getConnection();
+      if (queryCount === null) {
+         var randId = ((Math.random() * 10000) | 0) + 1
+         var world = sql.query(connection, 'select * from World where World.id = ' + randId)[0];
+         // let's just hope it gets to this
+         connection.close();
+         return {
+            status: 200,
+            headers: {"Content-Type": "application/json; charset=UTF-8"},
+            body: [JSON.stringify(world)]
+         }
+      } else {
+         queryCount = parseInt(queryCount, 10);
+         var body = [];
+         var randId, world;
+         for (var i = 0; i < queryCount; i++) {
+            randId = ((Math.random() * 10000) | 0) + 1;
+            world = sql.query(connection, 'select * from World where World.id = ' + randId)[0];
+            body.push(world);
+         }
+         connection.close();
+         return {
+            status: 200,
+            headers: {"Content-Type": "application/json; charset=UTF-8"},
+            body: [JSON.stringify(body)]
+         }
+      }
+   } catch (e) {
+      connection.close();
+      connection = null;
+   } finally {
+      if (connection !== null) {
+         connection.close();
+      }
+   }
+});