Browse Source

rough in flask based test

Pete Richards 12 years ago
parent
commit
736c409282
6 changed files with 88 additions and 0 deletions
  1. 17 0
      flask/README.md
  2. 0 0
      flask/__init__.py
  3. 29 0
      flask/app.py
  4. 13 0
      flask/benchmark_config
  5. 23 0
      flask/setup.py
  6. 6 0
      installer.py

+ 17 - 0
flask/README.md

@@ -0,0 +1,17 @@
+# Flask Benchmark Test
+
+Single file test, [app.py](app.py)
+
+
+## Test URLs
+### JSON Encoding 
+
+http://localhost:8080/json
+
+### Single Row Random Query
+
+http://localhost:8080/db
+
+### Variable Row Query Test
+
+http://localhost:8080/db?queries=2

+ 0 - 0
flask/__init__.py


+ 29 - 0
flask/app.py

@@ -0,0 +1,29 @@
+from flask import Flask, jsonify, request
+from flask.ext.sqlalchemy import SQLAlchemy
+from random import randint
+
+app = Flask(__name__)
+app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://benchmarkdbuser:benchmarkdbpass@DBHOSTNAME:3306/hello_world'
+db = SQLAlchemy(app)
+
+class World(db.Model):
+  __tablename__ = "World"
+  id = db.Column(db.Integer, primary_key=True)
+  randomNumber = db.Column(db.Integer)
+
[email protected]("/json")
+def hello():
+  resp = {"message": "Hello, World!"}
+  return jsonify(resp)
+
[email protected]("/db")
+def get_random_world():
+  num_queries = request.args.get("queries", 1)
+  worlds = []
+  for i in range(int(num_queries)):
+    wid = randint(1, 10000)
+    worlds[i] = World.query.get(wid)
+  return jsonify(worlds=worlds)
+  
+if __name__ == "__main__":
+    app.run()

+ 13 - 0
flask/benchmark_config

@@ -0,0 +1,13 @@
+{
+  "framework": "flask",
+  "tests": [{
+    "default": {
+      "setup_file": "setup",
+      "json_url": "/json",
+      "db_url": "/db",
+      "query_url": "/db?queries=",
+      "port": 8080,
+      "sort": 31
+    }
+  }]
+}

+ 23 - 0
flask/setup.py

@@ -0,0 +1,23 @@
+import subprocess
+import sys
+import setup_util
+import os
+
+def start(args):
+  setup_util.replace_text("flask/app.py", "DBHOSTNAME", args.database_host)
+  subprocess.Popen("gunicorn app:app -b 0.0.0.0:8080 -w " + str((args.max_threads * 2)) + " --log-level=critical", shell=True, cwd="flask")
+  
+  return 0
+
+def stop():
+  p = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE)
+  out, err = p.communicate()
+  for line in out.splitlines():
+    if 'gunicorn' in line:
+      try:
+        pid = int(line.split(None, 2)[1])
+        os.kill(pid, 9)
+      except OSError:
+        pass
+  
+  return 0

+ 6 - 0
installer.py

@@ -176,6 +176,12 @@ 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
+    ##############################
+    self.__run_command("sudo pip install flask flask-sqlalchemy")
 
     ##############################
     # Play