app/models/scheduled_task.rb in tasks_scheduler-0.3.0 vs app/models/scheduled_task.rb in tasks_scheduler-0.4.0
- old
+ new
@@ -1,14 +1,16 @@
+# frozen_string_literal: true
+
require 'rake'
class ScheduledTask < ActiveRecord::Base
include ::ScheduledTask::Checker
include ::ScheduledTask::Log
include ::ScheduledTask::Runner
include ::ScheduledTask::Status
- DEFAULT_TIMEOUT_ENVVAR_NAME = 'TASKS_SCHEDULER_TIMEOUT'.freeze
+ DEFAULT_TIMEOUT_ENVVAR_NAME = 'TASKS_SCHEDULER_TIMEOUT'
DEFAULT_TIMEOUT = 12.hours
class << self
def rake_tasks
@rake_tasks ||= begin
@@ -18,13 +20,13 @@
end
def timeout
@timeout ||= begin
r = Integer(ENV[DEFAULT_TIMEOUT_ENVVAR_NAME])
- r > 0 ? r.seconds : DEFAULT_TIMEOUT
- rescue ArgumentError, TypeError
- DEFAULT_TIMEOUT
+ r.positive? ? r.seconds : DEFAULT_TIMEOUT
+ rescue ArgumentError, TypeError
+ DEFAULT_TIMEOUT
end
end
end
STATUS_RUNNING = 'running'
@@ -32,11 +34,11 @@
STATUS_WAITING = 'waiting'
STATUS_ABORTED = 'aborted'
STATUS_TIMEOUT = 'timeout'
STATUS_DISABLED = 'disabled'
- LAST_FAIL_STATUSES = [STATUS_FAILED, STATUS_ABORTED, STATUS_TIMEOUT]
+ LAST_FAIL_STATUSES = [STATUS_FAILED, STATUS_ABORTED, STATUS_TIMEOUT].freeze
validates :scheduling, presence: true, 'tasks_scheduler/cron_scheduling': true
validates :task, presence: true
validates :last_fail_status, allow_blank: true, inclusion: { in: LAST_FAIL_STATUSES }
@@ -67,17 +69,18 @@
super
end
def process_running?
return false if pid.nil?
+
Process.kill(0, pid)
- return true
+ true
rescue Errno::EPERM
raise "No permission to query #{pid}!"
rescue Errno::ESRCH
- return false
- rescue
+ false
+ rescue StandardError
raise "Unable to determine status for #{pid}"
end
def task_exist?
self.class.rake_tasks.include?(task)
@@ -85,8 +88,9 @@
def validate_task
return if task.blank?
return unless task_changed?
return if self.class.rake_tasks.include?(task)
+
errors.add(:task, "Task \"#{task}\" not found")
end
end