aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/agent.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-12-07 20:52:45 +0000
committerChristopher Baines <mail@cbaines.net>2020-12-07 20:52:45 +0000
commitb8870e13f1672e3583347351cc442c03d98d8162 (patch)
tree382420865ccb5bafd99b13422aba31d278c60913 /guix-build-coordinator/agent.scm
parent2d424e7549e6154640e201bb3e45a4eaa644b47b (diff)
downloadbuild-coordinator-b8870e13f1672e3583347351cc442c03d98d8162.tar
build-coordinator-b8870e13f1672e3583347351cc442c03d98d8162.tar.gz
Start using Prometheus metrics with the agent
Rather than having the agent run a webserver, use the textfile collector from the node exporter.
Diffstat (limited to 'guix-build-coordinator/agent.scm')
-rw-r--r--guix-build-coordinator/agent.scm58
1 files changed, 50 insertions, 8 deletions
diff --git a/guix-build-coordinator/agent.scm b/guix-build-coordinator/agent.scm
index d3b5b4a..64d672a 100644
--- a/guix-build-coordinator/agent.scm
+++ b/guix-build-coordinator/agent.scm
@@ -32,6 +32,7 @@
#:use-module (oop goops)
#:use-module (logging logger)
#:use-module (logging port-log)
+ #:use-module (prometheus)
#:use-module (guix store)
#:use-module (guix derivations)
#:use-module (guix base32)
@@ -43,7 +44,8 @@
systems
max-parallel-builds
derivation-substitute-urls
- non-derivation-substitute-urls)
+ non-derivation-substitute-urls
+ metrics-file)
(define lgr (make <logger>))
(define port-log (make <port-log>
#:port (current-output-port)
@@ -54,6 +56,40 @@
lvl
str))))
+ (define metrics-enabled?
+ (and (not (string-null? metrics-file))
+ (let ((directory (dirname metrics-file)))
+ (or (file-exists? directory)
+ (begin
+ (simple-format (current-error-port)
+ "skipping writing metrics as ~A does not exist\n"
+ directory)
+ #f)))
+ (with-exception-handler
+ (lambda (exn)
+ (simple-format
+ (current-error-port)
+ "skipping writing metrics, encountered exception ~A\n"
+ exn)
+ #f)
+ (lambda ()
+ (let ((test-file (string-append metrics-file "-tmp")))
+ (call-with-output-file test-file
+ (lambda (port)
+ (display "test" port)))
+ (delete-file test-file)
+ #t))
+ #:unwind? #t)))
+
+ (define metrics-registry
+ (make-metrics-registry
+ #:namespace "guixbuildcoordinator_agent"))
+
+ (define (write-metrics)
+ (when metrics-enabled?
+ (write-textfile metrics-registry
+ metrics-file)))
+
(define (process-job build)
(let ((build-id (assoc-ref build "uuid"))
(derivation-name (assoc-ref build "derivation-name")))
@@ -62,13 +98,19 @@
": setting up to build: "
derivation-name)
(with-store store
- (let ((pre-build-status (pre-build-process
- lgr
- store
- build-id
- derivation-substitute-urls
- non-derivation-substitute-urls
- derivation-name)))
+ (let ((pre-build-status
+ (call-with-duration-metric
+ metrics-registry
+ "pre_build_duration_seconds"
+ (lambda ()
+ (pre-build-process lgr
+ store
+ build-id
+ derivation-substitute-urls
+ non-derivation-substitute-urls
+ derivation-name))
+ #:buckets (list 1 2.5 5 10 25 50 100 200 500 1000 (inf)))))
+ (write-metrics)
(if (eq? (assq-ref pre-build-status 'result) 'success)
(begin
(log-msg lgr 'INFO