Module: SolidQueueMonitor::JobDetailsHelper

Defined in:
app/helpers/solid_queue_monitor/job_details_helper.rb

Instance Method Summary collapse

Instance Method Details

#detail_duration(seconds) ⇒ Object



28
29
30
31
32
33
34
35
# File 'app/helpers/solid_queue_monitor/job_details_helper.rb', line 28

def detail_duration(seconds)
  return '-' unless seconds
  return "#{(seconds * 1000).round}ms" if seconds < 1
  return "#{seconds.round(1)}s" if seconds < 60
  return "#{(seconds / 60).floor}m #{(seconds % 60).round}s" if seconds < 3600

  "#{(seconds / 3600).floor}h #{((seconds % 3600) / 60).floor}m"
end

#detail_job_status(job:, failed_execution:, claimed_execution:, scheduled_execution:) ⇒ Object



5
6
7
8
9
10
11
12
# File 'app/helpers/solid_queue_monitor/job_details_helper.rb', line 5

def detail_job_status(job:, failed_execution:, claimed_execution:, scheduled_execution:)
  return :failed if failed_execution
  return :in_progress if claimed_execution
  return :scheduled if scheduled_execution || job.scheduled_at&.future?
  return :completed if job.finished_at

  :pending
end

#detail_status_class(status = detail_job_status) ⇒ Object



24
25
26
# File 'app/helpers/solid_queue_monitor/job_details_helper.rb', line 24

def detail_status_class(status = detail_job_status)
  "status-#{status.to_s.tr('_', '-')}"
end

#detail_status_label(status = detail_job_status) ⇒ Object



14
15
16
17
18
19
20
21
22
# File 'app/helpers/solid_queue_monitor/job_details_helper.rb', line 14

def detail_status_label(status = detail_job_status)
  {
    failed: 'Failed',
    in_progress: 'In Progress',
    scheduled: 'Scheduled',
    completed: 'Completed',
    pending: 'Pending'
  }[status]
end

#detail_timing(job:, claimed_execution:, failed_execution:) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/helpers/solid_queue_monitor/job_details_helper.rb', line 37

def detail_timing(job:, claimed_execution:, failed_execution:)
  created_at = job.created_at
  started_at = claimed_execution&.created_at
  finished_at = job.finished_at
  failed_at = failed_execution&.created_at
  end_time = finished_at || failed_at

  {
    queue_wait: started_at && created_at ? started_at - created_at : nil,
    execution: started_at && end_time ? end_time - started_at : nil,
    total: created_at && end_time ? end_time - created_at : nil
  }
end

#pretty_arguments(args) ⇒ Object



51
52
53
54
55
56
57
# File 'app/helpers/solid_queue_monitor/job_details_helper.rb', line 51

def pretty_arguments(args)
  return '-' if args.blank?

  JSON.pretty_generate(args)
rescue JSON::GeneratorError
  args.inspect
end

#recent_job_duration(job) ⇒ Object



59
60
61
62
63
64
# File 'app/helpers/solid_queue_monitor/job_details_helper.rb', line 59

def recent_job_duration(job)
  end_time = job.finished_at || job.failed_execution&.created_at
  return '-' unless end_time

  detail_duration(end_time - job.created_at)
end