Module: Scheduler

Defined in:
lib/scheduler.rb,
lib/scheduler/engine.rb,
lib/scheduler/version.rb,
lib/scheduler/main_process.rb,
lib/scheduler/configuration.rb,
app/models/scheduler/schedulable.rb,
lib/generators/scheduler/config_generator.rb

Defined Under Namespace

Modules: Generators, Schedulable Classes: Configuration, Engine, MainProcess

Constant Summary collapse

VERSION =
'0.1.2'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configurationScheduler::Configuration

Initializes configuration.

Returns:



10
11
12
# File 'lib/scheduler.rb', line 10

def configuration
  @configuration
end

Class Method Details

.configure {|@configuration| ... } ⇒ nil

Method to configure various Scheduler options.

Yields:

Returns:

  • (nil)


24
25
26
27
# File 'lib/scheduler.rb', line 24

def configure
  @configuration ||= Scheduler::Configuration.new
  yield @configuration
end

.pidInteger

Gets scheduler main process pid.

Returns:

  • (Integer)

    main process pid.



41
42
43
# File 'lib/scheduler.rb', line 41

def pid
  File.read(self.pid_file).to_i rescue nil
end

.pid_fileString

Gets scheduler pid file.

Returns:

  • (String)

    the pid file.



33
34
35
# File 'lib/scheduler.rb', line 33

def pid_file
  '/tmp/rails-scheduler.pid'
end

.restartnil

Restarts the scheduler.

Returns:

  • (nil)


81
82
83
84
# File 'lib/scheduler.rb', line 81

def restart
  self.stop
  self.start
end

.startnil

Starts a Scheduler::MainProcess in a separate process.

Returns:

  • (nil)


49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/scheduler.rb', line 49

def start
  scheduler_pid = Process.fork do
    begin
      Process.daemon(true)
      File.open(self.pid_file, 'w+') do |pidfile|
        pidfile.puts Process.pid
      end
      scheduler = Scheduler::MainProcess.new
    rescue StandardError => e
      Rails.logger.error "#{e.class}: #{e.message} (#{e.backtrace.first})".red
    end
  end
  Process.detach(scheduler_pid)
  scheduler_pid
end

.stopnil

Reschedules all running jobs and stops the scheduler main process.

Returns:

  • (nil)


69
70
71
72
73
74
75
# File 'lib/scheduler.rb', line 69

def stop
  begin  
    Process.kill :TERM, Scheduler.pid
    FileUtils.rm(self.pid_file)
  rescue TypeError, Errno::ENOENT, Errno::ESRCH
  end
end