aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator')
-rw-r--r--guix-build-coordinator/agent.scm19
-rw-r--r--guix-build-coordinator/coordinator.scm5
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm27
3 files changed, 35 insertions, 16 deletions
diff --git a/guix-build-coordinator/agent.scm b/guix-build-coordinator/agent.scm
index 0f9eaff..bbca1e3 100644
--- a/guix-build-coordinator/agent.scm
+++ b/guix-build-coordinator/agent.scm
@@ -64,7 +64,9 @@
build-id derivation-name)
(report-build-start coordinator-uri uuid password
build-id)
- (let ((result (perform-build derivation-name)))
+ (let* ((result (perform-build derivation-name))
+ ;; TODO Check this handles timezones right
+ (end-time (localtime (current-time) "UTC")))
(retry-on-error
(lambda ()
(let ((log-file (derivation-log-file derivation-name)))
@@ -87,7 +89,8 @@
post-build-failure)
uuid coordinator-uri password
build-id
- derivation-name)))
+ derivation-name
+ end-time)))
(begin
(simple-format #t "~A: failure: ~A\n" build-id pre-build-status)
(report-setup-failure coordinator-uri uuid password
@@ -246,15 +249,16 @@
#f)))))
(define (post-build-failure uuid coordinator-uri password
- build-id derivation)
+ build-id derivation end-time)
(simple-format #t "build ~A failed, reporting to coordinator\n"
build-id)
(submit-build-result coordinator-uri uuid password
build-id
- '((result . failure))))
+ `((result . failure)
+ (end_time . ,(strftime "%F %T" end-time)))))
(define (post-build-success uuid coordinator-uri password
- build-id derivation)
+ build-id derivation end-time)
(simple-format #t "build ~A successful, reporting to coordinator\n"
build-id)
(let ((output-details
@@ -284,5 +288,6 @@
(simple-format #t "finished submitting outputs, reporting result\n")
(submit-build-result
coordinator-uri uuid password build-id
- `((result . success)
- (outputs . ,(list->vector output-details))))))
+ `((result . success)
+ (end_time . ,(strftime "%F %T" end-time))
+ (outputs . ,(list->vector output-details))))))
diff --git a/guix-build-coordinator/coordinator.scm b/guix-build-coordinator/coordinator.scm
index f5be80d..2ceac56 100644
--- a/guix-build-coordinator/coordinator.scm
+++ b/guix-build-coordinator/coordinator.scm
@@ -420,7 +420,10 @@
(if success?
(vector->list
(assoc-ref result-json "outputs"))
- #f))
+ #f)
+ ;; TODO Check what the value of this is
+ (assoc-ref result-json "end_time"))
+
#t))))
(define (handle-build-start-report datastore
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index db9f807..a5c50e4 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -490,7 +490,8 @@ SELECT agent_id, result, COUNT(*) FROM build_results GROUP BY agent_id, result")
agent-id
result
failure-reason
- output-metadata)
+ output-metadata
+ end-time)
(define (insert-build-result db build-id agent-id result failure-reason)
(sqlite-exec
db
@@ -518,12 +519,17 @@ DELETE FROM allocated_builds WHERE build_id = '"
agent-id
"'")))
- (define (mark-build-as-processed db build-id)
+ (define (mark-build-as-processed db build-id end-time)
(sqlite-exec
db
(string-append
"
-UPDATE builds SET processed = 1 WHERE uuid = '" build-id "'")))
+UPDATE builds
+SET processed = 1 "
+ (if end-time
+ (string-append ", end_time = '" end-time "'")
+ "") "
+WHERE uuid = '" build-id "'")))
(define (store-output-metadata
db
@@ -586,7 +592,7 @@ VALUES "
(lambda (db)
(insert-build-result db build-id agent-id result failure-reason)
(remove-build-allocation db build-id agent-id)
- (mark-build-as-processed db build-id)
+ (mark-build-as-processed db build-id end-time)
;; This logic should be part of the coordinator, but it's here to be
;; inside the transaction
(handle-inserting-unprocessed-hook-event db build-id result)
@@ -789,7 +795,7 @@ GROUP BY derivations.system")))
(sqlite-prepare
db
"
-SELECT uuid, derivation_name, priority, processed, created_at
+SELECT uuid, derivation_name, priority, processed, created_at, end_time
FROM builds
WHERE uuid = :uuid")))
@@ -799,7 +805,7 @@ WHERE uuid = :uuid")))
(let ((result
(match (sqlite-step statement)
- (#(uuid derivation_name priority processed created_at)
+ (#(uuid derivation_name priority processed created_at end_time)
`((uuid . ,uuid)
(derivation-name . ,derivation_name)
(priority . ,priority)
@@ -810,7 +816,11 @@ WHERE uuid = :uuid")))
(error "unknown processed value"))))
(created-at . ,(if (string? created_at)
(match (strptime "%F %T" created_at)
- ((parts _) parts))
+ ((parts . _) parts))
+ #f))
+ (end-time . ,(if (string? end_time)
+ (match (strptime "%F %T" end_time)
+ ((parts . _) parts))
#f)))))))
(sqlite-reset statement)
@@ -839,7 +849,8 @@ WHERE build_id = :build_id")))
(#(agent_id result failure_reason)
`((agent_id . ,agent_id)
(result . ,result)
- (failure_reason . ,failure_reason))))))
+ (failure_reason . ,failure_reason)))
+ (#f #f))))
(sqlite-reset statement)
result)))))