aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2025-02-16 12:44:17 +0000
committerChristopher Baines <mail@cbaines.net>2025-02-16 12:44:17 +0000
commit9eed87b6e6a327275095c7e57542b4c84e4b11a5 (patch)
tree81d4114cddc1e1b963ad097b0867f8520effa728
parenteabd4e66853e977d10dadcc90f80b3fded26ec6e (diff)
downloadbuild-coordinator-9eed87b6e6a327275095c7e57542b4c84e4b11a5.tar
build-coordinator-9eed87b6e6a327275095c7e57542b4c84e4b11a5.tar.gz
Support canceling builds by created_at
-rw-r--r--guix-build-coordinator/client-communication.scm16
-rw-r--r--guix-build-coordinator/datastore.scm6
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm12
-rw-r--r--scripts/guix-build-coordinator.in12
4 files changed, 45 insertions, 1 deletions
diff --git a/guix-build-coordinator/client-communication.scm b/guix-build-coordinator/client-communication.scm
index 8c4d1fc..3254a9f 100644
--- a/guix-build-coordinator/client-communication.scm
+++ b/guix-build-coordinator/client-communication.scm
@@ -416,6 +416,14 @@
(or (and=> (assq-ref query-parameters 'priority_lt)
string->number)
'unset)
+ #:created-at->
+ (or (and=> (assq-ref query-parameters 'created_at_gt)
+ datastore-validate-datetime-string)
+ 'unset)
+ #:created-at-<
+ (or (and=> (assq-ref query-parameters 'created_at_lt)
+ datastore-validate-datetime-string)
+ 'unset)
#:relationship
(or (and=> (assq-ref query-parameters 'relationship)
string->symbol)
@@ -874,6 +882,8 @@
(canceled 'unset)
(priority-> 'unset)
(priority-< 'unset)
+ (created-at-> 'unset)
+ (created-at-< 'unset)
(relationship 'unset)
(after-id #f)
(limit #f))
@@ -922,6 +932,12 @@
,@(if (number? priority-<)
(list (simple-format #f "priority_lt=~A" priority-<))
'())
+ ,@(if (string? created-at->)
+ (list (simple-format #f "created_at_gt=~A" created-at->))
+ '())
+ ,@(if (string? created-at-<)
+ (list (simple-format #f "created_at_lt=~A" created-at-<))
+ '())
,@(if (and relationship (not (eq? 'unset relationship)))
(list (simple-format #f "relationship=~A" relationship))
'())
diff --git a/guix-build-coordinator/datastore.scm b/guix-build-coordinator/datastore.scm
index ac0d01b..ae65b7d 100644
--- a/guix-build-coordinator/datastore.scm
+++ b/guix-build-coordinator/datastore.scm
@@ -6,7 +6,8 @@
#:use-module (guix-build-coordinator datastore postgresql)
#:duplicates (merge-generics)
#:export (database-uri->datastore
- datastore-find-build-output))
+ datastore-find-build-output
+ datastore-validate-datetime-string))
(re-export datastore-optimize)
(re-export datastore-spawn-fibers)
@@ -123,3 +124,6 @@
(assq-ref output 'output)
#f))
outputs)))
+
+(define (datastore-validate-datetime-string s)
+ (strftime "%F %T" (car (strptime "%F %T" s))))
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index ef66a2c..556f36f 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -2445,6 +2445,8 @@ WHERE uuid = :uuid"
(canceled 'unset)
(priority-> 'unset)
(priority-< 'unset)
+ (created-at-> 'unset)
+ (created-at-< 'unset)
(after-id #f)
(limit #f)
;; other-builds-dependent or no-dependent-builds
@@ -2529,6 +2531,8 @@ SELECT id FROM tags WHERE key = :key"
(not (null? not-systems))
(not (eq? priority-> 'unset))
(not (eq? priority-< 'unset))
+ (not (eq? created-at-> 'unset))
+ (not (eq? created-at-< 'unset))
(not (eq? processed 'unset))
(not (eq? canceled 'unset))
(not (eq? relationship 'unset))
@@ -2579,6 +2583,14 @@ INNER JOIN derivations
(list
(simple-format #f "priority < ~A" priority-<))
'())
+ (if (string? created-at->)
+ (list
+ (simple-format #f "created_at > '~A'" created-at->))
+ '())
+ (if (string? created-at-<)
+ (list
+ (simple-format #f "created_at < '~A'" created-at-<))
+ '())
(cond
((eq? processed #t) '("processed = 1"))
((eq? processed #f) '("processed = 0"))
diff --git a/scripts/guix-build-coordinator.in b/scripts/guix-build-coordinator.in
index a35074f..0c06579 100644
--- a/scripts/guix-build-coordinator.in
+++ b/scripts/guix-build-coordinator.in
@@ -293,6 +293,16 @@
(or (assq-ref result 'not-systems)
'()))
(alist-delete 'not-systems result))))
+ (option '("created-at-gt") #t #f
+ (lambda (opt name arg result)
+ (alist-cons 'created-at->
+ (datastore-validate-datetime-string arg)
+ result)))
+ (option '("created-at-lt") #t #f
+ (lambda (opt name arg result)
+ (alist-cons 'created-at-<
+ (datastore-validate-datetime-string arg)
+ result)))
(option '("skip-updating-derived-priorities") #f #f
(lambda (opt name _ result)
(alist-cons 'skip-updating-derived-priorities
@@ -663,6 +673,8 @@ tags:
#:not-tags (assq-ref opts 'not-tags)
#:systems (assq-ref opts 'systems)
#:not-systems (assq-ref opts 'not-systems)
+ #:created-at-< (assq-ref opts 'created-at-<)
+ #:created-at-> (assq-ref opts 'created-at->)
#:processed #f
#:canceled #f
#:relationship (assq-ref opts 'relationship)))