aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/utils.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator/utils.scm')
-rw-r--r--guix-build-coordinator/utils.scm31
1 files changed, 30 insertions, 1 deletions
diff --git a/guix-build-coordinator/utils.scm b/guix-build-coordinator/utils.scm
index fea9c1c..ee1fea3 100644
--- a/guix-build-coordinator/utils.scm
+++ b/guix-build-coordinator/utils.scm
@@ -23,6 +23,7 @@
#:use-module (gcrypt hash)
#:use-module (gcrypt random)
#:use-module (json)
+ #:use-module (prometheus)
#:use-module (guix pki)
#:use-module (guix utils)
#:use-module (guix config)
@@ -59,7 +60,9 @@
get-load-average
- running-on-the-hurd?))
+ running-on-the-hurd?
+
+ get-gc-metrics-updater))
(eval-when (eval load compile)
(begin
@@ -838,3 +841,29 @@ again."
(unless cached-system
(set! cached-system (utsname:sysname (uname))))
(string=? cached-system "GNU")))
+
+(define (get-gc-metrics-updater registry)
+ (define metrics
+ `((gc-time-taken
+ . ,(make-gauge-metric registry "guile_gc_time_taken"))
+ (heap-size
+ . ,(make-gauge-metric registry "guile_heap_size"))
+ (heap-free-size
+ . ,(make-gauge-metric registry "guile_heap_free_size"))
+ (heap-total-allocated
+ . ,(make-gauge-metric registry "guile_heap_total_allocated"))
+ (heap-allocated-since-gc
+ . ,(make-gauge-metric registry "guile_allocated_since_gc"))
+ (protected-objects
+ . ,(make-gauge-metric registry "guile_gc_protected_objects"))
+ (gc-times
+ . ,(make-gauge-metric registry "guile_gc_times"))))
+
+ (lambda ()
+ (let ((stats (gc-stats)))
+ (for-each
+ (match-lambda
+ ((name . metric)
+ (let ((value (assq-ref stats name)))
+ (metric-set metric value))))
+ metrics))))