Sha256: 8832e36338c26972eb2274ce67b58f6e1d93b1a392328b6686733d257b2d1988

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

class ScheduledTask < ActiveRecord::Base
  module Runner
    def run
      log_on_start
      run_banner
      return if process_running? && pid != Process.pid
      status_on_start
      exception = invoke_task
      run_log(exception, :fatal) if exception
      status_on_end(exception)
      log_on_end(exception)
      run_log("Next run: #{next_run.in_time_zone}")
    end

    private

    def run_log(message, method = :info)
      if message.is_a?(Exception)
        run_log("#{message.class}: #{message.message}")
        run_log(message.backtrace.join("\n"))
      else
        Rails.logger.send(method, "TASK_RUN(#{id}): #{message}")
      end
    end

    def run_banner
      run_log("Task: #{self}")
      run_log("PID: #{pid ? pid : '-'} (Current: #{Process.pid})")
      run_log("Process running? #{process_running? ? 'Yes' : 'No'}")
    end

    def invoke_task
      exception = nil
      begin
        Rake::Task.clear
        Rails.application.load_tasks
        Rake::Task[task].invoke(*invoke_args)
      rescue StandardError => ex
        run_log(ex, :fatal)
        exception = ex
      end
      exception
    end

    def invoke_args
      return [] unless args.present?
      args.split('|')
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
tasks_scheduler-0.0.5 app/models/scheduled_task/runner.rb
tasks_scheduler-0.0.3 app/models/scheduled_task/runner.rb