diff --git a/lib/galaxy/webapps/reports/controllers/jobs.py b/lib/galaxy/webapps/reports/controllers/jobs.py index e6de3253460..092f8563e43 100644 --- a/lib/galaxy/webapps/reports/controllers/jobs.py +++ b/lib/galaxy/webapps/reports/controllers/jobs.py @@ -11,6 +11,7 @@ from sqlalchemy import and_, not_, or_ from galaxy import model, util from galaxy.web.base.controller import BaseUIController, web from galaxy.web.framework.helpers import grids +from math import ceil from galaxy.webapps.reports.controllers.query import ReportQueryBuilder log = logging.getLogger( __name__ ) @@ -252,6 +253,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): Queries the DB for all jobs in given month, defaults to current month. """ message = '' + PageSpec = namedtuple('PageSpec', ['entries', 'offset', 'page', 'pages_found']) params = util.Params( kwd ) monitor_email = params.get( 'monitor_email', 'monitor@bx.psu.edu' ) @@ -261,6 +263,22 @@ class Jobs( BaseUIController, ReportQueryBuilder ): arrow = specs.arrow _order = specs.exc_order + if "entries" in kwd: + entries = int(kwd.get( 'entries' )) + else: + entries = 50 + limit = entries * 4 + + if "offset" in kwd: + offset = int(kwd.get( 'offset' )) + else: + offset = 0 + + if "page" in kwd: + page = int(kwd.get( 'page' )) + else: + page = 1 + # In case we don't know which is the monitor user we will query for all jobs monitor_user_id = get_monitor_id( trans, monitor_email ) @@ -280,7 +298,9 @@ class Jobs( BaseUIController, ReportQueryBuilder ): model.Job.table.c.create_time < end_date ), from_obj=[ model.Job.table ], group_by=[ 'date' ], - order_by=[ _order ] ) + order_by=[ _order ], + offset=offset, + limit=limit) jobs = [] for row in month_jobs.execute(): @@ -289,6 +309,9 @@ class Jobs( BaseUIController, ReportQueryBuilder ): row.total_jobs, row.date ) ) + + pages_found = ceil(len(jobs) / float(entries)) + page_specs = PageSpec(entries, offset, page, pages_found) return trans.fill_template( '/webapps/reports/jobs_specified_month_all.mako', order=order, arrow=arrow, @@ -296,6 +319,7 @@ class Jobs( BaseUIController, ReportQueryBuilder ): month_label=month_label, year_label=year_label, month=month, + page_specs=page_specs, jobs=jobs, is_user_jobs_only=monitor_user_id, message=message ) @@ -616,15 +640,6 @@ class Jobs( BaseUIController, ReportQueryBuilder ): job=job, message=message ) - @web.expose - def test( self, trans, **kwd ): - message = '' - order = "asc" - - return trans.fill_template( '/webapps/reports/test.mako', - order=order, - message=message ) - # ---- Utility methods ------------------------------------------------------- diff --git a/templates/page_base.mako b/templates/page_base.mako new file mode 100644 index 00000000000..76f4490ec79 --- /dev/null +++ b/templates/page_base.mako @@ -0,0 +1,280 @@ +<%doc> + This file defines methods for displaying information about pagination + + +<%def name="get_page_url( sort_id, order, *args, **kwargs )"> + ${kwargs.get("page")} + + +<%! + def get_raw_url(sort_id, order, *args, **kwargs): + return h.url_for( controller=args[0], action=args[1], sort_id=sort_id, order=order, **kwargs ) +%> + +<%def name="get_pages( sort_id, order, page_specs, *args, **kwargs )"> + ## Creates the page buttons + ${get_page_script()} + ${get_page_css()} + +
+
↞
+ %for x in range(-2,3): + <% + page = int(page_specs.page) + x + pages_found = int(page_specs.pages_found) + %> + %if page > 0: + %if x == 0: +
${page}
+ %elif page < page_specs.page + pages_found: + <% + entries = page_specs.entries + offset = page_specs.entries * (page - 1) + %> + %if x == -2 and page > 1: +
...
+ %endif +
${get_page_url( sort_id, order, *args, page=page, offset=offset, entries=entries )}
+ %if x == 2 and pages_found == 4: +
...
+ %endif + %endif + %endif + %endfor +
↠
+
+ + +<%def name="get_entry_selector(controller, action, entries, sort_id, order)"> +
+
+ + + Max items: + + + +
+
+ + +<%def name="get_page_css()"> + <%doc> + Page Styling + + + + <%doc> + Entry Styling + + + + +<%def name="get_page_script()"> + + diff --git a/templates/sorting_base.mako b/templates/sorting_base.mako index c02597ad29a..47a13ab177b 100644 --- a/templates/sorting_base.mako +++ b/templates/sorting_base.mako @@ -3,8 +3,10 @@ if sort_id == test_id: if order == "asc": tool_order = "desc" - else: + elif order == "desc": tool_order = "asc" + else: + tool_order = "default" else: tool_order = "default" %> diff --git a/templates/webapps/reports/jobs_specified_month_all.mako b/templates/webapps/reports/jobs_specified_month_all.mako index 7cfd0b1eaf8..7f6085e4f54 100644 --- a/templates/webapps/reports/jobs_specified_month_all.mako +++ b/templates/webapps/reports/jobs_specified_month_all.mako @@ -1,6 +1,7 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> <%namespace file="/sorting_base.mako" import="get_sort_url, get_css" /> +<%namespace file="/page_base.mako" import="get_pages, get_entry_selector" /> %if message: ${render_msg( message, 'done' )} @@ -11,32 +12,52 @@ ${get_css()}
-

Jobs for ${month_label} ${year_label}

-
Click job count to see the day's details
+ + + + + + +
+ ${get_pages( sort_id, order, page_specs, 'jobs', 'specified_month_all' )} + +

Jobs for ${month_label} ${year_label}

+
Click job count to see the day's details
+
+ ${get_entry_selector("jobs", "specified_month_all", page_specs.entries, sort_id, order)} +
%if len( jobs ) == 0: %else: + %if is_user_jobs_only: %else: %endif - <% ctr = 0 %> + <% + ctr = 0 + entries = 1 + %> %for job in jobs: + %if entries > page_specs.entries: + <%break%> + %endif + %if ctr % 2 == 1: %else: @@ -46,7 +67,10 @@ ${get_css()} - <% ctr += 1 %> + <% + ctr += 1 + entries += 1 + %> %endfor %endif
There are no jobs for ${month_label} ${year_label}
Day - ${get_sort_url(sort_id, order, 'date', 'jobs', 'specified_month_all', 'Date')} + ${get_sort_url(sort_id, order, 'date', 'jobs', 'specified_month_all', 'Date', page=page_specs.page, entries=page_specs.entries)} ${arrow} - ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'specified_month_all', 'User Jobs')} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'specified_month_all', 'User Jobs', page=page_specs.page, entries=page_specs.entries)} ${arrow} - ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'specified_month_all', 'User and Monitor Jobs')} + ${get_sort_url(sort_id, order, 'total_jobs', 'jobs', 'specified_month_all', 'User and Monitor Jobs', page=page_specs.page, entries=page_specs.entries)} ${arrow}
${month_label} ${job[1]}, ${year_label} ${job[2]}