Class: SolidQueueTui::Actions::RetryJob

Inherits:
Object
  • Object
show all
Defined in:
lib/solid_queue_tui/actions/retry_job.rb

Class Method Summary collapse

Class Method Details

.call(failed_execution_id) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/solid_queue_tui/actions/retry_job.rb', line 6

def self.call(failed_execution_id)
  conn = ActiveRecord::Base.connection

  # Get the failed execution and its job
  row = conn.select_one(
    "SELECT fe.id, fe.job_id, j.queue_name, j.priority " \
    "FROM solid_queue_failed_executions fe " \
    "JOIN solid_queue_jobs j ON j.id = fe.job_id " \
    "WHERE fe.id = #{conn.quote(failed_execution_id.to_i)}"
  )
  return false unless row

  conn.transaction do
    # Create a ready execution for the job
    conn.execute(
      "INSERT INTO solid_queue_ready_executions (job_id, queue_name, priority, created_at) " \
      "VALUES (#{conn.quote(row['job_id'])}, #{conn.quote(row['queue_name'])}, " \
      "#{conn.quote(row['priority'])}, #{conn.quote(Time.now.utc.iso8601)})"
    )

    # Remove the failed execution
    conn.execute(
      "DELETE FROM solid_queue_failed_executions WHERE id = #{conn.quote(failed_execution_id.to_i)}"
    )

    # Clear finished_at on the job
    conn.execute(
      "UPDATE solid_queue_jobs SET finished_at = NULL " \
      "WHERE id = #{conn.quote(row['job_id'])}"
    )
  end

  true
rescue => e
  false
end

.retry_allObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/solid_queue_tui/actions/retry_job.rb', line 43

def self.retry_all
  conn = ActiveRecord::Base.connection

  rows = conn.select_all(
    "SELECT fe.id, fe.job_id, j.queue_name, j.priority " \
    "FROM solid_queue_failed_executions fe " \
    "JOIN solid_queue_jobs j ON j.id = fe.job_id"
  )

  count = 0
  rows.each do |row|
    conn.transaction do
      conn.execute(
        "INSERT INTO solid_queue_ready_executions (job_id, queue_name, priority, created_at) " \
        "VALUES (#{conn.quote(row['job_id'])}, #{conn.quote(row['queue_name'])}, " \
        "#{conn.quote(row['priority'])}, #{conn.quote(Time.now.utc.iso8601)})"
      )
      conn.execute(
        "DELETE FROM solid_queue_failed_executions WHERE id = #{conn.quote(row['id'])}"
      )
      conn.execute(
        "UPDATE solid_queue_jobs SET finished_at = NULL WHERE id = #{conn.quote(row['job_id'])}"
      )
      count += 1
    end
  rescue
    next
  end

  count
end