Browse Source

Finish to integrate Redis in API-Hour benchmarks

Ludovic Gasc (GMLudo) 10 years ago
parent
commit
bf85aab049

+ 3 - 0
frameworks/Python/API-Hour/benchmark_config

@@ -26,6 +26,9 @@
     "redis": {
       "setup_file": "setup",
       "db_url": "/db_redis",
+      "query_url": "/queries_redis?queries=",
+      "fortune_url": "/fortunes_redis",
+      "update_url": "/updates_redis?queries=",
       "port": 8008,
       "approach": "Realistic",
       "classification": "Micro",

+ 3 - 0
frameworks/Python/API-Hour/hello/hello/__init__.py

@@ -29,8 +29,11 @@ class Container(api_hour.Container):
         self.servers['http'].router.add_route('GET', '/db', endpoints.world.db)
         self.servers['http'].router.add_route('GET', '/db_redis', endpoints.world.db_redis)
         self.servers['http'].router.add_route('GET', '/queries', endpoints.world.queries)
+        self.servers['http'].router.add_route('GET', '/queries_redis', endpoints.world.queries_redis)
         self.servers['http'].router.add_route('GET', '/fortunes', endpoints.world.fortunes)
+        self.servers['http'].router.add_route('GET', '/fortunes_redis', endpoints.world.fortunes_redis)
         self.servers['http'].router.add_route('GET', '/updates', endpoints.world.updates)
+        self.servers['http'].router.add_route('GET', '/updates_redis', endpoints.world.updates_redis)
         self.servers['http'].router.add_route('GET', '/plaintext', endpoints.world.plaintext)
 
     def make_servers(self):

+ 25 - 0
frameworks/Python/API-Hour/hello/hello/endpoints/world.py

@@ -38,6 +38,14 @@ def queries(request):
 
     return JSON((yield from get_random_records(container, limit)))
 
[email protected]
+def queries_redis(request):
+    """Test type 3: Multiple database queries"""
+    container = request.app.ah_container
+    limit = queries_number(request.GET.get('queries', 1))
+
+    return JSON((yield from redis.get_random_records(container, limit)))
+
 @asyncio.coroutine
 def fortunes(request):
     """Test type 4: Fortunes"""
@@ -47,6 +55,15 @@ def fortunes(request):
                                           request,
                                           {'fortunes': (yield from get_fortunes(container))})
 
[email protected]
+def fortunes_redis(request):
+    """Test type 4: Fortunes"""
+    container = request.app.ah_container
+
+    return aiohttp_jinja2.render_template('fortunes.html.j2',
+                                          request,
+                                          {'fortunes': (yield from redis.get_fortunes(container))})
+
 @asyncio.coroutine
 def updates(request):
     """Test type 5: Database updates"""
@@ -55,6 +72,14 @@ def updates(request):
 
     return JSON((yield from update_random_records(container, limit)))
 
[email protected]
+def updates_redis(request):
+    """Test type 5: Database updates"""
+    container = request.app.ah_container
+    limit = queries_number(request.GET.get('queries', 1))
+
+    return JSON((yield from redis.update_random_records(container, limit)))
+
 @asyncio.coroutine
 def plaintext(request):
     """Test type 6: Plaintext"""

+ 37 - 1
frameworks/Python/API-Hour/hello/hello/services/redis.py

@@ -1,3 +1,4 @@
+from operator import itemgetter
 import asyncio
 from random import randint
 
@@ -6,4 +7,39 @@ from random import randint
 def get_random_record(container):
     idx = randint(1, 10000)
     random_number = yield from container.engines['redis'].get('world:%i' % idx)
-    return {'Id': idx, 'RandomNumber': random_number}
+    return {'Id': idx, 'RandomNumber': random_number}
+
[email protected]
+def get_random_records(container, limit):
+    results = []
+    for i in range(limit):
+        idx = randint(1, 10000)
+        random_number = yield from container.engines['redis'].get('world:%i' % idx)
+        results.append({'Id': idx, 'RandomNumber': random_number})
+
+    return results
+
[email protected]
+def update_random_records(container, limit):
+    results = []
+    for i in range(limit):
+        idx = randint(1, 10000)
+        random_number = yield from container.engines['redis'].get('world:%i' % idx)
+        yield from container.engines['redis'].set('world:%i' % idx, str(randint(1, 10000)))
+        results.append({'Id': idx, 'RandomNumber': random_number})
+    return results
+
[email protected]
+def get_fortunes(container):
+    results = []
+    list_reply = yield from container.engines['redis'].lrange('fortunes')
+    fortunes = yield from list_reply.aslist()
+    i = 1
+    for fortune in fortunes:
+        results.append({'id': i, 'message': fortune})
+        i += 1
+
+    results.append({'id': 0, 'message': 'Additional fortune added at request time.'})
+    results.sort(key=itemgetter('message'))
+
+    return results