Browse Source

created benchmark_config and setup file for mojolicious

Patrick Falls 12 years ago
parent
commit
d6c9f34826
7 changed files with 67 additions and 11 deletions
  1. 3 0
      installer.py
  2. 7 5
      kelp/app.pl
  3. 0 0
      mojolicious/__init__.py
  4. 3 3
      mojolicious/app.pl
  5. 19 0
      mojolicious/benchmark_config
  6. 3 3
      mojolicious/nginx.conf
  7. 32 0
      mojolicious/setup.py

+ 3 - 0
installer.py

@@ -134,10 +134,13 @@ class Installer:
     self.__run_command("sudo cpan install Plack", send_yes=True)
     self.__run_command("sudo cpan install Starman")
     self.__run_command("sudo cpan install DBD::mysql")
+    self.__run_command("sudo cpan install DBI")
     self.__run_command("sudo cpan install Dancer")
     self.__run_command("sudo cpan install Dancer::Plugin::Database")
     self.__run_command("sudo cpan install JSON", send_yes=True)
     self.__run_command("sudo cpan install Kelp", send_yes=True)
+    self.__run_command("sudo cpan install Mojolicious", send_yes=True)
+    self.__run_command("sudo cpan install Mojolicious:Plugin:Database", send_yes=True)
 
     #######################################
     # Webservers

+ 7 - 5
kelp/app.pl

@@ -5,7 +5,7 @@ use DBI;
 attr dbh => sub {
     my $database = 'hello_world';
     my $host     = 'localhost';
-    my $dsn      = 'dbi:mysql:database=$database;host=$host;port=3306';
+    my $dsn      = 'dbi:mysql:database=hello_world;host=localhost;port=3306';
     DBI->connect( $dsn, 'benchmarkdbuser', 'benchmarkdbpass', {} );
 };
 
@@ -15,12 +15,14 @@ get '/json' => sub {
 
 get '/db' => sub {
     my $self = shift;
-    my $queries = param->{queries} || 1;
+    my $queries = param('queries') || 1;
     my @response;
-    for( 1 .. $queries ) {
+    my $sth = $self->dbh->prepare( 'SELECT randomnumber FROM world WHERE id = ?' );
+    for ( 1 .. $queries ) {
         my $id = int rand 10000 + 1;
-        if ( my $row = $self->dbh->quick_select( 'world', { id => $id } ) ) {
-            push @response, { id => $id, randomNumber => $row->{randomnumber} };
+        my $res = $sth->execute( $id );
+        if ( my $row = $sth->fetchrow_arrayref ) {
+            push @response, { id => $id, randomNumber => $row->[0] };
         }
     }
     { \@response }

+ 0 - 0
mojolicious/__init__.py


+ 3 - 3
mojolicious/app.pl

@@ -3,9 +3,9 @@ use Mojolicious::Lite;
 use Mojolicious::Plugin::Database;
 
 plugin 'database', {
-    dsn      => 'dbi:mysql:dbname=test',
-    username => 'root',
-    password => ''
+    dsn      => 'dbi:mysql:dbname=hello_world;host=localhost',
+    username => 'benchmarkdbuser',
+    password => 'benchmarkdbpass'
 };
 
 get '/json' => sub {

+ 19 - 0
mojolicious/benchmark_config

@@ -0,0 +1,19 @@
+{
+  "framework": "mojolicious",
+  "tests": [{
+    "default": {
+      "setup_file": "setup",
+      "json_url": "/json",
+      "port": 8080,
+      "sort": 80
+    },
+    "raw": {
+      "setup_file": "setup",
+      "db_url": "/db",
+      "query_url": "/db?queries=",
+      "port": 8080,
+      "sort": 81
+    }
+  }]
+}
+

+ 3 - 3
mojolicious/nginx.conf

@@ -1,4 +1,4 @@
-user www;
+user USR;
 
 worker_processes 2;
 
@@ -16,11 +16,11 @@ http {
   tcp_nodelay      on;
 
   upstream backendurl {
-    server unix:/tmp/frameworks-benchmark.sock;
+    server unix:/home/ubuntu/FrameworkBenchmarks/mojolicious/frameworks-benchmark.sock;
   }
 
   server {
-    listen 8888;
+    listen 8080;
     server_name localhost;
 
     location / {

+ 32 - 0
mojolicious/setup.py

@@ -0,0 +1,32 @@
+import subprocess
+import sys
+import setup_util
+from os.path import expanduser
+import os
+import getpass
+
+home = expanduser("~")
+
+def start(args):
+  setup_util.replace_text("mojolicious/app.pl", "localhost", ""+ args.database_host +"")
+  setup_util.replace_text("mojolicious/nginx.conf", "USR", getpass.getuser())
+  setup_util.replace_text("mojolicious/nginx.conf", "server unix:.*\/FrameworkBenchmarks", "server unix:" + home + "/FrameworkBenchmarks")
+
+  try:
+    subprocess.Popen("plackup -E production -s Starman --workers=" + str(args.max_threads) + " -l " + home + "/FrameworkBenchmarks/mojolicious/frameworks-benchmark.sock -a ./app.pl", shell=True, cwd="mojolicious")
+    subprocess.check_call("sudo /usr/local/nginx/sbin/nginx -c " + home + "/FrameworkBenchmarks/mojolicious/nginx.conf", shell=True)
+    return 0
+  except subprocess.CalledProcessError:
+    return 1
+def stop():
+  try:
+    subprocess.call("sudo /usr/local/nginx/sbin/nginx -s stop", shell=True)
+    p = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE)
+    out, err = p.communicate()
+    for line in out.splitlines():
+      if 'plackup' in line:
+        pid = int(line.split(None, 2)[1])
+        os.kill(pid, 9)
+    return 0
+  except subprocess.CalledProcessError:
+    return 1