Class: Marty::CronJob

Inherits:
ActiveJob::Base
  • Object
show all
Defined in:
app/jobs/marty/cron_job.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.cron_expressionObject



67
68
69
# File 'app/jobs/marty/cron_job.rb', line 67

def cron_expression
  ::Marty::BackgroundJob::Schedule.on.find_by(job_class: name)&.cron
end

.delayed_jobObject



61
62
63
64
65
# File 'app/jobs/marty/cron_job.rb', line 61

def delayed_job
  Delayed::Job.
    where('handler LIKE ?', "%job_class: #{name}\n%").
    first
end

.removeObject Also known as: remove_schedule



51
52
53
# File 'app/jobs/marty/cron_job.rb', line 51

def remove
  delayed_job.destroy if scheduled?
end

.rescheduleObject



43
44
45
46
47
48
49
# File 'app/jobs/marty/cron_job.rb', line 43

def reschedule
  dj = delayed_job
  return dj.update(cron: cron_expression) if dj.locked_by?

  remove
  schedule
end

.scheduleObject



33
34
35
36
37
38
39
40
41
# File 'app/jobs/marty/cron_job.rb', line 33

def schedule
  return reschedule if scheduled?

  cron = cron_expression

  return if cron.blank?

  set(cron: cron).perform_later
end

.scheduled?Boolean



57
58
59
# File 'app/jobs/marty/cron_job.rb', line 57

def scheduled?
  delayed_job.present?
end

Instance Method Details

#log_failure(exception) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
# File 'app/jobs/marty/cron_job.rb', line 12

def log_failure(exception)
  error = {
    message: exception.message,
    backtrace: exception.backtrace
  }

  ::Marty::BackgroundJob::Log.create!(
    job_class: self.class.name,
    status: :failure,
    error: error
  )
end

#log_successObject



25
26
27
28
29
30
# File 'app/jobs/marty/cron_job.rb', line 25

def log_success
  ::Marty::BackgroundJob::Log.create!(
    job_class: self.class.name,
    status: :success
  )
end