forked from binarymatt/pyres
-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.py
132 lines (106 loc) · 3.78 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import os
import itty
from itty import Redirect, get, post, serve_static_file, run_itty
from pyres import ResQ
from pyres import failure
from views import (
Overview,
Queues,
Queue,
Workers,
Working,
Failed,
Stats,
Stat,
Worker,
Delayed,
DelayedTimestamp
)
from base64 import b64decode
HOST = ResQ("localhost:6379")
MY_ROOT = os.path.join(os.path.dirname(__file__), 'media')
#resq = ResQ(HOST)
class ReswebRequest(itty.Request):
def setup_self(self):
self.script_name = self._environ.get('SCRIPT_NAME', '')
return super(MyRequest, self).setup_self()
itty.Request = ReswebRequest
@get("/")
def index(request):
return Overview(HOST, request.script_name).render().encode('utf-8')
@get("/working/")
def working(request):
return Working(HOST, request.script_name).render().encode('utf-8')
@get("/queues/")
def queues(request):
return Queues(HOST, request.script_name).render().encode('utf-8')
@get('/queues/(?P<queue_id>\w.+)/')
def queue(request, queue_id):
start = int(request.GET.get('start',0))
return Queue(HOST, request.script_name, queue_id, start).render().encode('utf-8')
@get('/failed/')
def failed(request):
start = request.GET.get('start',0)
start = int(start)
return Failed(HOST, request.script_name, start).render().encode('utf-8')
@post('/failed/retry/')
def failed_retry(request):
failed_job = request.POST['failed_job']
job = b64decode(failed_job)
decoded = ResQ.decode(job)
failure.retry(HOST, decoded['queue'], job)
raise Redirect(request.script_name + '/failed/')
@post('/failed/delete/')
def failed_delete(request):
failed_job = request.POST['failed_job']
job = b64decode(failed_job)
failure.delete(HOST, job)
raise Redirect(request.script_name + '/failed/')
@get('/failed/delete_all/')
def delete_all_failed(request):
#move resque:failed to resque:failed-staging
HOST.redis.rename('resque:failed','resque:failed-staging')
HOST.redis.delete('resque:failed-staging')
raise Redirect(request.script_name + '/failed/')
@get('/failed/retry_all')
def retry_failed(request, number=5000):
failures = failure.all(HOST, 0, number)
for f in failures:
j = b64decode(f['redis_value'])
failure.retry(HOST, f['queue'], j)
raise Redirect(request.script_name + '/failed/')
@get('/workers/(?P<worker_id>\w.+)/')
def worker(request, worker_id):
return Worker(HOST, request.script_name, worker_id).render().encode('utf-8')
@get('/workers/')
def workers(request):
return Workers(HOST, request.script_name).render().encode('utf-8')
@get('/stats/')
def stats(request):
raise Redirect(request.script_name + '/stats/resque/')
@get('/stats/(?P<key>\w+)/')
def stats(request, key):
return Stats(HOST, request.script_name, key).render().encode('utf-8')
@get('/stat/(?P<stat_id>\w.+)')
def stat(request, stat_id):
return Stat(HOST, request.script_name, stat_id).render().encode('utf-8')
@get('/delayed/')
def delayed(request):
start = request.GET.get('start',0)
start = int(start)
return Delayed(HOST, request.script_name, start).render().encode('utf-8')
@get('/delayed/(?P<timestamp>\w.+)')
def delayed_timestamp(request, timestamp):
start = request.GET.get('start',0)
start = int(start)
return DelayedTimestamp(HOST, request.script_name, timestamp, start).render().encode('utf-8')
@get('/media/(?P<filename>.+)')
def my_media(request, filename):
#return serve_static_file(request, filename)
#my_media.content_type = content_type(filename)
return serve_static_file(request, filename, root=MY_ROOT)
#output = static_file(filename, root=MY_ROOT)
#return Response(output, content_type=content_type(filename))
#return static_file(request, filename=filename, root=my_root)
if __name__ == "__main__":
run_itty()