Add metrics for ports and file descriptors

This commit is contained in:
Christopher Baines 2023-09-07 11:16:45 +01:00
parent e8e1459769
commit 893cccf8e5
2 changed files with 30 additions and 1 deletions

View File

@ -18,6 +18,7 @@
(define-module (guix-data-service utils)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
#:use-module (ice-9 ftw)
#:use-module (ice-9 match)
#:use-module (ice-9 format)
#:use-module (ice-9 threads)
@ -48,6 +49,7 @@
delete-duplicates/sort!
get-gc-metrics-updater
get-port-metrics-updater
call-with-sigint
run-server/patched))
@ -451,6 +453,29 @@ available. Return the resource once PROC has returned."
(metric-set metric value))))
metrics))))
(define (get-port-metrics-updater registry)
(let ((ports-metric
(make-gauge-metric registry "guile_ports_total"))
(fds-metric
(make-gauge-metric registry "file_descriptors_total")))
(lambda ()
(let ((count 0))
(port-for-each
(lambda _
(set! count (+ 1 count))))
(metric-set ports-metric count))
(metric-set
fds-metric
(length
;; In theory 'scandir' cannot return #f, but in practice,
;; we've seen it before.
(or (scandir "/proc/self/fd"
(lambda (file)
(not (member file '("." "..")))))
'()))))))
;; This variant of run-server from the fibers library supports running
;; multiple servers within one process.
(define run-server/patched

View File

@ -193,7 +193,10 @@
#:labels '(pool_name)))))
(gc-metrics-updater
(get-gc-metrics-updater registry)))
(get-gc-metrics-updater registry))
(port-metrics-updater
(get-port-metrics-updater registry)))
(define guile-time-metrics-updater
(let ((internal-real-time
@ -399,6 +402,7 @@
(or load-new-guix-revision-job-metrics '()))
(gc-metrics-updater)
(port-metrics-updater)
(guile-time-metrics-updater)
(list (build-response