Class: JobBoard::JobsQuery
- Inherits:
-
Object
- Object
- JobBoard::JobsQuery
- Defined in:
- app/models/job_board/jobs_query.rb
Overview
Status-scoped job finder. Each status is driven by its execution table so a row's status is known without calling Job#status (which needs 5 preloads).
Constant Summary collapse
- STATUSES =
%w[ready scheduled in_progress blocked failed finished].freeze
- ROW_STATUS =
{ "ready" => :ready, "scheduled" => :scheduled, "in_progress" => :claimed, "blocked" => :blocked, "failed" => :failed, "finished" => :finished }.freeze
Instance Attribute Summary collapse
-
#class_name ⇒ Object
readonly
Returns the value of attribute class_name.
-
#queue_name ⇒ Object
readonly
Returns the value of attribute queue_name.
-
#status ⇒ Object
readonly
Returns the value of attribute status.
Instance Method Summary collapse
- #count ⇒ Object
-
#counts ⇒ Object
One COUNT per status, with the current filters applied — for tab badges.
-
#failed_jobs_relation ⇒ Object
Job relation backing bulk retry/discard.
-
#initialize(status:, queue_name: nil, class_name: nil) ⇒ JobsQuery
constructor
A new instance of JobsQuery.
- #page(before: nil, limit: 25) ⇒ Object
Constructor Details
#initialize(status:, queue_name: nil, class_name: nil) ⇒ JobsQuery
Returns a new instance of JobsQuery.
14 15 16 17 18 |
# File 'app/models/job_board/jobs_query.rb', line 14 def initialize(status:, queue_name: nil, class_name: nil) @status = status.to_s @queue_name = queue_name @class_name = class_name end |
Instance Attribute Details
#class_name ⇒ Object (readonly)
Returns the value of attribute class_name.
12 13 14 |
# File 'app/models/job_board/jobs_query.rb', line 12 def class_name @class_name end |
#queue_name ⇒ Object (readonly)
Returns the value of attribute queue_name.
12 13 14 |
# File 'app/models/job_board/jobs_query.rb', line 12 def queue_name @queue_name end |
#status ⇒ Object (readonly)
Returns the value of attribute status.
12 13 14 |
# File 'app/models/job_board/jobs_query.rb', line 12 def status @status end |
Instance Method Details
#count ⇒ Object
38 39 40 |
# File 'app/models/job_board/jobs_query.rb', line 38 def count relation.count(:all) end |
#counts ⇒ Object
One COUNT per status, with the current filters applied — for tab badges.
32 33 34 35 36 |
# File 'app/models/job_board/jobs_query.rb', line 32 def counts STATUSES.index_with do |s| self.class.new(status: s, queue_name: queue_name, class_name: class_name).count end end |
#failed_jobs_relation ⇒ Object
Job relation backing bulk retry/discard. Only meaningful for the failed set, so it is always scoped to jobs with a failed execution.
44 45 46 47 48 49 |
# File 'app/models/job_board/jobs_query.rb', line 44 def failed_jobs_relation scope = SolidQueue::Job.joins(:failed_execution) scope = scope.where(queue_name: queue_name) if queue_name scope = scope.where(class_name: class_name) if class_name scope end |
#page(before: nil, limit: 25) ⇒ Object
20 21 22 23 24 25 26 27 28 29 |
# File 'app/models/job_board/jobs_query.rb', line 20 def page(before: nil, limit: 25) row_status = ROW_STATUS.fetch(status) builder = if status == "finished" ->(job) { JobRow.from_job(job) } else ->(execution) { JobRow.from_execution(execution, status: row_status) } end Page.new(relation.order(id: :desc), before: before, limit: limit, &builder) end |