aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/datastore/sqlite.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator/datastore/sqlite.scm')
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm53
1 files changed, 53 insertions, 0 deletions
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index 88db088..db9f807 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -27,6 +27,8 @@
datastore-new-agent
datastore-list-agents
datastore-find-agent
+ datastore-store-build-start
+ datastore-find-build-starts
datastore-count-setup-failures
datastore-list-setup-failures-for-build
datastore-fetch-setup-failures
@@ -592,6 +594,57 @@ VALUES "
(store-output-metadata db build-id output-metadata))))
#t)
+(define-method (datastore-store-build-start
+ (datastore <sqlite-datastore>)
+ build-id
+ agent-id)
+
+ (call-with-worker-thread
+ (slot-ref datastore 'worker-writer-thread-channel)
+ (lambda (db)
+ (sqlite-exec
+ db
+ (string-append
+ "
+INSERT INTO build_starts (
+ build_id, agent_id, start_time
+) VALUES ('"
+ build-id "', '"
+ agent-id "', "
+ "datetime('now')"
+ ")")))))
+
+(define-method (datastore-find-build-starts
+ (datastore <sqlite-datastore>)
+ build-id)
+ (call-with-worker-thread
+ (slot-ref datastore 'worker-reader-thread-channel)
+ (lambda (db)
+ (let ((statement
+ (sqlite-prepare
+ db
+ "
+SELECT start_time, agent_id
+FROM build_starts
+WHERE build_id = :build_id
+ORDER BY start_time DESC")))
+
+ (sqlite-bind-arguments
+ statement
+ #:build_id build-id)
+
+ (let ((result
+ (sqlite-map
+ (match-lambda
+ (#(start_time agent_id)
+ `((start-time . ,(match (strptime "%F %T" start_time)
+ ((parts . _) parts)))
+ (agent-id . ,agent_id))))
+ statement)))
+ (sqlite-reset statement)
+
+ result)))))
+
(define (insert-setup-failure-and-remove-allocation
db
build-id