Skip to content

Commit a2a3073

Browse files
author
Matt George
committed
added pagination to the queue and failed views
1 parent de70eb3 commit a2a3073

File tree

5 files changed

+70
-6
lines changed

5 files changed

+70
-6
lines changed

resweb/media/style.css

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,12 @@ body { padding:0; margin:0; }
7272
#main p.pagination a.less { float:left;}
7373
#main p.pagination a.more { float:right;}
7474

75-
#main form.clear-failed {float:right; margin-top:-10px;}
75+
#main form.clear-failed {float:right; margin-top:-10px;}
76+
77+
ul.pagination{
78+
list-style-type: none;
79+
}
80+
ul.pagination li{
81+
text-decoration: none;
82+
display:inline;
83+
}

resweb/templates/failed.mustache

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,13 @@ $(document).ready(function(){
99
</script>
1010
<h1>Failed Jobs</h1>
1111
<p class='sub'>Showing {{start}} to {{end}} of <b>{{size}}</b> jobs</p>
12-
12+
<ul class='pagination'>
13+
{{#pagination}}
14+
<li>
15+
{{#current}}<a href='{{link}}'>{{/current}}{{link_name}}{{#current}}</a>{{/current}}
16+
</li>
17+
{{/pagination}}
18+
</ul>
1319
<ul class='failed'>
1420
{{#failed_jobs}}
1521
<li>

resweb/templates/queue.mustache

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
{{>header}}
2+
23
<h1>Pending jobs on <span class='hl'>{{queue}}</span></h1>
34
<p class='sub'>Showing {{start}} to {{end}} of <b>{{size}}</b> jobs</p>
5+
<ul class='pagination'>
6+
{{#pagination}}
7+
<li>
8+
{{#current}}<a href='{{link}}'>{{/current}}{{link_name}}{{#current}}</a>{{/current}}
9+
</li>
10+
{{/pagination}}
11+
</ul>
412
<table class='jobs'>
513
<tr>
614
<th>Class</th>

resweb/views.py

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,24 @@ def address(self):
1919
return '%s:%s' % (self.resq.redis.host,self.resq.redis.port)
2020
def version(self):
2121
return str(__version__)
22-
22+
def pages(self, start, size, link_function, width=20):
23+
pages = []
24+
25+
num_pages = size / width
26+
if size % width > 0:
27+
num_pages += 1
28+
29+
if size < width:
30+
return pages
31+
32+
for i in range(num_pages):
33+
current = True
34+
if start == i*width:
35+
current = False
36+
link = link_function(i*width)
37+
link_name = str(i+1)
38+
pages.append(dict(link=link,link_name=link_name,current=current))
39+
return pages
2340

2441
class Overview(ResWeb):
2542
def __init__(self, host, queue=None, start=0):
@@ -138,20 +155,28 @@ def workers(self):
138155
item['nodata'] = not item['data']
139156
workers.append(item)
140157
return workers
158+
141159
class Queue(ResWeb):
142160
def __init__(self, host, key, start=0):
143161
self.key = key
144162
self._start = start
145163
super(Queue, self).__init__(host)
164+
146165
def start(self):
147166
return str(self._start)
148167

149168
def end(self):
150-
return str(self._start + 20)
169+
end = self._start + 20
170+
if end > int(self.size()):
171+
end = self.size()
172+
return str(end)
173+
151174
def queue(self):
152175
return self.key
176+
153177
def size(self):
154178
return str(self.resq.size(self.key) or 0)
179+
155180
def jobs(self):
156181
jobs = []
157182
for job in self.resq.peek(self.key, self._start, self._start+20):
@@ -160,6 +185,14 @@ def jobs(self):
160185
'args': str(job['args'])
161186
})
162187
return jobs
188+
189+
def pagination(self):
190+
return self.pages(self._start, int(self.size()), self.link_func)
191+
192+
def link_func(self, start):
193+
return '/queues/%s/?start=%s' % (self.key, start)
194+
195+
163196
class Failed(ResWeb):
164197
def __init__(self, host, start=0):
165198
self._start = start
@@ -184,7 +217,12 @@ def failed_jobs(self):
184217
item['traceback'] = '\n'.join(job['backtrace'])
185218
jobs.append(item)
186219
return jobs
187-
220+
221+
def pagination(self):
222+
return self.pages(self._start, int(self.size()), self.link_func)
223+
224+
def link_func(self, start):
225+
return '/failed/?start=%s' % start
188226
class Stats(ResWeb):
189227
def __init__(self, host, key_id):
190228
self.key_id = key_id

roadmap.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ Version 0.6
55
* better webtests
66
* resweb pagination
77

8+
Version 0.7
9+
===========
10+
* resweb controls for failed queues
11+
812
Version 0.8
913
===========
1014
* horde package integration
@@ -13,4 +17,4 @@ Version 0.8
1317
Version 1.0
1418
===========
1519
* stabilize the api
16-
* semantic versioniong
20+
* semantic versioning

0 commit comments

Comments
 (0)