aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2019-12-14 20:59:54 +0000
committerChristopher Baines <mail@cbaines.net>2019-12-14 20:59:54 +0000
commita84fc954d19f70e49f575cb43a6d46569f317f81 (patch)
treec6016edd8027892506fde64b30ffd98beda42c68
parent633e757fe8668d88c0cf7bd43cf7a528003374a0 (diff)
downloaddata-service-a84fc954d19f70e49f575cb43a6d46569f317f81.tar
data-service-a84fc954d19f70e49f575cb43a6d46569f317f81.tar.gz
Extend select-build-stats to allow filtering by revision
-rw-r--r--guix-data-service/model/build.scm47
1 files changed, 39 insertions, 8 deletions
diff --git a/guix-data-service/model/build.scm b/guix-data-service/model/build.scm
index 65a58da..d1228b2 100644
--- a/guix-data-service/model/build.scm
+++ b/guix-data-service/model/build.scm
@@ -11,12 +11,39 @@
insert-build
ensure-build-exists))
-(define (select-build-stats conn build-servers)
+(define* (select-build-stats conn build-servers #:key revision-commit)
+ (define criteria
+ `(,@(if build-servers
+ (list
+ (string-append
+ "builds.build_server_id IN ("
+ (string-join (map number->string build-servers)
+ ", ")
+ ")"))
+ '())
+ ,@(if revision-commit
+ '("guix_revisions.commit = $1")
+ '())))
+
(define query
(string-append
"
SELECT latest_build_status.status AS build_status, builds.build_server_id, COUNT(*)
FROM derivation_output_details_sets
+"
+ (if revision-commit
+ "
+INNER JOIN derivations_by_output_details_set
+ ON derivation_output_details_sets.id =
+ derivations_by_output_details_set.derivation_output_details_set_id
+INNER JOIN package_derivations
+ ON derivations_by_output_details_set.derivation_id = package_derivations.derivation_id
+INNER JOIN guix_revision_package_derivations
+ ON guix_revision_package_derivations.package_derivation_id = package_derivations.id
+INNER JOIN guix_revisions
+ ON guix_revision_package_derivations.revision_id = guix_revisions.id"
+ "")
+ "
LEFT JOIN builds
ON builds.derivation_output_details_set_id =
derivation_output_details_sets.id
@@ -28,13 +55,11 @@ LEFT JOIN
) AS latest_build_status
ON builds.id = latest_build_status.build_id
"
- (if build-servers
+ (if (null? criteria)
+ ""
(string-append
- "WHERE builds.build_server_id IN ("
- (string-join (map number->string build-servers)
- ", ")
- ")")
- "")
+ "WHERE "
+ (string-join criteria " AND ")))
"
GROUP BY latest_build_status.status, builds.build_server_id
ORDER BY status"))
@@ -47,7 +72,13 @@ ORDER BY status"))
(cons (string->number build-server-id)
(string->number count))))
data))))
- (group-list-by-first-n-fields 1 (exec-query conn query))))
+ (group-list-by-first-n-fields
+ 1
+ (exec-query conn
+ query
+ `(,@(if revision-commit
+ (list revision-commit)
+ '()))))))
(define (select-builds-with-context conn build-statuses build-server-ids)
(define where-conditions