summaryrefslogtreecommitdiff
path: root/src/cuirass/http.scm
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2019-05-17 22:33:27 +0200
committerRicardo Wurmus <rekado@elephly.net>2019-05-17 22:40:12 +0200
commitce114d8446b3d95c08129d10d5aeb2038d545228 (patch)
tree78abc6fea524121e2ba731bcedb46a80ec36fafc /src/cuirass/http.scm
parenteb9636e2878a6d6a5bb6d02e2d405ed33d601093 (diff)
downloadcuirass-ce114d8446b3d95c08129d10d5aeb2038d545228.tar
cuirass-ce114d8446b3d95c08129d10d5aeb2038d545228.tar.gz
cuirass: Add search for builds.
* src/cuirass/database.scm (db-get-builds-by-search, db-get-builds-query-min, db-get-builds-query-max): New procedures. * src/cuirass/http.scm (handle-builds-search-request): New procedure. (url-handler): Handle "search" route. * src/cuirass/templates.scm (search-form): New variable. (html-page): Use it. (build-search-results-table): New procedure.
Diffstat (limited to 'src/cuirass/http.scm')
-rw-r--r--src/cuirass/http.scm32
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