diff options
Diffstat (limited to 'src/cuirass/http.scm')
-rw-r--r-- | src/cuirass/http.scm | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm index 92f1ca6..48a2b39 100644 --- a/src/cuirass/http.scm +++ b/src/cuirass/http.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org> ;;; Copyright © 2018 Tatiana Sholokhova <tanja201396@gmail.com> +;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of Cuirass. ;;; @@ -116,6 +117,13 @@ Hydra format." (db-get-builds filters)))) (map build->hydra-build builds))) +(define (handle-builds-search-request filters) + "Retrieve all builds matched by FILTERS in the database and convert them to +Hydra format." + (let ((builds (with-time-logging "builds search request" + (db-get-builds-by-search filters)))) + (map build->hydra-build builds))) + (define (request-parameters request) "Parse the REQUEST query parameters and return them under the form '((parameter . value) ...)." @@ -341,6 +349,30 @@ Hydra format." (#:link . ,(string-append "/eval/" id)))))) (respond-html-eval-not-found id)))) + (("search") + (let* ((params (request-parameters request)) + (query (assq-ref params 'query)) + (builds-id-min (db-get-builds-query-min query)) + (builds-id-max (db-get-builds-query-max query)) + (border-low-id (assq-ref params 'border-low-id)) + (border-high-id (assq-ref params 'border-high-id))) + (if query + (respond-html + (html-page + "Search results" + (build-search-results-table + query + (handle-builds-search-request + `((query . ,query) + (nr . ,%page-size) + (order . finish-time+build-id) + (border-low-id . ,border-low-id) + (border-high-id . ,border-high-id))) + builds-id-min + builds-id-max) + '())) + (respond-json-with-error 500 "Query parameter not provided!")))) + (("static" path ...) (respond-static-file path)) ('method-not-allowed |