diff options
Diffstat (limited to 'guix-data-service/web/build/controller.scm')
-rw-r--r-- | guix-data-service/web/build/controller.scm | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/guix-data-service/web/build/controller.scm b/guix-data-service/web/build/controller.scm index 413f381..df08e3c 100644 --- a/guix-data-service/web/build/controller.scm +++ b/guix-data-service/web/build/controller.scm @@ -20,9 +20,18 @@ #:use-module (guix-data-service web render) #:use-module (guix-data-service web query-parameters) #:use-module (guix-data-service model build) + #:use-module (guix-data-service model build-status) #:use-module (guix-data-service web build html) #:export (build-controller)) +(define (parse-build-status status) + (if (member status build-status-strings) + status + (make-invalid-query-parameter + status + (string-append "unknown build status: " + status)))) + (define (build-controller request method-and-path-components mime-types @@ -30,11 +39,27 @@ conn) (match method-and-path-components (('GET "builds") - (render-builds mime-types + (render-builds request + mime-types conn)) (_ #f))) -(define (render-builds mime-types conn) - (render-html - #:sxml (view-builds (select-build-stats conn) - (select-builds-with-context conn)))) +(define (render-builds request mime-types conn) + (let ((parsed-query-parameters + (parse-query-parameters + request + `((build_status ,parse-build-status #:multi-value))))) + (if (any-invalid-query-parameters? parsed-query-parameters) + (render-html + #:sxml (view-builds parsed-query-parameters + build-status-strings + '() + '())) + (render-html + #:sxml (view-builds parsed-query-parameters + build-status-strings + (select-build-stats conn) + (select-builds-with-context + conn + (assq-ref parsed-query-parameters + 'build_status))))))) |