Add get-gc-metrics-updater

This commit is contained in:
Christopher Baines 2023-11-12 13:39:14 +00:00
parent c1b8fe176e
commit 4aaf902eb4

View file

@ -44,7 +44,9 @@
metric-set metric-set
metric-observe metric-observe
call-with-duration-metric)) call-with-duration-metric
get-gc-metrics-updater))
(define-record-type <metrics-registry> (define-record-type <metrics-registry>
(make-metrics-registry-record metrics-hash namespace) (make-metrics-registry-record metrics-hash namespace)
@ -558,3 +560,28 @@ This procedure takes care of atomically replacing the file."
(lambda (key . args) (lambda (key . args)
(false-if-exception (delete-file template)))))) (false-if-exception (delete-file template))))))
(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))))