diff options
author | Ludovic Courtès <ludo@gnu.org> | 2018-01-23 18:15:42 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2018-01-23 18:17:31 +0100 |
commit | fe0a98315d76dee63a0c0990c8b99ec0154d8a50 (patch) | |
tree | 241869ab1bf6c9bf09635e7cfdd3859329b2457d /src | |
parent | dbc6625ac246a53a7938db803e1367636f8f49ee (diff) | |
download | cuirass-fe0a98315d76dee63a0c0990c8b99ec0154d8a50.tar cuirass-fe0a98315d76dee63a0c0990c8b99ec0154d8a50.tar.gz |
database: Add 'db-update-build-status!'.
* src/cuirass/database.scm (build-status): Add 'scheduled' and
'started'.
(db-add-build): Make sure #:timestamp, #:starttime, #:stoptime, and
#:status are integers.
(db-update-build-status!): New procedure.
* tests/database.scm ("database")["db-update-build-status!"]: New test.
Diffstat (limited to 'src')
-rw-r--r-- | src/cuirass/database.scm | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm index f50d746..c5d3f22 100644 --- a/src/cuirass/database.scm +++ b/src/cuirass/database.scm @@ -24,6 +24,7 @@ #:use-module (ice-9 match) #:use-module (ice-9 rdelim) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-19) #:use-module (sqlite3) #:export (;; Procedures. assq-refs @@ -39,6 +40,7 @@ db-get-derivation build-status db-add-build + db-update-build-status! db-get-build db-get-builds read-sql-file @@ -199,7 +201,10 @@ string." (logior SQLITE_CONSTRAINT (ash 6 8))) (define-enumeration build-status - ;; Build status as expected by Hydra's API. + ;; Build status as expected by Hydra's API. Note: the negative values are + ;; Cuirass' own extensions. + (scheduled -2) + (started -1) (succeeded 0) (failed 1) (failed-dependency 2) @@ -216,10 +221,11 @@ INSERT INTO Builds (derivation, evaluation, log, status, timestamp, starttime, s (assq-ref build #:derivation) (assq-ref build #:eval-id) (assq-ref build #:log) - (assq-ref build #:status) - (assq-ref build #:timestamp) - (assq-ref build #:starttime) - (assq-ref build #:stoptime))) + (or (assq-ref build #:status) + (build-status scheduled)) + (or (assq-ref build #:timestamp) 0) + (or (assq-ref build #:starttime) 0) + (or (assq-ref build #:stoptime) 0))) (build-id (last-insert-rowid db))) (for-each (lambda (output) (match output @@ -230,6 +236,20 @@ INSERT INTO Outputs (build, name, path) VALUES ('~A', '~A', '~A');" (assq-ref build #:outputs)) build-id)) +(define (db-update-build-status! db drv status) + "Update DB so that DRV's status is STATUS. This also updates the +'starttime' or 'stoptime' fields." + (define now + (time-second (current-time time-utc))) + + (if (= status (build-status started)) + (sqlite-exec db "UPDATE Builds SET starttime='~A', status='~A' \ +WHERE derivation='~A';" + now status drv) + (sqlite-exec db "UPDATE Builds SET stoptime='~A', status='~A' \ +WHERE derivation='~A';" + now status drv))) + (define (db-get-outputs db build-id) "Retrieve the OUTPUTS of the build identified by BUILD-ID in DB database." (let loop ((rows |