diff options
author | Christopher Baines <mail@cbaines.net> | 2025-02-09 10:07:40 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2025-02-09 10:07:40 +0000 |
commit | 72d027bb4f06f015bf9fb00fa34f7423f986287f (patch) | |
tree | af2a3071fcf5de5d13bcbe9ba7a43a8520e97aa3 /guix-build-coordinator | |
parent | 40140d2e9051734ea773b9787f77d0bf2bf69e18 (diff) | |
download | build-coordinator-72d027bb4f06f015bf9fb00fa34f7423f986287f.tar build-coordinator-72d027bb4f06f015bf9fb00fa34f7423f986287f.tar.gz |
Better instrument the background jobs queue
Diffstat (limited to 'guix-build-coordinator')
-rw-r--r-- | guix-build-coordinator/coordinator.scm | 2 | ||||
-rw-r--r-- | guix-build-coordinator/datastore/sqlite.scm | 56 |
2 files changed, 52 insertions, 6 deletions
diff --git a/guix-build-coordinator/coordinator.scm b/guix-build-coordinator/coordinator.scm index 8a20b97..ab20e2e 100644 --- a/guix-build-coordinator/coordinator.scm +++ b/guix-build-coordinator/coordinator.scm @@ -2008,7 +2008,7 @@ (build-coordinator-metrics-registry build-coordinator) "coordinator_background_job_duration_seconds" (lambda () - (apply proc args)) + (call-with-delay-logging proc #:args args)) #:labels '(job) #:label-values `((job . ,type)) #:buckets %background-job-duration-histogram-buckets)) diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm index e5367c6..1dddc72 100644 --- a/guix-build-coordinator/datastore/sqlite.scm +++ b/guix-build-coordinator/datastore/sqlite.scm @@ -414,11 +414,18 @@ PRAGMA optimize;") (let ((setup-failures-total (make-gauge-metric registry "setup_failures_total" - #:labels '(agent_id reason)))) + #:labels '(agent_id reason))) + (background-jobs-inserted-total + (make-counter-metric registry + "coordinator_background_job_inserted_total" + #:labels '(job)))) (fibers-let ((setup-failure-counts (with-time-logging "counting setup failures" - (datastore-count-setup-failures datastore)))) + (datastore-count-setup-failures datastore))) + (background-job-counts + (with-time-logging "counting background jobs" + (datastore-count-background-jobs datastore)))) (for-each (match-lambda (((agent-id reason) . count) @@ -427,7 +434,14 @@ PRAGMA optimize;") #:label-values `((agent_id . ,agent-id) (reason . ,reason))))) - setup-failure-counts))) + setup-failure-counts) + + (for-each (match-lambda + ((type . count) + (metric-increment background-jobs-inserted-total + #:by count + #:label-values `((job . ,type))))) + background-job-counts))) #t) (define-method (datastore-update-metrics! @@ -1937,7 +1951,7 @@ WHERE builds.id = :build_id" result))) (let ((build-ids - (call-with-thread + (call-with-thread/delay-logging (slot-ref datastore 'reader-thread-pool) (lambda (db) (all-build-ids db))))) @@ -4506,7 +4520,14 @@ RETURNING id" (write args port)))) (match (sqlite-step-and-reset statement) - (#(id) id)))))) + (#(id) + + (metric-increment + (metrics-registry-fetch-metric + (slot-ref datastore 'metrics-registry) + "coordinator_background_job_inserted_total")) + + id)))))) (define-method (datastore-delete-background-job (datastore <sqlite-datastore>) @@ -4564,3 +4585,28 @@ LIMIT :limit" (sqlite-reset statement) result))))) args)) + +(define-method (datastore-count-background-jobs + (datastore <sqlite-datastore>)) + (call-with-thread + (slot-ref datastore 'reader-thread-pool) + (lambda (db) + (let ((statement + (sqlite-prepare + db + " +SELECT type, COUNT(*) +FROM background_jobs_queue +GROUP BY type" + #:cache? #t))) + + (let ((result + (sqlite-map + (match-lambda + (#(type count) + (cons type count))) + statement))) + (sqlite-reset statement) + + result))))) + |