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