|
@@ -0,0 +1,98 @@
|
|
|
+from vibora import Vibora
|
|
|
+from vibora.request import Request
|
|
|
+from vibora.responses import JsonResponse, Response
|
|
|
+from vibora.hooks import Events
|
|
|
+from random import randint
|
|
|
+from operator import itemgetter
|
|
|
+import psycopg2
|
|
|
+
|
|
|
+READ_ROW_SQL = 'SELECT * FROM "world" WHERE id={0}'
|
|
|
+WRITE_ROW_SQL = 'UPDATE "world" SET "randomnumber"={0} WHERE id={1} RETURNING id, randomNumber'
|
|
|
+READ_ALL_FORTUNES = 'SELECT * FROM "fortune"'
|
|
|
+ADDITIONAL_ROW = [0, 'Additional fortune added at request time.']
|
|
|
+sort_fortunes_key = itemgetter(1)
|
|
|
+
|
|
|
+app = Vibora()
|
|
|
+con = psycopg2.connect("dbname=hello_world user=benchmarkdbuser host=tfb-database password=benchmarkdbpass")
|
|
|
+cur = con.cursor()
|
|
|
+
|
|
|
+def getQueriesTotal(params):
|
|
|
+ try:
|
|
|
+ queries = params['queries']
|
|
|
+ query_count = int(queries)
|
|
|
+ except:
|
|
|
+ return 1
|
|
|
+
|
|
|
+ if query_count < 1:
|
|
|
+ return 1
|
|
|
+ if query_count > 500:
|
|
|
+ return 500
|
|
|
+ return query_count
|
|
|
+
|
|
|
+
|
|
|
+async def fetchWorld():
|
|
|
+ rand = randint(1, 10000)
|
|
|
+ cur.execute(READ_ROW_SQL.format(rand))
|
|
|
+ res = cur.fetchone()
|
|
|
+ return res
|
|
|
+
|
|
|
+async def updateWorld(world_id):
|
|
|
+ new_num_rand = randint(1, 10000)
|
|
|
+ cur.execute(WRITE_ROW_SQL.format(new_num_rand, world_id))
|
|
|
+ res = cur.fetchone()
|
|
|
+ return res
|
|
|
+
|
|
|
+async def fetchMultipleWorlds(total):
|
|
|
+ worlds = []
|
|
|
+ for x in range(total):
|
|
|
+ res = await fetchWorld()
|
|
|
+ worlds.append({'id': res[0], 'randomNumber': res[1]})
|
|
|
+ return worlds
|
|
|
+
|
|
|
+async def updateMultipleWorlds(total):
|
|
|
+ worlds = []
|
|
|
+ for x in range(total):
|
|
|
+ res = await fetchWorld()
|
|
|
+ updated = await updateWorld(res[0])
|
|
|
+ worlds.append({'id': updated[0], 'randomNumber': updated[1]})
|
|
|
+ return worlds
|
|
|
+
|
|
|
+async def fetchFortunes():
|
|
|
+ cur.execute(READ_ALL_FORTUNES)
|
|
|
+ res = cur.fetchall()
|
|
|
+ return res
|
|
|
+
|
|
|
[email protected]('/fortunes')
|
|
|
+async def fortunes():
|
|
|
+ fortunes = await fetchFortunes()
|
|
|
+ fortunes.append(ADDITIONAL_ROW)
|
|
|
+ fortunes = fortunes.sort(key=sort_fortunes_key)
|
|
|
+ return await app.render('index.html', fortunes=fortunes)
|
|
|
+
|
|
|
[email protected]('/db')
|
|
|
+async def single_query(request: Request):
|
|
|
+ res = await fetchWorld()
|
|
|
+ return JsonResponse({'id': res[0], 'randomNumber': res[1]}, headers={'Server': 'Vibora'})
|
|
|
+
|
|
|
[email protected]('/plaintext')
|
|
|
+async def plaintext():
|
|
|
+ return Response(b'Hello, World!', headers={'Server': 'Vibora', 'Content-Type': 'text/plain'})
|
|
|
+
|
|
|
[email protected]('/json')
|
|
|
+async def json():
|
|
|
+ return JsonResponse({'message': 'Hello, World!'}, headers={'Server': 'Vibora'})
|
|
|
+
|
|
|
[email protected]('/queries')
|
|
|
+async def multiple_queries(request: Request):
|
|
|
+ total_queries = getQueriesTotal(request.args)
|
|
|
+ worlds = await fetchMultipleWorlds(total_queries)
|
|
|
+ return JsonResponse(worlds, headers={'Server': 'Vibora', 'Content-Type': 'application/json', 'Content-Length': str(total_queries)})
|
|
|
+
|
|
|
[email protected]('/updates')
|
|
|
+async def update_queries(request: Request):
|
|
|
+ total_queries = getQueriesTotal(request.args)
|
|
|
+ worlds = updateMultipleWorlds(total_queries)
|
|
|
+ return JsonResponse(worlds, headers={'Server': 'Vibora', 'Content-Type': 'application/json', 'Content-Length': str(total_queries)})
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ app.run(host="0.0.0.0", port=8000)
|