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