delayed 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 16d1a1a8e3f41bee282a4d725afdf3be6419fceba8c5cef58a3eb35a7a406823
4
- data.tar.gz: 9ad241b6880c13997ea7b58ba2bcfba02a1beb6692b050698fac30301cc9c90c
3
+ metadata.gz: 4227961278ab7f1ed435e8357cbf83998ee6d1d597f981fc4d1ab92a0d1069fa
4
+ data.tar.gz: fd108cb072de3ec495d2713326821b231cfe8ffa153782a80f84da06d272ecfa
5
5
  SHA512:
6
- metadata.gz: a63a4f0a56f26c9b5bb3a987b6c2877068016823b21efb059744effc0eeb68255b4b193e7f0e0292f6d790e12138ad8c57bab032a7f1f3c1a89e2c533db45df6
7
- data.tar.gz: 7912ee6d5d633293a2f1707d890c2fd5a60cbdb1c44ec215a8d2414db35902a272e4caad4ece1947c6475f4e90a7b5c1fe54ef320549681c04c948d7786cd4a8
6
+ metadata.gz: 36fd83967d57e3ae7d58a2edfceb790d35bcf3f9a49a9bf3de9e34c15528ba2c3ae36468c7847e8e49d7d90ca8b03ef1e39a62620257fb06cb8f321a5af0909e
7
+ data.tar.gz: df0443f6ca1f859e5b4155a0b38aa72310e0607f57c30ba31dcd0fda39825e0ae81903d0b019886c7405e607d1817f3733c47fbfed81b25cb897440cb2be8da8
@@ -18,7 +18,7 @@ module Delayed
18
18
  cattr_accessor :sleep_delay, instance_writer: false, default: 60
19
19
 
20
20
  def initialize
21
- @jobs = Job.group(priority_case_statement).group(:queue)
21
+ @jobs = Job.group(:priority, :queue)
22
22
  @jobs = @jobs.where(queue: Worker.queues) if Worker.queues.any?
23
23
  @memo = {}
24
24
  end
@@ -68,63 +68,72 @@ module Delayed
68
68
  }
69
69
  end
70
70
 
71
+ def grouped_count(scope)
72
+ Delayed::Job.from(scope.select('priority, queue, COUNT(*) AS count'))
73
+ .group(priority_case_statement, :queue).sum(:count)
74
+ end
75
+
76
+ def grouped_min(scope, column)
77
+ Delayed::Job.from(scope.select("priority, queue, MIN(#{column}) AS #{column}"))
78
+ .group(priority_case_statement, :queue).minimum(column)
79
+ end
80
+
71
81
  def count_grouped
72
82
  if Job.connection.supports_partial_index?
73
- failed_count_grouped.merge(jobs.live.count) { |_, l, f| l + f }
83
+ failed_count_grouped.merge(live_count_grouped) { |_, l, f| l + f }
74
84
  else
75
- jobs.count
85
+ grouped_count(jobs)
76
86
  end
77
87
  end
78
88
 
89
+ def live_count_grouped
90
+ grouped_count(jobs.live)
91
+ end
92
+
79
93
  def future_count_grouped
80
- jobs.future.count
94
+ grouped_count(jobs.future)
81
95
  end
82
96
 
83
97
  def locked_count_grouped
84
- @memo[:locked_count_grouped] ||= jobs.claimed.count
98
+ @memo[:locked_count_grouped] ||= grouped_count(jobs.claimed)
85
99
  end
86
100
 
87
101
  def erroring_count_grouped
88
- jobs.erroring.count
102
+ grouped_count(jobs.erroring)
89
103
  end
90
104
 
91
105
  def failed_count_grouped
92
- @memo[:failed_count_grouped] ||= jobs.failed.count
106
+ @memo[:failed_count_grouped] ||= grouped_count(jobs.failed)
93
107
  end
94
108
 
95
109
  def max_lock_age_grouped
96
- oldest_locked_job_grouped.each_with_object({}) do |job, metrics|
97
- metrics[[job.priority.to_i, job.queue]] = Job.db_time_now - job.locked_at
98
- end
110
+ oldest_locked_job_grouped.transform_values { |locked_at| Job.db_time_now - locked_at }
99
111
  end
100
112
 
101
113
  def max_age_grouped
102
- oldest_workable_job_grouped.each_with_object({}) do |job, metrics|
103
- metrics[[job.priority.to_i, job.queue]] = Job.db_time_now - job.run_at
104
- end
114
+ oldest_workable_job_grouped.transform_values { |run_at| Job.db_time_now - run_at }
105
115
  end
106
116
 
107
117
  def alert_age_percent_grouped
108
- oldest_workable_job_grouped.each_with_object({}) do |job, metrics|
109
- max_age = Job.db_time_now - job.run_at
110
- metrics[[job.priority.to_i, job.queue]] = [max_age / job.priority.alert_age * 100, 100].min if job.priority.alert_age
118
+ oldest_workable_job_grouped.each_with_object({}) do |((priority, queue), run_at), metrics|
119
+ max_age = Job.db_time_now - run_at
120
+ alert_age = Priority.new(priority).alert_age
121
+ metrics[[priority, queue]] = [max_age / alert_age * 100, 100].min if alert_age
111
122
  end
112
123
  end
113
124
 
114
125
  def workable_count_grouped
115
- jobs.claimable.count
126
+ grouped_count(jobs.claimable)
116
127
  end
117
128
 
118
129
  alias working_count_grouped locked_count_grouped
119
130
 
120
131
  def oldest_locked_job_grouped
121
- jobs.claimed
122
- .select("#{priority_case_statement} AS priority, queue, MIN(locked_at) AS locked_at")
132
+ grouped_min(jobs.claimed, :locked_at)
123
133
  end
124
134
 
125
135
  def oldest_workable_job_grouped
126
- @memo[:oldest_workable_job_grouped] ||= jobs.claimable
127
- .select("(#{priority_case_statement}) AS priority, queue, MIN(run_at) AS run_at")
136
+ @memo[:oldest_workable_job_grouped] ||= grouped_min(jobs.claimable, :run_at)
128
137
  end
129
138
 
130
139
  def priority_case_statement
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Delayed
4
- VERSION = '2.0.2'
4
+ VERSION = '2.0.3'
5
5
  end