Class: SolidQueueTui::Data::JobsQuery

Inherits:
Object
  • Object
show all
Defined in:
lib/solid_queue_tui/data/jobs_query.rb

Defined Under Namespace

Classes: Job

Class Method Summary collapse

Class Method Details

.count(status:, filter: nil, queue: nil) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/solid_queue_tui/data/jobs_query.rb', line 26

def self.count(status:, filter: nil, queue: nil)
  case status
  when "claimed"   then count_scope(SolidQueue::ClaimedExecution.joins(:job), filter: filter, queue: queue)
  when "blocked"   then count_scope(SolidQueue::BlockedExecution.joins(:job), filter: filter, queue: queue)
  when "scheduled" then count_scope(SolidQueue::ScheduledExecution.joins(:job), filter: filter, queue: queue)
  when "completed" then count_finished(filter: filter, queue: queue)
  else 0
  end
rescue => e
  0
end

.fetch(status:, filter: nil, queue: nil, limit: 100, offset: 0) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/solid_queue_tui/data/jobs_query.rb', line 14

def self.fetch(status:, filter: nil, queue: nil, limit: 100, offset: 0)
  case status
  when "claimed"   then fetch_claimed(filter: filter, queue: queue, limit: limit, offset: offset)
  when "blocked"   then fetch_blocked(filter: filter, queue: queue, limit: limit, offset: offset)
  when "scheduled" then fetch_scheduled(filter: filter, queue: queue, limit: limit, offset: offset)
  when "completed" then fetch_finished(filter: filter, queue: queue, limit: limit, offset: offset)
  else []
  end
rescue => e
  []
end

.fetch_blocked(filter: nil, queue: nil, limit: 100, offset: 0) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/solid_queue_tui/data/jobs_query.rb', line 61

def self.fetch_blocked(filter: nil, queue: nil, limit: 100, offset: 0)
  scope = SolidQueue::BlockedExecution.joins(:job)
  scope = scope.merge(SolidQueue::Job.where(queue_name: queue)) if queue
  scope = apply_class_name_filter(scope, filter)
  scope = scope.order(job_id: :asc).offset(offset).limit(limit)

  scope.includes(:job).map do |be|
    job = be.job
    Job.new(
      id: job.id,
      queue_name: job.queue_name,
      class_name: job.class_name,
      priority: job.priority,
      status: "blocked",
      active_job_id: job.active_job_id,
      concurrency_key: job.concurrency_key,
      created_at: be.created_at,
      expires_at: be.expires_at
    )
  end
end

.fetch_claimed(filter: nil, queue: nil, limit: 100, offset: 0) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/solid_queue_tui/data/jobs_query.rb', line 38

def self.fetch_claimed(filter: nil, queue: nil, limit: 100, offset: 0)
  scope = SolidQueue::ClaimedExecution.joins(:job)
  scope = scope.merge(SolidQueue::Job.where(queue_name: queue)) if queue
  scope = apply_class_name_filter(scope, filter)
  scope = scope.order(job_id: :asc).offset(offset).limit(limit)

  scope.includes(:job).map do |ce|
    job = ce.job
    Job.new(
      id: job.id,
      queue_name: job.queue_name,
      class_name: job.class_name,
      priority: job.priority,
      status: "claimed",
      active_job_id: job.active_job_id,
      concurrency_key: job.concurrency_key,
      created_at: job.created_at,
      worker_id: ce.process_id,
      started_at: ce.created_at
    )
  end
end

.fetch_finished(filter: nil, queue: nil, limit: 100, offset: 0) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/solid_queue_tui/data/jobs_query.rb', line 105

def self.fetch_finished(filter: nil, queue: nil, limit: 100, offset: 0)
  scope = SolidQueue::Job.finished
  scope = scope.where(queue_name: queue) if queue
  scope = scope.where("class_name LIKE ?", "%#{filter}%") if filter.present?
  scope = scope.order(finished_at: :desc).offset(offset).limit(limit)

  scope.map do |job|
    Job.new(
      id: job.id,
      queue_name: job.queue_name,
      class_name: job.class_name,
      priority: job.priority,
      status: "completed",
      active_job_id: job.active_job_id,
      arguments: job.arguments,
      finished_at: job.finished_at,
      created_at: job.created_at
    )
  end
end

.fetch_scheduled(filter: nil, queue: nil, limit: 100, offset: 0) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/solid_queue_tui/data/jobs_query.rb', line 83

def self.fetch_scheduled(filter: nil, queue: nil, limit: 100, offset: 0)
  scope = SolidQueue::ScheduledExecution.joins(:job)
  scope = scope.merge(SolidQueue::Job.where(queue_name: queue)) if queue
  scope = apply_class_name_filter(scope, filter)
  scope = scope.order(scheduled_at: :asc, priority: :asc).offset(offset).limit(limit)

  scope.includes(:job).map do |se|
    job = se.job
    Job.new(
      id: job.id,
      queue_name: job.queue_name,
      class_name: job.class_name,
      priority: job.priority,
      status: "scheduled",
      active_job_id: job.active_job_id,
      arguments: job.arguments,
      scheduled_at: se.scheduled_at,
      created_at: job.created_at
    )
  end
end