Skip to content

Commit 5886421

Browse files
committed
delayed_jobs_ready metric added to DelayedJob plugin
delayed_jobs_ready instance variable added to metrics
1 parent 8e3c307 commit 5886421

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,7 @@ end
540540
| Counter | `delayed_jobs_total` | Total number of delayed jobs executed | `job_name` |
541541
| Gauge | `delayed_jobs_enqueued` | Number of enqueued delayed jobs | - |
542542
| Gauge | `delayed_jobs_pending` | Number of pending delayed jobs | - |
543+
| Gauge | `delayed_jobs_ready` | Number of ready delayed jobs      | - |
543544
| Counter | `delayed_failed_jobs_total` | Total number failed delayed jobs executed | `job_name` |
544545
| Counter | `delayed_jobs_max_attempts_reached_total` | Total number of delayed jobs that reached max attempts | - |
545546
| Summary | `delayed_job_duration_seconds_summary` | Summary of the time it takes jobs to execute | `status` |

lib/prometheus_exporter/instrumentation/delayed_job.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ module PrometheusExporter::Instrumentation
44
class DelayedJob
55
JOB_CLASS_REGEXP = /job_class: ((\w+:{0,2})+)/.freeze
66

7+
RuntimeMetric = Struct.new(:max_attempts, :enqueued_count, :pending_count, :ready_count)
8+
79
class << self
810
def register_plugin(client: nil, include_module_name: false)
911
instrumenter = self.new(client: client)
@@ -15,13 +17,15 @@ def register_plugin(client: nil, include_module_name: false)
1517
lifecycle.around(:invoke_job) do |job, *args, &block|
1618
max_attempts = Delayed::Worker.max_attempts
1719
enqueued_count = Delayed::Job.where(queue: job.queue).count
18-
pending_count =
19-
Delayed::Job.where(attempts: 0, locked_at: nil, queue: job.queue).count
20+
pending_count = Delayed::Job.where(attempts: 0, locked_at: nil, queue: job.queue).count
21+
ready_count = Delayed::Job.where(queue: job.queue, run_at: ..Time.current, locked_at: nil, failed_at: nil).count
22+
2023
instrumenter.call(
2124
job,
2225
max_attempts,
2326
enqueued_count,
2427
pending_count,
28+
ready_count,
2529
include_module_name,
2630
*args,
2731
&block
@@ -38,7 +42,7 @@ def initialize(client: nil)
3842
@client = client || PrometheusExporter::Client.default
3943
end
4044

41-
def call(job, max_attempts, enqueued_count, pending_count, include_module_name, *args, &block)
45+
def call(job, max_attempts, enqueued_count, pending_count, ready_count, include_module_name, *args, &block)
4246
success = false
4347
start = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
4448
latency = Time.current - job.run_at
@@ -60,6 +64,7 @@ def call(job, max_attempts, enqueued_count, pending_count, include_module_name,
6064
max_attempts: max_attempts,
6165
enqueued: enqueued_count,
6266
pending: pending_count,
67+
ready: ready_count
6368
)
6469
end
6570
end

lib/prometheus_exporter/server/delayed_job_collector.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ def initialize
1313
@delayed_job_attempts_summary = nil
1414
@delayed_jobs_enqueued = nil
1515
@delayed_jobs_pending = nil
16+
@delayed_jobs_ready = nil
1617
end
1718

1819
def type
@@ -48,6 +49,7 @@ def collect(obj)
4849
@delayed_job_attempts_summary.observe(obj["attempts"], counter_labels) if obj["success"]
4950
@delayed_jobs_enqueued.observe(obj["enqueued"], gauge_labels)
5051
@delayed_jobs_pending.observe(obj["pending"], gauge_labels)
52+
@delayed_jobs_ready.observe(obj["ready"], gauge_labels)
5153
end
5254

5355
def metrics
@@ -62,6 +64,7 @@ def metrics
6264
@delayed_job_attempts_summary,
6365
@delayed_jobs_enqueued,
6466
@delayed_jobs_pending,
67+
@delayed_jobs_ready,
6568
]
6669
else
6770
[]
@@ -102,6 +105,11 @@ def ensure_delayed_job_metrics
102105
"Number of pending delayed jobs.",
103106
)
104107

108+
@delayed_jobs_ready =
109+
PrometheusExporter::Metric::Gauge.new(
110+
"delayed_jobs_ready", "Number of ready delayed jobs."
111+
)
112+
105113
@delayed_failed_jobs_total =
106114
PrometheusExporter::Metric::Counter.new(
107115
"delayed_failed_jobs_total",

0 commit comments

Comments
 (0)