aboutsummaryrefslogtreecommitdiff
path: root/prometheus.scm
diff options
context:
space:
mode:
Diffstat (limited to 'prometheus.scm')
-rw-r--r--prometheus.scm22
1 files changed, 22 insertions, 0 deletions
diff --git a/prometheus.scm b/prometheus.scm
index 68336cf..0d44377 100644
--- a/prometheus.scm
+++ b/prometheus.scm
@@ -27,6 +27,7 @@
#:export (make-metrics-registry
metrics-registry-fetch-metric
write-metrics
+ write-textfile
make-counter-metric
make-gauge-metric
@@ -409,3 +410,24 @@ so that it can receive and store the metric values."
value))
(metric-values metric))))
(metrics-registry-metrics-hash registry)))
+
+(define (write-textfile registry filename)
+ "Write all metrics from the given @var{registry} to @var{filename}
+in the standard text based exposition format.
+
+For the node exporter to read the file, the @var{filename} must end
+with .prom.
+
+This procedure takes care of atomically replacing the file."
+ (let* ((template (string-append filename ".XXXXXX"))
+ (out (mkstemp! template)))
+ (with-throw-handler #t
+ (lambda ()
+ (chmod out(logand #o666 (lognot (umask))))
+ (write-metrics registry out)
+ (close out)
+ (rename-file template filename)
+ #t)
+ (lambda (key . args)
+ (false-if-exception (delete-file template))))))
+