From f7cd69d7d0d6fde7e18fbb4d64bb22a4e8e4166d Mon Sep 17 00:00:00 2001 From: Sven Slootweg Date: Thu, 24 Nov 2022 17:18:12 +0100 Subject: [PATCH] Track locking metrics --- src/database-backends/index.js | 12 ++++++++++-- src/prometheus/index.js | 12 ++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/database-backends/index.js b/src/database-backends/index.js index d6bde6a..ebaaecd 100644 --- a/src/database-backends/index.js +++ b/src/database-backends/index.js @@ -33,7 +33,7 @@ const isTaskObject = require("../validators/is-task-object"); // FIXME: Verify that all internal method calls in the PostgreSQL backend are still valid after moving argument validation/normalization into this module module.exports = function (state) { - let { tasks } = state; + let { tasks, metrics } = state; const backendModules = { "postgresql": require("./postgresql")(state), @@ -370,7 +370,15 @@ module.exports = function (state) { }] }); - return backend.lock(tx, options); + return Promise.try(() => { + return backend.lock(tx, options); + }).tap((succeeded) => { + if (succeeded) { + metrics.successfulLocks.labels({ task: task.name }).inc(1); + } else { + metrics.failedLocks.labels({ task: task.name }).inc(1); + } + }); }, unlock: function (_tx, _options) { diff --git a/src/prometheus/index.js b/src/prometheus/index.js index b696835..43f80b7 100644 --- a/src/prometheus/index.js +++ b/src/prometheus/index.js @@ -27,6 +27,18 @@ module.exports = function createPrometheus() { help: "Amount of items that have failed during processing", labelNames: [ "task" ] }), + successfulLocks: new prometheusClient.Counter({ + registers: [ prometheusRegistry ], + name: "srap_successful_locks_total", + help: "Amount of queue item lock attempts that were successful", + labelNames: [ "task" ] + }), + failedLocks: new prometheusClient.Counter({ + registers: [ prometheusRegistry ], + name: "srap_failed_locks_total", + help: "Amount of queue item lock attempts that failed", + labelNames: [ "task" ] + }), taskFetchTime: new prometheusClient.Gauge({ registers: [ prometheusRegistry ], name: "srap_task_fetch_seconds",