diff options
Diffstat (limited to 'guix-build-coordinator/datastore/sqlite.scm')
-rw-r--r-- | guix-build-coordinator/datastore/sqlite.scm | 53 |
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 |