Module: TalkToYourApp::Plugins::Jobs::Adapters::SolidQueue

Defined in:
lib/talk_to_your_app/plugins/jobs/adapters/solid_queue.rb

Overview

Solid Queue adapter. Reads Solid Queue’s ActiveRecord models, which live in the host application’s database. By default the queries run on the primary connection (whatever Solid Queue itself is configured to use); operators wanting isolation point Solid Queue at a separate database in their own config. Read-only and returns the common shape.

Constant Summary collapse

REQUIRED_GEM =
{ const: "SolidQueue", gem_name: "solid_queue" }.freeze

Class Method Summary collapse

Class Method Details

.failed_jobs(limit:) ⇒ Object



29
30
31
32
33
# File 'lib/talk_to_your_app/plugins/jobs/adapters/solid_queue.rb', line 29

def failed_jobs(limit:)
  ::SolidQueue::FailedExecution.includes(:job).order(created_at: :desc).limit(limit).map do |failure|
    job_hash(failure.job).merge(error_message: failure.message)
  end
end

.job_hash(job) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/talk_to_your_app/plugins/jobs/adapters/solid_queue.rb', line 45

def job_hash(job)
  # Keep every key present even for an orphaned failure (nil job), so
  # the shape matches the Sidekiq adapter.
  return { jid: nil, class: nil, queue: nil, args: nil, enqueued_at: nil, error_message: nil } unless job

  {
    jid: job.active_job_id || job.id,
    class: job.class_name,
    queue: job.queue_name,
    args: job.arguments,
    enqueued_at: job.created_at&.utc&.iso8601,
    error_message: nil, # failed_jobs overrides this; present for shape stability
  }
end

.queue_sizesObject



21
22
23
# File 'lib/talk_to_your_app/plugins/jobs/adapters/solid_queue.rb', line 21

def queue_sizes
  ::SolidQueue::ReadyExecution.group(:queue_name).count
end

.rate_metrics(window:) ⇒ Object



35
36
37
38
39
40
41
42
43
# File 'lib/talk_to_your_app/plugins/jobs/adapters/solid_queue.rb', line 35

def rate_metrics(window:)
  since = Time.now - window.to_i # plain Ruby; no ActiveSupport core-ext dependency
  {
    window_seconds: window,
    enqueued: ::SolidQueue::Job.where(created_at: since..).count,
    processed: ::SolidQueue::Job.where.not(finished_at: nil).where(finished_at: since..).count,
    failed: ::SolidQueue::FailedExecution.where(created_at: since..).count,
  }
end

.recent_jobs(limit:) ⇒ Object



25
26
27
# File 'lib/talk_to_your_app/plugins/jobs/adapters/solid_queue.rb', line 25

def recent_jobs(limit:)
  ::SolidQueue::Job.order(created_at: :desc).limit(limit).map { |job| job_hash(job) }
end

.required_gemObject



17
18
19
# File 'lib/talk_to_your_app/plugins/jobs/adapters/solid_queue.rb', line 17

def required_gem
  REQUIRED_GEM
end