Class: Heimdall::Schedule

Inherits:
Model show all
Defined in:
lib/heimdall/heimdall_model_schedule.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.runObject

run schedules in a loop



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/heimdall/heimdall_model_schedule.rb', line 35

def run
  return if @running
  @running = true

  require 'parse-cron'

  set_schedules

  if CONFIG[:disable_cron]
    puts 'Heimdall - CRON disabled in config'
  else
    Thread.new do
      loop do
        for schedule in @active_schedules
          if schedule.next_run_at < Time.now
            schedule.set_next_run
            schedule.job.call
          end
        end

        sleep 1
      end
    end
  end
end

.set_schedulesObject

sets schedules and fills in memory objects



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/heimdall/heimdall_model_schedule.rb', line 9

def set_schedules
  @active_schedules = []

  jobs = CONFIG.active_jobs.select{|el| el.cattr.every || el.cattr.cron }

  for job in Schedule.all
    job.delete unless jobs.map(&:to_s).include?(job)
  end

  for job_class in jobs
    if job_class.cattr.cron
      CronParser.new(job_class.cattr.cron)
    end

    row = self.first_or_new name: job_class.to_s
    row.every = job_class.cattr.every
    row.cron  = job_class.cattr.cron
    row.next_run_at ||= Time.now - 1.day
    row.save
    @active_schedules.push row
  end

  run
end

Instance Method Details

#jobObject



64
65
66
# File 'lib/heimdall/heimdall_model_schedule.rb', line 64

def job
  name.constantize
end

#set_next_runObject



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/heimdall/heimdall_model_schedule.rb', line 68

def set_next_run
  if self[:cron].present?
    self[:next_run_at] = CronParser.new(cron).next(Time.now)
  elsif self[:every].present?
    self[:next_run_at] = Time.now + every.to_i.seconds
  end

  self[:last_run_at] = Time.now

  save
end