aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2023-09-07 15:13:56 +0100
committerChristopher Baines <mail@cbaines.net>2023-09-07 15:13:56 +0100
commitafb6b8185d4142eaaa1fc46e0971155d71b324f9 (patch)
treedfa0bdc92ccc88082b4e92ade896742480eb987f
parent1a91218299e948e130bcda577f19aabccd93744e (diff)
downloadnar-herder-afb6b8185d4142eaaa1fc46e0971155d71b324f9.tar
nar-herder-afb6b8185d4142eaaa1fc46e0971155d71b324f9.tar.gz
Include metrics for ports and file descriptors
-rw-r--r--nar-herder/server.scm28
1 files changed, 28 insertions, 0 deletions
diff --git a/nar-herder/server.scm b/nar-herder/server.scm
index 01de6d8..525d70b 100644
--- a/nar-herder/server.scm
+++ b/nar-herder/server.scm
@@ -21,6 +21,7 @@
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-71)
+ #:use-module (ice-9 ftw)
#:use-module (ice-9 iconv)
#:use-module (ice-9 match)
#:use-module (ice-9 threads)
@@ -99,6 +100,29 @@
(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 '("." "..")))))
+ '()))))))
+
(define (serve-fixed-output-file input compression proc)
;; TODO It's hard with fold-archive from (guix serialization) to
;; read just the singular file from the archive, so the following
@@ -200,6 +224,9 @@
(define gc-metrics-updater
(get-gc-metrics-updater metrics-registry))
+ (define port-metrics-updater
+ (get-port-metrics-updater metrics-registry))
+
(define guile-time-metrics-updater
(let ((internal-real-time
(make-gauge-metric metrics-registry "guile_internal_real_time"))
@@ -493,6 +520,7 @@
#f))
(((or 'HEAD 'GET) "metrics")
(gc-metrics-updater)
+ (port-metrics-updater)
(guile-time-metrics-updater)
(increment-request-metric "metrics" "200")