diff options
author | Christopher Baines <mail@cbaines.net> | 2020-04-28 20:38:57 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2020-04-28 20:38:57 +0100 |
commit | 898b6230c696895d27a3c26cfe20bdb00793b8ff (patch) | |
tree | 423e2afbe76647e4e844af9946cda4509517425d | |
parent | d35fdd30110597225cb3dcb559378d8c77ea796b (diff) | |
download | build-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.scm | 119 |
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) |