aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-04-28 20:38:57 +0100
committerChristopher Baines <mail@cbaines.net>2020-04-28 20:38:57 +0100
commit898b6230c696895d27a3c26cfe20bdb00793b8ff (patch)
tree423e2afbe76647e4e844af9946cda4509517425d
parentd35fdd30110597225cb3dcb559378d8c77ea796b (diff)
downloadbuild-coordinator-898b6230c696895d27a3c26cfe20bdb00793b8ff.tar
build-coordinator-898b6230c696895d27a3c26cfe20bdb00793b8ff.tar.gz
Start timing the duration of a couple of coordinator actions
-rw-r--r--guix-build-coordinator/coordinator.scm119
1 files changed, 64 insertions, 55 deletions
diff --git a/guix-build-coordinator/coordinator.scm b/guix-build-coordinator/coordinator.scm
index 79013ea..285240c 100644
--- a/guix-build-coordinator/coordinator.scm
+++ b/guix-build-coordinator/coordinator.scm
@@ -188,19 +188,23 @@
channel))
(define (fetch-builds datastore agent)
- (let ((builds (datastore-list-allocation-plan-builds
- datastore
- agent
- 1)))
- (unless (null? builds)
- (datastore-allocate-builds-to-agent
- datastore
- agent
- (map (lambda (build)
- (assq-ref build 'uuid))
- builds)))
-
- builds))
+ (call-with-duration-metric
+ coordinator-metrics-registry
+ "guixbuildcoordinator_coordinator_fetch_builds_duration_seconds"
+ (lambda ()
+ (let ((builds (datastore-list-allocation-plan-builds
+ datastore
+ agent
+ 1)))
+ (unless (null? builds)
+ (datastore-allocate-builds-to-agent
+ datastore
+ agent
+ (map (lambda (build)
+ (assq-ref build 'uuid))
+ builds)))
+
+ builds))))
(define (agent-details datastore agent-id)
(let ((agent (datastore-find-agent datastore agent-id))
@@ -241,48 +245,53 @@
(define (handle-build-result datastore hook-channel
agent-id build-id result-json)
- (let* ((result (assoc-ref result-json "result"))
- (success? (string=? result "success")))
- (let ((build-details (datastore-find-build datastore build-id)))
- (when (assq-ref build-details 'processed?)
- (raise-exception
- (make-exception-with-message "build already processed"))))
-
- (when success?
- (unless (build-log-file-exists? build-id)
- (raise-exception
- (make-exception-with-message "missing build log file")))
-
- (for-each
- (lambda (output)
- (let ((output-location
- (build-output-file-location datastore build-id
- (assq-ref output 'name))))
- (unless (file-exists? output-location)
- (raise-exception
- (make-exception-with-message
- (simple-format #f "missing output ~A"
- (assq-ref output 'name)))))))
- (datastore-list-build-outputs datastore build-id)))
-
- (datastore-store-build-result datastore
- build-id
- agent-id
- (if success?
- "success"
- "failure")
- #f ; failure reason, TODO
- (if success?
- (vector->list
- (assoc-ref result-json "outputs"))
- #f))
-
- (put-message hook-channel
- (list (if (string=? result "success")
- 'build-success
- 'build-failure)
- build-id))))
-
+ (call-with-duration-metric
+ coordinator-metrics-registry
+ "guixbuildcoordinator_coordinator_handle_build_result_duration_seconds"
+ (lambda ()
+ (let* ((result (assoc-ref result-json "result"))
+ (success? (string=? result "success")))
+ (let ((build-details (datastore-find-build datastore build-id)))
+ (when (assq-ref build-details 'processed?)
+ (raise-exception
+ (make-exception-with-message "build already processed"))))
+
+ (when success?
+ (unless (build-log-file-exists? build-id)
+ (raise-exception
+ (make-exception-with-message "missing build log file")))
+
+ (for-each
+ (lambda (output)
+ (let ((output-location
+ (build-output-file-location datastore build-id
+ (assq-ref output 'name))))
+ (unless (file-exists? output-location)
+ (raise-exception
+ (make-exception-with-message
+ (simple-format #f "missing output ~A"
+ (assq-ref output 'name)))))))
+ (datastore-list-build-outputs datastore build-id)))
+
+ (datastore-store-build-result datastore
+ build-id
+ agent-id
+ (if success?
+ "success"
+ "failure")
+ #f ; failure reason, TODO
+ (if success?
+ (vector->list
+ (assoc-ref result-json "outputs"))
+ #f))
+
+ (put-message hook-channel
+ (list (if (string=? result "success")
+ 'build-success
+ 'build-failure)
+ build-id))
+
+ #t))))
(define (handle-setup-failure-report datastore hook-channel
agent-id build-id report-json)