aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/web
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2022-11-29 11:09:55 +0000
committerChristopher Baines <mail@cbaines.net>2022-11-29 11:09:55 +0000
commit7b69611755ac3b9132710d83a1139b4c5606578d (patch)
tree24170ea31d6efa4e5022597f5b9d6b7bd6f60500 /guix-data-service/web
parent9f05f5f4f944c75caf017f3464cef454539ab6b9 (diff)
downloaddata-service-7b69611755ac3b9132710d83a1139b4c5606578d.tar
data-service-7b69611755ac3b9132710d83a1139b4c5606578d.tar.gz
Expose metrics from pg_stats
Diffstat (limited to 'guix-data-service/web')
-rw-r--r--guix-data-service/web/controller.scm37
1 files changed, 37 insertions, 0 deletions
diff --git a/guix-data-service/web/controller.scm b/guix-data-service/web/controller.scm
index 7aac071..988145e 100644
--- a/guix-data-service/web/controller.scm
+++ b/guix-data-service/web/controller.scm
@@ -151,6 +151,22 @@
#:labels '(name))))
pg-stat-indexes-fields))
+ (pg-stats-fields '(null-frac n-distinct correlation))
+
+ (pg-stats-metrics (map (lambda (field)
+ (cons
+ field
+ (make-gauge-metric
+ registry
+ (string-append
+ "pg_stats_"
+ (string-replace-substring
+ (symbol->string field)
+ "-"
+ "_"))
+ #:labels '(table column))))
+ pg-stats-fields))
+
(gc-metrics-updater
(get-gc-metrics-updater registry)))
@@ -167,6 +183,9 @@
(pg-stat-user-indexes-metrics
(with-thread-postgresql-connection
fetch-pg-stat-user-indexes-metrics))
+ (pg-stats-metric-values
+ (with-thread-postgresql-connection
+ fetch-pg-stats-metrics))
(load-new-guix-revision-job-metrics
(with-thread-postgresql-connection
select-load-new-guix-revision-job-metrics)))
@@ -228,6 +247,24 @@
field-values)))
pg-stat-user-indexes-metrics)
+ (map (lambda (field-values)
+ (let ((table (assq-ref field-values 'table-name))
+ (column (assq-ref field-values 'column-name)))
+ (for-each
+ (match-lambda
+ (('table-name . _) #f)
+ (('column-name . _) #f)
+ ((_ . #f) #f)
+ ((field . value)
+ (let ((metric (or (assq-ref pg-stats-metrics field)
+ (error field))))
+ (metric-set metric
+ value
+ #:label-values `((table . ,table)
+ (column . ,column))))))
+ field-values)))
+ pg-stats-metric-values)
+
(for-each (match-lambda
((repository-label state count)
(metric-set