From afb6b8185d4142eaaa1fc46e0971155d71b324f9 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Thu, 7 Sep 2023 15:13:56 +0100 Subject: Include metrics for ports and file descriptors --- nar-herder/server.scm | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) 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") -- cgit v1.2.3