123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #!/usr/bin/env python
- from collections import namedtuple
- from operator import attrgetter
- from random import randint
- import sys
- from flask import Flask, request, render_template, make_response, jsonify
- from pony import orm
- if sys.version_info[0] == 3:
- xrange = range
- _is_pypy = hasattr(sys, 'pypy_version_info')
- if _is_pypy:
- from psycopg2cffi import compat
- compat.register()
- DBDRIVER = 'postgres'
- DBHOST = 'tfb-database'
- # setup
- app = Flask(__name__)
- app.config['STORM_DATABASE_URI'] = "{DBDRIVER}://benchmarkdbuser:benchmarkdbpass@{DBHOST}:5432/hello_world".format(DBDRIVER=DBDRIVER, DBHOST=DBHOST)
- app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False
- db = orm.Database()
- db.bind(DBDRIVER, host=DBHOST, port=5432, user="benchmarkdbuser", password="benchmarkdbpass", database="hello_world")
- class World(db.Entity):
- _table_ = "world"
- id = orm.PrimaryKey(int)
- randomNumber = orm.Required(int, column="randomnumber")
- def to_dict(self):
- """Return object data in easily serializeable format"""
- return {
- 'id' : self.id,
- 'randomNumber': self.randomNumber
- }
- class Fortune(db.Entity):
- _table_ = "fortune"
- id = orm.PrimaryKey(int, auto=True)
- message = orm.Required(str)
- db.generate_mapping(create_tables=False)
- def get_num_queries():
- try:
- num_queries = request.args.get("queries", 1, type=int)
- except ValueError:
- num_queries = 1
- if num_queries < 1:
- return 1
- if num_queries > 500:
- return 500
- return num_queries
- def generate_ids(num_queries):
- ids = {randint(1, 10000) for _ in xrange(num_queries)}
- while len(ids) < num_queries:
- ids.add(randint(1, 10000))
- return list(sorted(ids))
- @app.route("/json")
- def hello():
- return jsonify(message='Hello, World!')
- @app.route("/query")
- def get_random_world():
- with orm.db_session(serializable=False):
- worlds = [World[ident].to_dict()
- for ident in generate_ids(get_num_queries())]
- return jsonify(worlds)
- @app.route("/db")
- def get_random_world_single():
- wid = randint(1, 10000)
- with orm.db_session(serializable=False):
- world = World[wid]
- return jsonify(world.to_dict())
- @app.route("/fortunes")
- def get_fortunes():
- with orm.db_session(serializable=False):
- fortunes = list(orm.select(fortune for fortune in Fortune))
- tmp_fortune = namedtuple("Fortune", ["id", "message"])
- fortunes.append(tmp_fortune(id=0, message="Additional fortune added at request time."))
- fortunes.sort(key=attrgetter('message'))
- return render_template('fortunes.html', fortunes=fortunes)
- @app.route("/updates")
- def updates():
- """Test 5: Database Updates"""
- num_queries = get_num_queries()
- ids = generate_ids(num_queries)
- ids.sort()
- worlds = []
- with orm.db_session(serializable=False):
- for ident in ids:
- world = World[ident]
- world.randomNumber = randint(1, 10000)
- worlds.append({"id": world.id, "randomNumber": world.randomNumber})
- return jsonify(worlds)
- @app.route('/plaintext')
- def plaintext():
- """Test 6: Plaintext"""
- response = make_response(b'Hello, World!')
- response.content_type = 'text/plain'
- return response
- try:
- import meinheld
- meinheld.server.set_access_logger(None)
- meinheld.set_keepalive(120)
- except ImportError:
- pass
- # entry point for debugging
- if __name__ == "__main__":
- app.run(debug=True)
|