summaryrefslogtreecommitdiff
path: root/app.py
diff options
context:
space:
mode:
Diffstat (limited to 'app.py')
-rw-r--r--app.py28
1 files changed, 20 insertions, 8 deletions
diff --git a/app.py b/app.py
index 45e1295..ac84e0e 100644
--- a/app.py
+++ b/app.py
@@ -2,6 +2,7 @@ import json
from flask import Flask, request
from flask.ext import restful
+from flask.ext.cache import Cache
from flask.ext.restful import reqparse
from flask.ext.sqlalchemy import SQLAlchemy
@@ -12,6 +13,10 @@ from cors import crossdomain
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = environ.get('DATABASE_URL', 'postgres://localhost:5432/traces')
+cache = Cache(app, config={
+ 'CACHE_TYPE': 'redis',
+ 'CACHE_REDIS_URL': environ.get('REDISCLOUD_URL', 'redis://localhost')
+})
db = SQLAlchemy(app)
api = restful.Api(app)
@@ -33,19 +38,26 @@ class Trace(db.Model):
def __repr__(self):
return '{} {}'.format(self.id, self.page)
+@cache.memoize(timeout=60*2)
+def _get_page_traces(page=None, limit=3):
+ print 'hit'
+ traces = Trace.query
+ if page:
+ traces = traces.filter_by(page=page)
+ traces = traces.order_by(Trace.id.desc()).limit(limit)
+ return json.dumps([{
+ 'page': trace.page,
+ 'trace': json.loads(trace.trace)
+ } for trace in traces])
+
class Traces(restful.Resource):
@crossdomain(origin='*')
def get(self):
args = trace_parser.parse_args()
- traces = Trace.query
- if 'page' in request.args:
- traces = traces.filter_by(page=request.args['page'])
- traces = traces.order_by(Trace.id.desc()).limit(int(request.args.get('limit', '3')))
- return json.dumps([{
- 'page': trace.page,
- 'trace': json.loads(trace.trace)
- } for trace in traces])
+ page = request.args.get('page')
+ limit = int(request.args.get('limit', '3'))
+ return _get_page_traces(page, limit)
@crossdomain(origin='*')
def post(self):