Class: ScheduledTask

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
Checker, Log, Runner, Status
Defined in:
app/models/scheduled_task.rb,
app/models/scheduled_task/log.rb,
app/models/scheduled_task/runner.rb,
app/models/scheduled_task/status.rb,
app/models/scheduled_task/checker.rb

Defined Under Namespace

Modules: Checker, Log, Runner, Status

Constant Summary collapse

STATUS_RUNNING =
'running'
STATUS_FAILED =
'failed'
STATUS_WAITING =
'waiting'
LOG_RUNNING =
'running'
LOG_SUCCESSFUL =
'successful'
LOG_UNSUCCESSFUL =
'unsuccessful'

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Status

#ended?, #failed?, #running?, #status, #waiting?

Methods included from Runner

#run

Methods included from Log

#log_file

Methods included from Checker

#check

Class Method Details

.rake_tasksObject



10
11
12
13
14
15
# File 'app/models/scheduled_task.rb', line 10

def rake_tasks
  @rake_tasks ||= begin
    Rails.application.load_tasks
    Rake.application.tasks.map(&:name)
  end
end

Instance Method Details

#calculate_next_run(time = nil) ⇒ Object



37
38
39
40
41
42
43
# File 'app/models/scheduled_task.rb', line 37

def calculate_next_run(time = nil)
  if time.present?
    cron_parser.next(time.utc)
  else
    cron_parser.next
  end
end

#cron_parserObject



29
30
31
# File 'app/models/scheduled_task.rb', line 29

def cron_parser
  @cron_parser ||= ::CronParser.new(scheduling)
end

#process_running?Boolean

Returns:

  • (Boolean)


50
51
52
53
54
55
56
57
58
59
60
# File 'app/models/scheduled_task.rb', line 50

def process_running?
  return false if pid.nil?
  Process.kill(0, pid)
  return true
rescue Errno::EPERM
  raise "No permission to query #{pid}!"
rescue Errno::ESRCH
  return false
rescue
  raise "Unable to determine status for #{pid}"
end

#to_sObject



33
34
35
# File 'app/models/scheduled_task.rb', line 33

def to_s
  "S: #{scheduling}, T: #{task}, NR: #{next_run.present? ? next_run.in_time_zone : '-'}"
end

#write_attribute(name, value) ⇒ Object



45
46
47
48
# File 'app/models/scheduled_task.rb', line 45

def write_attribute(name, value)
  @cron_parser = nil if name == 'scheduling'
  super
end