Class: RoundhouseUi::Backends::SolidQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/roundhouse_ui/backends/solid_queue.rb

Overview

Solid Queue implementation of the backend port. Reads Solid Queue's ActiveRecord tables and normalizes them to the same shape the Sidekiq backend exposes, so controllers/views don't change.

Solid Queue has no "retry set" (retries are just re-scheduled executions), no Redis, and no capsules — the UI hides those via #supports?. Queue pause is native, so there's no fetcher to warn about.

Defined Under Namespace

Classes: Entry, JobSet, Stats

Constant Summary collapse

CAPABILITIES =

No retries/redis/capsules/workers (deferred); pause is native (no fetcher warning). dead/scheduled/busy are supported.

%i[dead scheduled busy native_pause].freeze

Instance Method Summary collapse

Instance Method Details

#busyObject

Currently-executing jobs, normalized to the Busy view's shape.



47
48
49
50
51
52
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 47

def busy
  sq(:ClaimedExecution).includes(:job, :process).map do |claim|
    e = Entry.new(claim)
    { process: claim.process&.name, tid: claim.id, queue: e.queue, run_at: claim.created_at, job: e }
  end
end

#dead_setObject



43
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 43

def dead_set      = JobSet.new(sq(:FailedExecution).includes(:job).order(created_at: :desc))

#nameObject



13
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 13

def name = "Solid Queue"

#pause(name) ⇒ Object



63
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 63

def pause(name)   = ::SolidQueue::Queue.new(name).pause

#paused_queuesObject

--- pause (native) ---



62
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 62

def paused_queues = ::SolidQueue::Pause.pluck(:queue_name)

#process_setObject

Workers view is deferred (supports?(:workers) == false), and Solid Queue processes don't report thread concurrency the way Metrics expects, so the utilization signal reads as "no workers reporting" rather than crashing.



41
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 41

def process_set = []

#push(_payload) ⇒ Object

ActiveJob enqueues via perform_later; a raw push has no direct analogue.

Raises:

  • (NotImplementedError)


67
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 67

def push(_payload) = raise NotImplementedError, "enqueue is Sidekiq-only for now"

#queue(name) ⇒ Object



33
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 33

def queue(name) = ::SolidQueue::Queue.new(name)

#queuesObject



32
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 32

def queues = ::SolidQueue::Queue.all

#resume(name) ⇒ Object



64
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 64

def resume(name)  = ::SolidQueue::Queue.new(name).resume

#retry_setObject

No retry set in Solid Queue — surfaced via supports?(:retries) => false.



36
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 36

def retry_set = EMPTY_SET

#scheduled_setObject



44
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 44

def scheduled_set = JobSet.new(sq(:ScheduledExecution).includes(:job).order(:scheduled_at))

#set(kind) ⇒ Object



54
55
56
57
58
59
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 54

def set(kind)
  case kind.to_s
  when "dead"      then dead_set
  when "scheduled" then scheduled_set
  end
end

#statsObject



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 20

def stats
  Stats.new(
    processed: sq(:Job).where.not(finished_at: nil).count,
    failed:    sq(:FailedExecution).count,
    enqueued:  sq(:ReadyExecution).count,
    scheduled: sq(:ScheduledExecution).count,
    busy:      sq(:ClaimedExecution).count,
    dead:      sq(:FailedExecution).count,
    retries:   0
  )
end

#supports?(capability) ⇒ Boolean

Returns:

  • (Boolean)


18
# File 'lib/roundhouse_ui/backends/solid_queue.rb', line 18

def supports?(capability) = CAPABILITIES.include?(capability)