Improve the compare derivations page

Add support for filtering the results, and add the system and target
to the output.
This commit is contained in:
Christopher Baines 2019-03-17 22:44:09 +00:00
parent 0d16c87da8
commit 189014f3bc
Signed by: cbaines
GPG key ID: 5E28A33B0B84F577
5 changed files with 254 additions and 51 deletions

View file

@ -1,6 +1,7 @@
(define-module (guix-data-service model build-status)
#:use-module (squee)
#:export (build-statuses
build-status-strings
insert-build-status))
(define build-statuses
@ -12,6 +13,9 @@
(3 . "failed-other")
(4 . "canceled")))
(define build-status-strings
(map cdr build-statuses))
(define (insert-build-status conn internal-build-id
starttime stoptime status)
(exec-query conn

View file

@ -8,7 +8,8 @@
#:use-module (guix memoization)
#:use-module (guix derivations)
#:use-module (guix-data-service model utils)
#:export (select-derivation-by-file-name
#:export (valid-systems
select-derivation-by-file-name
select-derivation-outputs-by-derivation-id
select-derivation-by-output-filename
select-derivations-using-output
@ -16,10 +17,16 @@
select-derivation-inputs-by-derivation-id
select-existing-derivations
select-derivations-by-id
select-derivations-and-build-status-by-file-name
select-derivations-and-build-status
insert-into-derivations
derivation-file-names->derivation-ids))
(define (valid-systems conn)
(map car
(exec-query
conn
"SELECT DISTINCT system FROM derivations ORDER BY 1")))
(define (select-existing-derivations file-names)
(string-append "SELECT id, file_name "
"FROM derivations "
@ -462,11 +469,45 @@ ORDER BY derivations.system DESC,
(exec-query conn query))
(define (select-derivations-and-build-status-by-file-name conn file-names)
(define* (select-derivations-and-build-status conn #:key
file-names
systems
targets
build-statuses)
(define criteria
(string-join
(filter-map
(lambda (field values)
(if (and values (not (null? values)))
(string-append
field " IN ("
(string-join (map (lambda (value)
(simple-format #f "'~A'" value))
values)
",")
")")
#f))
'("derivations.file_name"
"derivations.system"
"target"
"latest_build_status.status")
(list file-names
systems
targets
build-statuses))
" AND "))
(define query
(string-append
"SELECT derivations.file_name, latest_build_status.status "
"SELECT derivations.file_name, derivations.system, ("
" SELECT DISTINCT package_derivations.target"
" FROM package_derivations"
" WHERE derivations.id = package_derivations.derivation_id"
") AS target, "
"latest_build_status.status "
"FROM derivations "
"INNER JOIN package_derivations"
" ON derivations.id = package_derivations.derivation_id "
"LEFT OUTER JOIN builds ON derivations.id = builds.derivation_id "
"LEFT OUTER JOIN "
"(SELECT DISTINCT ON (internal_build_id) * "
@ -474,12 +515,7 @@ ORDER BY derivations.system DESC,
"ORDER BY internal_build_id, status_fetched_at DESC"
") AS latest_build_status "
"ON builds.internal_id = latest_build_status.internal_build_id "
"WHERE derivations.file_name IN "
"(" (string-join (map (lambda (file-name)
(simple-format #f "'~A'" file-name))
file-names)
",")
");"))
"WHERE " criteria ";"))
(exec-query conn query))