123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- import os
- import sys
- from functools import partial
- from operator import attrgetter
- from random import randint
- from wheezy.http import HTTPResponse
- from wheezy.http import WSGIApplication
- from wheezy.routing import url
- from wheezy.web.handlers import BaseHandler
- from wheezy.web.middleware import bootstrap_defaults
- from wheezy.web.middleware import path_routing_middleware_factory
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import create_engine, Column
- from sqlalchemy.types import String, Integer
- from sqlalchemy.orm import sessionmaker
- DBDRIVER = 'mysql'
- DBHOSTNAME = os.environ.get('DBHOST', 'localhost')
- DATABASE_URI = '%s://benchmarkdbuser:benchmarkdbpass@%s:3306/hello_world?charset=utf8' % (DBDRIVER, DBHOSTNAME)
- Base = declarative_base()
- db_engine = create_engine(DATABASE_URI)
- Session = sessionmaker(bind=db_engine)
- db_session = Session()
- if sys.version_info[0] == 3:
- xrange = range
- def getQueryNum(queryString):
- try:
- int(queryString)
- return int(queryString)
- except ValueError:
- return 1
- class World(Base):
- __tablename__ = "World"
- id = Column(Integer, primary_key=True)
- randomNumber = Column(Integer)
- def serialize(self):
- return {
- 'id': self.id,
- 'randomNumber': self.randomNumber,
- }
- class JsonHandler(BaseHandler):
- def get(self):
- return self.json_response({"message": "Hello, world!"})
- class DbHandler(BaseHandler):
- def get(self):
- db_engine.connect()
- wid = randint(1, 10000)
- world = db_session.query(World).get(wid).serialize()
- return self.json_response(world)
- class QueriesHandler(BaseHandler):
- def get(self):
- queries = self.request.get_param("queries")
- num_queries = getQueryNum(queries)
- if num_queries < 1:
- num_queries = 1
- if num_queries > 500:
- num_queries = 500
- rp = partial(randint, 1, 10000)
- get = db_session.query(World).get
- worlds = [get(rp()).serialize() for _ in xrange(num_queries)]
- return self.json_response(worlds)
- class UpdatesHandler(BaseHandler):
- def get(self):
- queries = self.request.get_param("queries")
- num_queries = getQueryNum(queries)
- if num_queries < 1:
- num_queries = 1
- if num_queries > 500:
- num_queries = 500
- worlds = []
- rp = partial(randint, 1, 10000)
- ids = [rp() for _ in xrange(num_queries)]
- ids.sort() # To avoid deadlock
- for id in ids:
- world = db_session.query(World).get(id)
- world.randomNumber = rp()
- worlds.append(world.serialize())
- return self.json_response(worlds)
- def plaintext(request):
- response = HTTPResponse()
- response.write("Hello, world!")
- return response
- all_urls = [
- url("plaintext", plaintext, name="plaintext"),
- url("json", JsonHandler, name="json"),
- url("db", DbHandler, name="db"),
- url("queries", QueriesHandler, name="queries"),
- url("updates", UpdatesHandler, name="updates")
- ]
- options = {}
- main = WSGIApplication(
- middleware = [
- bootstrap_defaults(url_mapping=all_urls),
- path_routing_middleware_factory
- ],
- options = options
- )
- if __name__ == "__main__":
- from wsgiref.simple_server import make_server
- try:
- print("Server started on http://localhost:8080")
- make_server("", 8080, main).serve_forever()
- except KeyboardInterrupt:
- pass
- print("\nStopping server...")
|