Skip to content

Commit 35bb3dd

Browse files
author
Matt George
committed
first steps towards resweb using flask
1 parent 5189970 commit 35bb3dd

File tree

11 files changed

+128
-1
lines changed

11 files changed

+128
-1
lines changed

resweb/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def __init__(self, host):
1414
self.resq = host
1515

1616
def media_folder(self):
17-
return '/media/'
17+
return '/static/'
1818

1919
def close(self):
2020
self.resq.close()

resweb/webapp.py

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
try:
2+
import json
3+
except ImportError:
4+
import simplejson as json
5+
6+
from base64 import b64decode
7+
from flask import Flask, g, request, redirect
8+
from pyres import ResQ, failure
9+
from flaskext.redis import Redis
10+
11+
app = Flask(__name__)
12+
db = Redis(app)
13+
from views import (
14+
Overview,
15+
Queues,
16+
Queue,
17+
Workers,
18+
Working,
19+
Failed,
20+
Stats,
21+
Stat,
22+
Worker,
23+
Delayed,
24+
DelayedTimestamp
25+
)
26+
27+
@app.route("/")
28+
def index():
29+
return Overview(ResQ(server=g.redis)).render()
30+
31+
@app.route("/working/")
32+
def working():
33+
return Working( ResQ(server=g.redis)).render()
34+
35+
@app.route("/queues/")
36+
def queues():
37+
return Queues( ResQ(server=g.redis)).render()
38+
39+
@app.route('/queues/<queue_id>/')
40+
def queue(queue_id):
41+
start = int(request.args.get('start',0))
42+
return Queue( ResQ(server=g.redis), queue_id, start).render()
43+
44+
@app.route('/failed/')
45+
def failed():
46+
start = request.args.get('start',0)
47+
start = int(start)
48+
return str(Failed( ResQ(server=g.redis), start).render())
49+
50+
@app.route('/failed/retry/', methods=['POST'])
51+
def failed_retry():
52+
failed_job = request.form['failed_job']
53+
job = b64decode(failed_job)
54+
decoded = ResQ.decode(job)
55+
failure.retry( ResQ(server=g.redis), decoded['queue'], job)
56+
return redirect('/failed/')
57+
58+
@app.route('/failed/delete/', methods=['POST'])
59+
def failed_delete():
60+
failed_job = request.form['failed_job']
61+
job = b64decode(failed_job)
62+
failure.delete( ResQ(server=g.redis), job)
63+
return redirect('/failed/')
64+
65+
@app.route('/failed/delete_all/')
66+
def delete_all_failed():
67+
#move resque:failed to resque:failed-staging
68+
g.redis.rename('resque:failed','resque:failed-staging')
69+
g.redis.delete('resque:failed-staging')
70+
return redirect('/failed/')
71+
72+
73+
@app.route('/failed/retry_all')
74+
def retry_failed(number=5000):
75+
failures = failure.all(ResQ(server=g.redis), 0, number)
76+
for f in failures:
77+
j = b64decode(f['redis_value'])
78+
failure.retry(ResQ(server=g.redis), f['queue'], j)
79+
return redirect('/failed/')
80+
81+
@app.route('/workers/(?P<worker_id>\w.+)/')
82+
def worker(worker_id):
83+
return str(Worker(ResQ(server=g.redis), worker_id).render())
84+
85+
@app.route('/workers/')
86+
def workers():
87+
return str(Workers(ResQ(server=g.redis)).render())
88+
89+
90+
91+
@app.route('/stats/<key>/')
92+
def stats(key):
93+
return str(Stats(ResQ(server=g.redis), key).render())
94+
95+
@app.route('/stats/')
96+
def stats_r():
97+
return redirect('/stats/resque/')
98+
99+
@app.route('/stat/(?P<stat_id>\w.+)')
100+
def stat(stat_id):
101+
return str(Stat(ResQ(server=g.redis), stat_id).render())
102+
103+
@app.route('/delayed/')
104+
def delayed():
105+
start = request.args.get('start',0)
106+
start = int(start)
107+
return str(Delayed(ResQ(server=g.redis), start).render())
108+
109+
@app.route('/delayed/<timestamp>')
110+
def delayed_timestamp(timestamp):
111+
start = request.args.get('start',0)
112+
start = int(start)
113+
return str(DelayedTimestamp(ResQ(server=g.redis), timestamp, start).render())
114+
115+
if __name__ == "__main__":
116+
app.run(debug=True)

0 commit comments

Comments
 (0)