From d3b54e3fcb8e74f3a1bb446b10ca4bcd8a5ce34a Mon Sep 17 00:00:00 2001 From: Sergey Tsalkov Date: Thu, 14 Nov 2019 13:55:22 -0800 Subject: [PATCH] can now configure number of results per page --- go.mod | 2 ++ web/joblist.go | 34 +++++++++++++++++++++++++--------- web/tpl/joblist.go | 32 ++++++++++---------------------- web/tpl/layout.go | 33 +++++++++++++++++++++++++++++---- 4 files changed, 66 insertions(+), 35 deletions(-) diff --git a/go.mod b/go.mod index 2e295ce..62ffaab 100644 --- a/go.mod +++ b/go.mod @@ -18,3 +18,5 @@ require ( gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v2 v2.2.1 // indirect ) + +go 1.13 diff --git a/web/joblist.go b/web/joblist.go index d6c2419..7ba356f 100644 --- a/web/joblist.go +++ b/web/joblist.go @@ -40,6 +40,7 @@ func joblistHandler(req *http.Request, rep *httpReply) (err error) { queueName := path[1] page := joblistQueryParams(req.URL.RawQuery) + perpage := joblistPerPage(req) output := &joblistOutputType{ QueueName: queueName, @@ -48,7 +49,7 @@ func joblistHandler(req *http.Request, rep *httpReply) (err error) { URL: req.URL, } - err = output.listJobs(listType == "pending") + err = output.listJobs(listType == "pending", perpage) if err != nil { return } @@ -58,7 +59,7 @@ func joblistHandler(req *http.Request, rep *httpReply) (err error) { } else if output.Page > output.Pages { output.Page = output.Pages - err = output.listJobs(listType == "pending") + err = output.listJobs(listType == "pending", perpage) if err != nil { return } @@ -83,6 +84,22 @@ func joblistQueryParams(rq string) (page int) { return page } +func joblistPerPage(req *http.Request) (perpage int64) { + perpage = 10 + + perpageCookie, err := req.Cookie("perpage") + if err != nil { + return + } + + perpage, _ = strconv.ParseInt(perpageCookie.Value, 10, 0) + if perpage < 1 || perpage > 100 { + perpage = 10 + } + + return +} + func (output *joblistOutputType) LinkParamsForPage(page int64) template.URL { if output.URL == nil { return template.URL("") @@ -102,15 +119,14 @@ func (output *joblistOutputType) LinkParamsForNextPage(page int64) template.URL return output.LinkParamsForPage(page + 1) } -func (output *joblistOutputType) listJobs(reverse bool) (err error) { - var perPage int64 = 10 - output.Start = (output.Page-1)*perPage + 1 - output.End = output.Page * perPage +func (output *joblistOutputType) listJobs(reverse bool, perpage int64) (err error) { + output.Start = (output.Page-1)*perpage + 1 + output.End = output.Page * perpage redisKey := fmt.Sprintf("%s:queue:%s:%s", redisHeader, output.QueueName, output.ListType) - rangeStart := (output.Page - 1) * perPage - rangeEnd := output.Page*perPage - 1 + rangeStart := (output.Page - 1) * perpage + rangeEnd := output.Page*perpage - 1 if reverse { rangeStart, rangeEnd = (rangeEnd+1)*-1, (rangeStart+1)*-1 @@ -128,7 +144,7 @@ func (output *joblistOutputType) listJobs(reverse bool) (err error) { } output.Length = lengthResult.Val() - output.Pages = int64(math.Ceil(float64(output.Length) / float64(perPage))) + output.Pages = int64(math.Ceil(float64(output.Length) / float64(perpage))) if output.End > output.Length { output.End = output.Length } diff --git a/web/tpl/joblist.go b/web/tpl/joblist.go index 34b04e7..1281e8b 100644 --- a/web/tpl/joblist.go +++ b/web/tpl/joblist.go @@ -101,12 +101,17 @@ var jobListTpl = `
- Showing results {{ .Start }}-{{ .End }} of {{ .Length }} + + Showing results + {{ .Start }}-{{ .End }} + of {{ .Length }} + + {{ if lt $.Page 2 }} ⟻ Prev {{ else }} - ⟻ Prev + ⟻ Prev {{ end }} Page {{ $.Page }} of {{ .Pages }} @@ -114,30 +119,13 @@ var jobListTpl = ` {{ if eq $.Page $.Pages }} Next ⟼ {{ else }} - Next ⟼ + Next ⟼ {{ end }}
- -{{ template "footer" }} + +{{ template "footer" "joblist" }} {{ end }} ` diff --git a/web/tpl/layout.go b/web/tpl/layout.go index e6586d4..c4c9fbf 100644 --- a/web/tpl/layout.go +++ b/web/tpl/layout.go @@ -14,7 +14,7 @@ var headerTpl = ` Brooce Job Queue - +